<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Bashkit changelog</title>
<link>https://docs.everruns.com/changelog/bashkit/</link>
<atom:link href="https://docs.everruns.com/changelog/bashkit/rss.xml" rel="self" type="application/rss+xml"/>
<description>What changed in Bashkit, one short entry per change.</description>
<language>en</language>
<lastBuildDate>Thu, 08 Oct 2026 00:00:00 GMT</lastBuildDate>
<item><title>History, completion and bash -i work like bash</title><link>https://docs.everruns.com/changelog/2026-10-08-bashkit-interactive-shell-features/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-10-08-bashkit-interactive-shell-features/</guid><pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate><description>Bashkit adds history and fc, complete and compgen, bind, prompt expansion and an interactive bash -i child shell, each with state kept per interpreter.</description><content:encoded><![CDATA[<p>Bashkit now implements bash’s interactive builtins, with state kept per
interpreter:</p>
<ul>
<li><code dir="auto">history</code> and <code dir="auto">fc</code> under <code dir="auto">set -o history</code> or <code dir="auto">bash -i</code>, with <code dir="auto">HISTSIZE</code>,
<code dir="auto">HISTFILESIZE</code>, <code dir="auto">histappend</code> and <code dir="auto">HISTFILE</code> in the VFS. <code dir="auto">fc</code> reruns commands
but opens no editor.</li>
<li><code dir="auto">complete</code>, <code dir="auto">compgen</code> and <code dir="auto">compopt</code> with all actions.</li>
<li><code dir="auto">bind</code> with bash’s default emacs bindings.</li>
<li><code dir="auto">${x@P}</code> prompt decoding.</li>
<li>A <code dir="auto">bash -i</code> child shell with <code dir="auto">PS1</code>, <code dir="auto">PS2</code> and <code dir="auto">PS4</code> defaults, <code dir="auto">~/.bashrc</code> or
<code dir="auto">--rcfile</code>, and <code dir="auto">--norc</code>.</li>
</ul>
<p>The Oils spec pass rate went from 89.0% to 92.8%.</p>
<p>See the <a href="https://github.com/everruns/bashkit/blob/main/crates/bashkit/docs/compatibility.md">compatibility scorecard</a> and <a href="https://github.com/everruns/bashkit/pull/2648">#2648</a>.</p>]]></content:encoded><category>Bashkit</category><category>Feature</category></item>
<item><title>An in-process terminal and TerminalTool for agents</title><link>https://docs.everruns.com/changelog/2026-10-07-bashkit-terminal-tool/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-10-07-bashkit-terminal-tool/</guid><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><description>A terminal feature runs a Bashkit session in an in-memory terminal with vi, less and more, and TerminalTool lets an LLM agent type keys across named tabs.</description><content:encoded><![CDATA[<p>The off-by-default <code dir="auto">terminal</code> feature wraps a Bashkit session in an in-memory
terminal with <code dir="auto">vi</code> and interactive <code dir="auto">less</code> and <code dir="auto">more</code>. <code dir="auto">TerminalTool</code> turns it
into one agent tool call: the model sends keys in Vim notation and gets back
the screen, the activity (<code dir="auto">prompt</code>, <code dir="auto">continuation</code>, <code dir="auto">running</code> or <code dir="auto">exited</code>) and
the commands that finished.</p>
<div class="expressive-code"><link rel="stylesheet" href="https://docs.everruns.com/_astro/ec.aiyd6.css"><script type="module" src="https://docs.everruns.com/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="rust" class="wrap" style="--ecMaxLine:69ch"><code><div class="ec-line"><div class="code"><span style="--0:#BF3441;--1:#F97583">let</span><span style="--0:#24292E;--1:#E1E4E8"> </span><span style="--0:#BF3441;--1:#F97583">mut</span><span style="--0:#24292E;--1:#E1E4E8"> tool </span><span style="--0:#BF3441;--1:#F97583">=</span><span style="--0:#24292E;--1:#E1E4E8"> </span><span style="--0:#6F42C1;--1:#B392F0">TerminalTool</span><span style="--0:#BF3441;--1:#F97583">::</span><span style="--0:#6F42C1;--1:#B392F0">new</span><span style="--0:#24292E;--1:#E1E4E8">(</span><span style="--0:#6F42C1;--1:#B392F0">Bash</span><span style="--0:#BF3441;--1:#F97583">::</span><span style="--0:#6F42C1;--1:#B392F0">builder</span><span style="--0:#24292E;--1:#E1E4E8">());</span></div></div><div class="ec-line"><div class="code"><span style="--0:#BF3441;--1:#F97583">let</span><span style="--0:#24292E;--1:#E1E4E8"> out </span><span style="--0:#BF3441;--1:#F97583">=</span><span style="--0:#24292E;--1:#E1E4E8"> tool</span><span style="--0:#BF3441;--1:#F97583">.</span><span style="--0:#6F42C1;--1:#B392F0">call</span><span style="--0:#24292E;--1:#E1E4E8">(</span><span style="--0:#6F42C1;--1:#B392F0">json!</span><span style="--0:#24292E;--1:#E1E4E8">({</span><span style="--0:#032F62;--1:#9ECBFF">"input"</span><span style="--0:#BF3441;--1:#F97583">:</span><span style="--0:#24292E;--1:#E1E4E8"> </span><span style="--0:#032F62;--1:#9ECBFF">"vi /tmp/n.txt&#x3C;Enter>"</span><span style="--0:#24292E;--1:#E1E4E8">}))</span><span style="--0:#BF3441;--1:#F97583">.await?</span><span style="--0:#24292E;--1:#E1E4E8">;</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="let mut tool = TerminalTool::new(Bash::builder());let out = tool.call(json!({&#x22;input&#x22;: &#x22;vi /tmp/n.txt<Enter>&#x22;})).await?;"><div></div></button></div></figure></div>
<p><code dir="auto">TerminalTool::with_sessions</code> adds up to 8 named tabs that share the filesystem
and keep running in the background. Python (<code dir="auto">bashkit.Terminal</code>) and Node
(<code dir="auto">Terminal</code> in <code dir="auto">@everruns/bashkit</code>) expose the same calls.</p>
<p>See <a href="https://github.com/everruns/bashkit/blob/main/docs/terminal.md">Terminal</a>, <a href="https://github.com/everruns/bashkit/pull/2509">#2509</a>, <a href="https://github.com/everruns/bashkit/pull/2518">#2518</a>, <a href="https://github.com/everruns/bashkit/pull/2521">#2521</a>, <a href="https://github.com/everruns/bashkit/pull/2523">#2523</a> and <a href="https://github.com/everruns/bashkit/pull/2548">#2548</a>.</p>]]></content:encoded><category>Bashkit</category><category>Feature</category></item>
<item><title>A make builtin and 21 everyday commands</title><link>https://docs.everruns.com/changelog/2026-10-07-bashkit-make-everyday-commands/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-10-07-bashkit-make-everyday-commands/</guid><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><description>Bashkit gains a GNU make 4.3 subset that runs recipes in the sandbox shell, plus nohup, flock, getconf, free and 17 other commands that scripts often call.</description><content:encoded><![CDATA[<p><code dir="auto">make</code> is now a builtin: a GNU make 4.3 subset with every assignment flavor,
conditionals, <code dir="auto">define</code>, <code dir="auto">include</code>, explicit, pattern and suffix rules,
functions such as <code dir="auto">foreach</code>, <code dir="auto">call</code>, <code dir="auto">wildcard</code> and <code dir="auto">shell</code>, and the options
<code dir="auto">-f -C -n -k -q -s -i -B -e -j</code> (<code dir="auto">-j</code> runs sequentially). Recipes run through
the sandbox shell, and messages and exit codes follow GNU make.</p>
<p>Twenty-one commands that used to report “command not found” are added: <code dir="auto">arch</code>,
<code dir="auto">sum</code>, <code dir="auto">shasum</code>, <code dir="auto">egrep</code>, <code dir="auto">fgrep</code>, <code dir="auto">link</code>, <code dir="auto">unlink</code>, <code dir="auto">chgrp</code>, <code dir="auto">nohup</code>, <code dir="auto">nice</code>,
<code dir="auto">flock</code>, <code dir="auto">getconf</code>, <code dir="auto">tty</code>, <code dir="auto">sync</code>, <code dir="auto">hostid</code>, <code dir="auto">groups</code>, <code dir="auto">logname</code>, <code dir="auto">users</code>,
<code dir="auto">who</code>, <code dir="auto">uptime</code> and <code dir="auto">free</code>. <code dir="auto">cmd N>file</code> with N of 3 or more now opens only
fd N.</p>
<p>See the <a href="https://github.com/everruns/bashkit/blob/main/crates/bashkit/docs/compatibility.md">compatibility scorecard</a>, <a href="https://github.com/everruns/bashkit/pull/2551">#2551</a> and <a href="https://github.com/everruns/bashkit/pull/2546">#2546</a>.</p>]]></content:encoded><category>Bashkit</category><category>Feature</category></item>
<item><title>Real CPython 3.14 runs as python3 in a sandbox</title><link>https://docs.everruns.com/changelog/2026-10-07-bashkit-cpython-python3/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-10-07-bashkit-cpython-python3/</guid><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><description>An opt-in cpython feature makes python3 in Bashkit real CPython 3.14 in a WebAssembly sandbox, with the stdlib and HTTP through Bashkit's network policy.</description><content:encoded><![CDATA[<p>With the off-by-default <code dir="auto">cpython</code> feature, <code dir="auto">python</code> and <code dir="auto">python3</code> in Bashkit are
CPython 3.14: the full language, the pure-Python standard library plus modules
such as <code dir="auto">json</code>, <code dir="auto">re</code>, <code dir="auto">sqlite3</code> and <code dir="auto">asyncio</code>, and CPython’s command line (<code dir="auto">-c</code>,
<code dir="auto">-m</code>, files, stdin). Before, <code dir="auto">python3</code> was Monty, a Python subset.</p>
<div class="expressive-code"><link rel="stylesheet" href="https://docs.everruns.com/_astro/ec.aiyd6.css"><script type="module" src="https://docs.everruns.com/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="rust" class="wrap" style="--ecMaxLine:49ch"><code><div class="ec-line"><div class="code"><span style="--0:#BF3441;--1:#F97583">let</span><span style="--0:#24292E;--1:#E1E4E8"> </span><span style="--0:#BF3441;--1:#F97583">mut</span><span style="--0:#24292E;--1:#E1E4E8"> bash </span><span style="--0:#BF3441;--1:#F97583">=</span><span style="--0:#24292E;--1:#E1E4E8"> </span><span style="--0:#6F42C1;--1:#B392F0">Bash</span><span style="--0:#BF3441;--1:#F97583">::</span><span style="--0:#6F42C1;--1:#B392F0">builder</span><span style="--0:#24292E;--1:#E1E4E8">()</span><span style="--0:#BF3441;--1:#F97583">.</span><span style="--0:#6F42C1;--1:#B392F0">cpython</span><span style="--0:#24292E;--1:#E1E4E8">()</span><span style="--0:#BF3441;--1:#F97583">.</span><span style="--0:#6F42C1;--1:#B392F0">build</span><span style="--0:#24292E;--1:#E1E4E8">();</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="let mut bash = Bash::builder().cpython().build();"><div></div></button></div></figure></div>
<p>CPython runs as a WebAssembly guest on wasmtime, started per call from a
precompiled snapshot, with limits on time, memory, output and the VFS.
<code dir="auto">urllib.request</code>, <code dir="auto">http.client</code> and Bashkit’s own <code dir="auto">requests</code> and <code dir="auto">httpx</code>
modules make HTTP calls through the same allowlist and credential injection as
<code dir="auto">curl</code>.</p>
<p>See <a href="https://github.com/everruns/bashkit/blob/main/crates/bashkit/docs/cpython.md">CPython</a>, <a href="https://github.com/everruns/bashkit/pull/2515">#2515</a>, <a href="https://github.com/everruns/bashkit/pull/2568">#2568</a> and <a href="https://github.com/everruns/bashkit/pull/2572">#2572</a>.</p>]]></content:encoded><category>Bashkit</category><category>Feature</category></item>
<item><title>Background jobs and pipeline stages run concurrently</title><link>https://docs.everruns.com/changelog/2026-10-07-bashkit-concurrent-jobs-pipelines/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-10-07-bashkit-concurrent-jobs-pipelines/</guid><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><description>Bashkit now runs cmd &amp; jobs alongside the shell and streams pipeline stages into each other with SIGPIPE, adding jobs, wait -n, kill and related builtins.</description><content:encoded><![CDATA[<p><code dir="auto">cmd &#x26;</code> now runs concurrently with the shell, so <code dir="auto">sleep 1 &#x26; sleep 1 &#x26; wait</code>
takes one second instead of two. New <code dir="auto">jobs</code>, <code dir="auto">disown</code>, <code dir="auto">fg</code>, <code dir="auto">bg</code>, <code dir="auto">ps</code>,
<code dir="auto">pgrep</code> and <code dir="auto">pkill</code> builtins, <code dir="auto">wait -n</code>, <code dir="auto">wait -p VAR</code> and jobspecs work, and
<code dir="auto">kill</code> ends jobs. Live jobs are capped by
<code dir="auto">ExecutionLimits::max_background_jobs</code>.</p>
<p>Pipeline stages that run shell code, such as loops, groups and functions, now
stream into each other through a pipe with backpressure. When a reader stops,
the writer gets SIGPIPE and exits with 141, so
<code dir="auto">while :; do echo x; done | head -n 2</code> prints two lines as in bash.</p>
<p>Both are on by default; <code dir="auto">BashBuilder::concurrent_jobs(false)</code> turns them off.</p>
<p>See the <a href="https://github.com/everruns/bashkit/blob/main/crates/bashkit/docs/compatibility.md">compatibility scorecard</a>, <a href="https://github.com/everruns/bashkit/pull/2527">#2527</a> and <a href="https://github.com/everruns/bashkit/pull/2541">#2541</a>.</p>]]></content:encoded><category>Bashkit</category><category>Improvement</category></item>
<item><title>awk is rewritten to follow gawk 5.2</title><link>https://docs.everruns.com/changelog/2026-10-07-bashkit-awk-follows-gawk/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-10-07-bashkit-awk-follows-gawk/</guid><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><description>Bashkit's awk, gawk, mawk and nawk builtins now target gawk 5.2, with POSIX awk, common gawk extensions, and system() and pipes through the sandbox shell.</description><content:encoded><![CDATA[<p>Bashkit’s <code dir="auto">awk</code> was rewritten to target gawk 5.2, Debian’s <code dir="auto">awk</code>. It covers
POSIX awk plus the gawk extensions scripts commonly use; <code dir="auto">system()</code>, output
pipes and <code dir="auto">cmd | getline</code> run through the sandbox shell. Number output,
<code dir="auto">printf</code>, the <code dir="auto">rand()</code> sequence, leftmost-longest regex matching, diagnostics
and options follow gawk. <code dir="auto">gawk</code>, <code dir="auto">mawk</code> and <code dir="auto">nawk</code> run the same builtin.</p>
<p>On Bashkit’s Debian-oracle awk tests, the pass rate went from 51.5% to 93.8%.
Resource caps still apply, and <code dir="auto">split</code> and record splitting count against the
memory cap.</p>
<p>See the <a href="https://github.com/everruns/bashkit/blob/main/crates/bashkit/docs/compatibility.md">compatibility scorecard</a>, <a href="https://github.com/everruns/bashkit/pull/2583">#2583</a> and <a href="https://github.com/everruns/bashkit/pull/2561">#2561</a>.</p>]]></content:encoded><category>Bashkit</category><category>Improvement</category></item>
<item><title>Sessions start with a default root filesystem</title><link>https://docs.everruns.com/changelog/2026-10-06-bashkit-default-root-filesystem/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-10-06-bashkit-default-root-filesystem/</guid><pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate><description>Every Bashkit session now has read-only /etc, /proc and /usr/bin entries, so scripts that read os-release or cpuinfo or call /usr/bin/env find what they expect.</description><content:encoded><![CDATA[<p>Every <code dir="auto">Bash</code> session now starts with a synthetic root filesystem: a read-only
<code dir="auto">/etc</code> (<code dir="auto">os-release</code>, <code dir="auto">passwd</code>, <code dir="auto">group</code>, <code dir="auto">hostname</code>, <code dir="auto">hosts</code>, <code dir="auto">shells</code>,
<code dir="auto">timezone</code>), static <code dir="auto">/proc</code> files (<code dir="auto">cpuinfo</code>, <code dir="auto">meminfo</code>, <code dir="auto">version</code>, <code dir="auto">loadavg</code>),
<code dir="auto">/root</code> and <code dir="auto">/dev/zero</code>. <code dir="auto">/bin</code> and <code dir="auto">/usr/bin</code> list the builtins, so a
<code dir="auto">/usr/bin/env</code> shebang runs the builtin and <code dir="auto">type</code>, <code dir="auto">which</code> and <code dir="auto">command -v</code> report
<code dir="auto">/usr/bin/NAME</code>.</p>
<p>Session files take precedence, and the layer uses no quota and is never
snapshotted. Turn it off with:</p>
<div class="expressive-code"><link rel="stylesheet" href="https://docs.everruns.com/_astro/ec.aiyd6.css"><script type="module" src="https://docs.everruns.com/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="rust" class="wrap" style="--ecMaxLine:49ch"><code><div class="ec-line"><div class="code"><span style="--0:#BF3441;--1:#F97583">let</span><span style="--0:#24292E;--1:#E1E4E8"> bash </span><span style="--0:#BF3441;--1:#F97583">=</span><span style="--0:#24292E;--1:#E1E4E8"> </span><span style="--0:#6F42C1;--1:#B392F0">Bash</span><span style="--0:#BF3441;--1:#F97583">::</span><span style="--0:#6F42C1;--1:#B392F0">builder</span><span style="--0:#24292E;--1:#E1E4E8">()</span><span style="--0:#BF3441;--1:#F97583">.</span><span style="--0:#6F42C1;--1:#B392F0">rootfs</span><span style="--0:#24292E;--1:#E1E4E8">(</span><span style="--0:#005CC5;--1:#79B8FF">false</span><span style="--0:#24292E;--1:#E1E4E8">)</span><span style="--0:#BF3441;--1:#F97583">.</span><span style="--0:#6F42C1;--1:#B392F0">build</span><span style="--0:#24292E;--1:#E1E4E8">();</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="let bash = Bash::builder().rootfs(false).build();"><div></div></button></div></figure></div>
<p>See <a href="https://github.com/everruns/bashkit/blob/main/docs/filesystem.md">Filesystem</a> and <a href="https://github.com/everruns/bashkit/pull/2525">#2525</a>.</p>]]></content:encoded><category>Bashkit</category><category>Feature</category></item>
<item><title>Bashkit 0.18.2 release</title><link>https://docs.everruns.com/changelog/2026-09-22-bashkit-0-18-2/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-09-22-bashkit-0-18-2/</guid><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><description>sed is rewritten to follow GNU sed 4.9 so scripts written for Linux behave the same, Windows paths resolve correctly, and releases are hardened.</description><content:encoded><![CDATA[<div class="sl-heading-wrapper level-h2"><h2 id="highlights">Highlights</h2><a class="sl-anchor-link" href="#highlights"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “Highlights”</span></a></div>
<ul>
<li><strong><code dir="auto">sed</code> is GNU-aligned.</strong> The stream editor was rewritten after a differential audit against GNU sed 4.9 found 46 mismatches. It adds the missing commands (<code dir="auto">y = l n N P D T z F r R w W</code>), GNU range-address semantics, <code dir="auto">\U \L \u \l \E</code> case conversion, a real getopt (<code dir="auto">-s</code>, <code dir="auto">-z</code>, <code dir="auto">-f</code>, <code dir="auto">-l</code>, attached <code dir="auto">-i.bak</code>), and it preserves a missing final newline. <code dir="auto">-i</code> now writes atomically (<a href="https://github.com/everruns/bashkit/pull/2436">#2436</a>).</li>
<li><strong>Windows path fix.</strong> VFS paths use forward slashes on every host (<a href="https://github.com/everruns/bashkit/pull/2435">#2435</a>).</li>
<li><strong>Release pipeline hardening.</strong> npm publish verification now outlasts the registry cache (<a href="https://github.com/everruns/bashkit/pull/2426">#2426</a>), and untrusted workflow code no longer receives the checkout token (<a href="https://github.com/everruns/bashkit/pull/2420">#2420</a>).</li>
</ul>
<div class="sl-heading-wrapper level-h2"><h2 id="in-the-changelog">In the changelog</h2><a class="sl-anchor-link" href="#in-the-changelog"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “In the changelog”</span></a></div>
<ul>
<li><a href="https://docs.everruns.com/changelog/2026-09-21-bashkit-gnu-aligned-sed/">sed is rewritten to follow GNU sed 4.9</a></li>
</ul>
<p>See the <a href="https://github.com/everruns/bashkit/releases/tag/v0.18.2">GitHub release</a> and the <a href="https://github.com/everruns/bashkit/blob/main/CHANGELOG.md#0182---2026-09-22">full release notes</a> for every pull request in this version.</p>]]></content:encoded><category>Bashkit</category><category>Release</category></item>
<item><title>sed is rewritten to follow GNU sed 4.9</title><link>https://docs.everruns.com/changelog/2026-09-21-bashkit-gnu-aligned-sed/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-09-21-bashkit-gnu-aligned-sed/</guid><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><description>Bashkit rewrote its sed after an audit found 46 differences from GNU sed 4.9, adding missing commands, GNU address ranges, case conversion and atomic -i.</description><content:encoded><![CDATA[<p>Bashkit’s <code dir="auto">sed</code> was rewritten after a comparison with GNU sed 4.9 found 46
mismatches. It adds the missing commands <code dir="auto">y = l n N P D T z F r R w W</code>, GNU
range-address semantics, <code dir="auto">\U \L \u \l \E</code> case conversion, and real option
parsing for <code dir="auto">-s</code>, <code dir="auto">-z</code>, <code dir="auto">-f</code>, <code dir="auto">-l</code> and attached <code dir="auto">-i.bak</code>. A missing final
newline is preserved, and <code dir="auto">-i</code> now writes files atomically.</p>
<p>The same release builds VFS paths with forward slashes on every host, including
Windows.</p>
<p>See the <a href="https://github.com/everruns/bashkit/blob/main/crates/bashkit/docs/compatibility.md">compatibility scorecard</a>, <a href="https://github.com/everruns/bashkit/pull/2436">#2436</a> and <a href="https://github.com/everruns/bashkit/pull/2435">#2435</a>.</p>]]></content:encoded><category>Bashkit</category><category>Improvement</category></item>
<item><title>ScriptedTool accepts clap-based builtins</title><link>https://docs.everruns.com/changelog/2026-09-17-bashkit-scripted-tool-clap-builtins/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-09-17-bashkit-scripted-tool-clap-builtins/</guid><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><description>ScriptedToolBuilder::builtin registers raw-argv builtins next to ToolDef tools, and closed schemas now reject unknown flags with an error naming valid ones.</description><content:encoded><![CDATA[<p><code dir="auto">ScriptedToolBuilder::builtin(...)</code> registers a builtin that receives raw
arguments, next to the <code dir="auto">ToolDef</code> tools of a <code dir="auto">ScriptedTool</code>. Commands that need
positionals, short flags, <code dir="auto">--</code> or required-argument checks at parse time can
now use clap inside a <code dir="auto">ScriptedTool</code>:</p>
<div class="expressive-code"><link rel="stylesheet" href="https://docs.everruns.com/_astro/ec.aiyd6.css"><script type="module" src="https://docs.everruns.com/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="rust" class="wrap" style="--ecMaxLine:41ch"><code><div class="ec-line"><div class="code"><span style="--0:#BF3441;--1:#F97583">.</span><span style="--0:#6F42C1;--1:#B392F0">builtin</span><span style="--0:#24292E;--1:#E1E4E8">(</span><span style="--0:#032F62;--1:#9ECBFF">"get_agent"</span><span style="--0:#24292E;--1:#E1E4E8">, </span><span style="--0:#6F42C1;--1:#B392F0">Box</span><span style="--0:#BF3441;--1:#F97583">::</span><span style="--0:#6F42C1;--1:#B392F0">new</span><span style="--0:#24292E;--1:#E1E4E8">(</span><span style="--0:#6F42C1;--1:#B392F0">GetAgent</span><span style="--0:#24292E;--1:#E1E4E8">))</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code=".builtin(&#x22;get_agent&#x22;, Box::new(GetAgent))"><div></div></button></div></figure></div>
<p>A tool whose schema sets <code dir="auto">"additionalProperties": false</code> now rejects an unknown
flag with an error that names the valid flags, instead of silently dropping it.
clap output is stripped of ANSI codes.</p>
<p>See <a href="https://github.com/everruns/bashkit/blob/main/docs/scripted-tools.md">Scripted tools</a>, <a href="https://github.com/everruns/bashkit/blob/main/crates/bashkit/docs/clap-builtins.md">clap builtins</a> and <a href="https://github.com/everruns/bashkit/pull/2408">#2408</a>.</p>]]></content:encoded><category>Bashkit</category><category>Feature</category></item>
<item><title>Bashkit 0.18.1 release</title><link>https://docs.everruns.com/changelog/2026-09-17-bashkit-0-18-1/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-09-17-bashkit-0-18-1/</guid><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><description>ScriptedTool accepts clap-based builtins, and closed schemas reject unknown flags instead of passing them through to the script.</description><content:encoded><![CDATA[<div class="sl-heading-wrapper level-h2"><h2 id="highlights">Highlights</h2><a class="sl-anchor-link" href="#highlights"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “Highlights”</span></a></div>
<ul>
<li><strong>ScriptedTool builtins can now use clap.</strong> <code dir="auto">ScriptedToolBuilder::builtin(...)</code> registers a raw-argv builtin alongside <code dir="auto">ToolDef</code> tools, so commands needing positionals, short flags, <code dir="auto">--</code>, or parse-time required-argument checking work inside a <code dir="auto">ScriptedTool</code> (<a href="https://github.com/everruns/bashkit/pull/2408">#2408</a>).</li>
<li><strong>Closed schemas reject unknown flags.</strong> With <code dir="auto">"additionalProperties": false</code>, an unrecognised flag is now an error naming the valid flags instead of a silently-dropped property, and clap output is stripped of ANSI codes (<a href="https://github.com/everruns/bashkit/pull/2408">#2408</a>).</li>
</ul>
<div class="sl-heading-wrapper level-h2"><h2 id="in-the-changelog">In the changelog</h2><a class="sl-anchor-link" href="#in-the-changelog"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “In the changelog”</span></a></div>
<ul>
<li><a href="https://docs.everruns.com/changelog/2026-09-17-bashkit-scripted-tool-clap-builtins/">ScriptedTool accepts clap-based builtins</a></li>
</ul>
<p>See the <a href="https://github.com/everruns/bashkit/releases/tag/v0.18.1">GitHub release</a> and the <a href="https://github.com/everruns/bashkit/blob/main/CHANGELOG.md#0181---2026-09-17">full release notes</a> for every pull request in this version.</p>]]></content:encoded><category>Bashkit</category><category>Release</category></item>
<item><title>Read-only host directory mounts, also over the C ABI</title><link>https://docs.everruns.com/changelog/2026-09-10-bashkit-read-only-host-mounts/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-09-10-bashkit-read-only-host-mounts/</guid><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate><description>Bashkit's Python and Node bindings can mount a host directory read-only, and the C API gains allowlisted host-directory mounts on a running session.</description><content:encoded><![CDATA[<p><strong>Read-only mounts.</strong> Python <code dir="auto">Bash.mount()</code> and <code dir="auto">BashTool.mount()</code> take
<code dir="auto">read_only=True</code>, and Node <code dir="auto">mount()</code> takes <code dir="auto">readOnly</code>. Reads work; writes,
<code dir="auto">cp</code>, <code dir="auto">mv</code>, <code dir="auto">mkdir</code>, <code dir="auto">rm</code> and <code dir="auto">chmod</code> inside the mounted tree fail, and
<code dir="auto">reset()</code> keeps the protection.</p>
<div class="expressive-code"><link rel="stylesheet" href="https://docs.everruns.com/_astro/ec.aiyd6.css"><script type="module" src="https://docs.everruns.com/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="python" class="wrap" style="--ecMaxLine:45ch"><code><div class="ec-line"><div class="code"><span style="--0:#24292E;--1:#E1E4E8">bash.mount(</span><span style="--0:#032F62;--1:#9ECBFF">"/corpus"</span><span style="--0:#24292E;--1:#E1E4E8">, corpus, </span><span style="--0:#AE4B07;--1:#FFAB70">read_only</span><span style="--0:#BF3441;--1:#F97583">=</span><span style="--0:#005CC5;--1:#79B8FF">True</span><span style="--0:#24292E;--1:#E1E4E8">)</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="bash.mount(&#x22;/corpus&#x22;, corpus, read_only=True)"><div></div></button></div></figure></div>
<p><strong>C ABI mounts.</strong> The C API can mount real host directories, through <code dir="auto">mounts</code>
in the config or <code dir="auto">bashkit_mount</code> and <code dir="auto">bashkit_unmount</code> on a running session.
Each root must resolve under an <code dir="auto">allowed_mount_paths</code> prefix and pass the
sensitive-path denylist. With no allowlist, every mount is rejected.</p>
<p>See <a href="https://github.com/everruns/bashkit/blob/main/crates/bashkit/docs/live_mounts.md">Live mounts</a>, <a href="https://github.com/everruns/bashkit/blob/main/docs/c-api.md">C API</a>, <a href="https://github.com/everruns/bashkit/pull/2393">#2393</a> and <a href="https://github.com/everruns/bashkit/pull/2371">#2371</a>.</p>]]></content:encoded><category>Bashkit</category><category>Feature</category></item>
<item><title>Bashkit 0.18.0 release</title><link>https://docs.everruns.com/changelog/2026-09-10-bashkit-0-18-0/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-09-10-bashkit-0-18-0/</guid><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate><description>Python, Node and C ABI callers can mount host directories read-only, with security hardening and C ABI improvements across the bindings.</description><content:encoded><![CDATA[<div class="sl-heading-wrapper level-h2"><h2 id="highlights">Highlights</h2><a class="sl-anchor-link" href="#highlights"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “Highlights”</span></a></div>
<ul>
<li><strong>Security hardening.</strong> The Rust update takes <code dir="auto">russh</code> 0.63.1 security fixes</li>
<li><strong>C ABI improvements.</strong> The C ABI exposes host-directory mounts, bringing native</li>
</ul>
<div class="sl-heading-wrapper level-h2"><h2 id="in-the-changelog">In the changelog</h2><a class="sl-anchor-link" href="#in-the-changelog"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “In the changelog”</span></a></div>
<ul>
<li><a href="https://docs.everruns.com/changelog/2026-09-10-bashkit-read-only-host-mounts/">Read-only host directory mounts, also over the C ABI</a></li>
</ul>
<p>See the <a href="https://github.com/everruns/bashkit/releases/tag/v0.18.0">GitHub release</a> and the <a href="https://github.com/everruns/bashkit/blob/main/CHANGELOG.md#0180---2026-09-10">full release notes</a> for every pull request in this version.</p>]]></content:encoded><category>Bashkit</category><category>Release</category></item>
<item><title>Bashkit 0.17.1 release</title><link>https://docs.everruns.com/changelog/2026-08-22-bashkit-0-17-1/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-08-22-bashkit-0-17-1/</guid><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate><description>The native @everruns/bashkit npm package publishes again after stalling at 0.16.0, so Node users get the 0.17 features and fixes.</description><content:encoded><![CDATA[<div class="sl-heading-wrapper level-h2"><h2 id="highlights">Highlights</h2><a class="sl-anchor-link" href="#highlights"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “Highlights”</span></a></div>
<ul>
<li><strong>The native npm package ships again.</strong> <code dir="auto">@everruns/bashkit</code> stalled at 0.16.0</li>
</ul>
<p>See the <a href="https://github.com/everruns/bashkit/releases/tag/v0.17.1">GitHub release</a> and the <a href="https://github.com/everruns/bashkit/blob/main/CHANGELOG.md#0171---2026-08-22">full release notes</a> for every pull request in this version.</p>]]></content:encoded><category>Bashkit</category><category>Release</category></item>
<item><title>Bashkit 0.17.0 release</title><link>https://docs.everruns.com/changelog/2026-08-22-bashkit-0-17-0/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-08-22-bashkit-0-17-0/</guid><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate><description>TLS backend and timezone data become explicit features, Bashkit runs as a WebAssembly component without JS or WASI, and host-boundary escapes are closed.</description><content:encoded><![CDATA[<div class="sl-heading-wrapper level-h2"><h2 id="highlights">Highlights</h2><a class="sl-anchor-link" href="#highlights"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “Highlights”</span></a></div>
<ul>
<li><strong>Bashkit runs as a plain wasm component, with no JS engine and no WASI.</strong></li>
<li><strong>Untrusted input costs bounded work everywhere it is parsed.</strong> Script</li>
<li><strong>Sandbox escapes closed at the host boundary.</strong> The host bridge no longer</li>
<li>**The always-on dependency graph is 21 crates smaller and the browser wasm</li>
<li>**Every cargo lockfile in the tree is audited, clearing 16 wasmtime</li>
</ul>
<div class="sl-heading-wrapper level-h2"><h2 id="in-the-changelog">In the changelog</h2><a class="sl-anchor-link" href="#in-the-changelog"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore="">Section titled “In the changelog”</span></a></div>
<ul>
<li><a href="https://docs.everruns.com/changelog/2026-08-21-bashkit-tls-tzdata-features/">TLS backend and timezone data become explicit features</a></li>
<li><a href="https://docs.everruns.com/changelog/2026-08-21-bashkit-wasm-component-no-wasi/">Runs as a WebAssembly component without JS or WASI</a></li>
</ul>
<p>Before upgrading, read the breaking changes: <a href="https://docs.everruns.com/changelog/2026-08-21-bashkit-tls-tzdata-features/">TLS backend and timezone data become explicit features</a>.</p>
<p>See the <a href="https://github.com/everruns/bashkit/releases/tag/v0.17.0">GitHub release</a> and the <a href="https://github.com/everruns/bashkit/blob/main/CHANGELOG.md#0170---2026-08-22">full release notes</a> for every pull request in this version.</p>]]></content:encoded><category>Bashkit</category><category>Release</category></item>
<item><title>Runs as a WebAssembly component without JS or WASI</title><link>https://docs.everruns.com/changelog/2026-08-21-bashkit-wasm-component-no-wasi/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-08-21-bashkit-wasm-component-no-wasi/</guid><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate><description>Bashkit can run as a component-model WebAssembly guest in plain wasmtime or a Hyperlight micro-VM, with no JavaScript engine and no WASI needed.</description><content:encoded><![CDATA[<p>Bashkit can now run as a WebAssembly component that exposes shell execution
over WIT, in a host with no JavaScript engine and no WASI implementation. That
covers plain wasmtime and the <code dir="auto">no_std</code> wasmtime that hyperlight-wasm compiles
into a Hyperlight micro-VM guest. <code dir="auto">examples/hyperlight/</code> builds such a guest
and runs a script through it.</p>
<p>Dependencies that assumed a JavaScript host, such as the clock, timers and
entropy source, moved behind a new <code dir="auto">wasm_js</code> feature that the JS packages
enable and other builds leave off. The <code dir="auto">bashkit</code> crate also builds for
<code dir="auto">wasm32-wasip2</code>, checked in CI.</p>
<p>See the <a href="https://github.com/everruns/bashkit/tree/main/examples/hyperlight">Hyperlight example</a>, <a href="https://github.com/everruns/bashkit/pull/2311">#2311</a> and <a href="https://github.com/everruns/bashkit/pull/2310">#2310</a>.</p>]]></content:encoded><category>Bashkit</category><category>Feature</category></item>
<item><title>TLS backend and timezone data become explicit features</title><link>https://docs.everruns.com/changelog/2026-08-21-bashkit-tls-tzdata-features/</link><guid isPermaLink="true">https://docs.everruns.com/changelog/2026-08-21-bashkit-tls-tzdata-features/</guid><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate><description>Bashkit 0.17 builds without default features must pick a rustls crypto backend for http_client and enable tzdata to use named time zones.</description><content:encoded><![CDATA[<p>Bashkit 0.17.0 changes two Cargo features. Default builds are unchanged; only
builds with <code dir="auto">default-features = false</code> need to act.</p>
<ul>
<li><code dir="auto">http_client</code> no longer implies a rustls crypto backend. Add <code dir="auto">ring</code> (the
previous behavior, on by default) or <code dir="auto">aws-lc-rs</code> for a FIPS-capable backend.
Enabling neither is a compile error.</li>
<li>Timezone data is behind the <code dir="auto">tzdata</code> feature. Without it, <code dir="auto">date</code> with
<code dir="auto">TZ=&#x3C;named zone></code> exits 1 instead of printing a UTC time.</li>
</ul>
<div class="expressive-code"><link rel="stylesheet" href="https://docs.everruns.com/_astro/ec.aiyd6.css"><script type="module" src="https://docs.everruns.com/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="toml" class="wrap" style="--ecMaxLine:102ch"><code><div class="ec-line"><div class="code"><span style="--0:#24292E;--1:#E1E4E8">bashkit = { version = </span><span style="--0:#032F62;--1:#9ECBFF">"0.17"</span><span style="--0:#24292E;--1:#E1E4E8">, default-features = </span><span style="--0:#005CC5;--1:#79B8FF">false</span><span style="--0:#24292E;--1:#E1E4E8">, features = [</span><span style="--0:#032F62;--1:#9ECBFF">"http_client"</span><span style="--0:#24292E;--1:#E1E4E8">, </span><span style="--0:#032F62;--1:#9ECBFF">"ring"</span><span style="--0:#24292E;--1:#E1E4E8">, </span><span style="--0:#032F62;--1:#9ECBFF">"tzdata"</span><span style="--0:#24292E;--1:#E1E4E8">] }</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="bashkit = { version = &#x22;0.17&#x22;, default-features = false, features = [&#x22;http_client&#x22;, &#x22;ring&#x22;, &#x22;tzdata&#x22;] }"><div></div></button></div></figure></div>
<p>Non-ASCII domain names in HTTP allowlists are now rejected rather than
normalized; use their punycode form.</p>
<p>See <a href="https://github.com/everruns/bashkit/blob/main/docs/networking.md">Networking</a>, <a href="https://github.com/everruns/bashkit/pull/2317">#2317</a> and <a href="https://github.com/everruns/bashkit/pull/2321">#2321</a>.</p>]]></content:encoded><category>Bashkit</category><category>Breaking</category></item>
</channel>
</rss>