# What changed in bashkit

> 44 changes in bashkit 0.18 to 0.19 from its official release notes, upgrade guides and advisories: 7 breaking, 2 security, 13 new APIs and options. Each one cited. Sources checked 2026-10-21. HTML: https://unstale.sh/pypi/bashkit/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## bashkit 0.19

### Breaking changes

- ScriptedTool moved to its own Rust package; callers replace the bashkit scripted_tool feature and imports with this crate. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Python ScriptedTool imports move from bashkit to bashkit.scripted. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- JavaScript ScriptedTool imports move from @everruns/bashkit to this subpath. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Rust callers install the registry with registry.install(builder) instead of builder.tool_registry(registry). (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Allocation, recursion, input, and output accounting makes resource refusals explicit instead of silently truncating or allowing unbounded growth. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)

### Security

- Reduces browser transfer size and verifies package identity. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- NAT64 and 6to4 addresses are classified by their embedded IPv4 address, and reserved ranges are blocked. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)

### New APIs and options

- Interactive shell support adds history, fc, completion, bind, and prompts. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Enables Python and TypeScript in BashTool. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- The opt-in feature runs CPython 3.14 as python3 through WebAssembly, with VFS access and HTTP routed through Bashkit's egress boundary. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- An opt-in cpython-native feature is available. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- A default root filesystem including /etc, /proc, and /usr/bin is available. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Python requests and httpx modules can make HTTP requests through Bashkit's egress boundary. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- The jq builtin adds halt and debug, several output and input modes, $__loc__, and ?//, with date and base64 fixes. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- A GNU make subset is available in the sandbox shell. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- An in-process interactive terminal provides screen text, scrollback, input, interrupts, and editor and pager commands. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- A terminal tool for LLM agents is available, with support for multiple terminal sessions. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)

### Behavior and default changes

- The awk builtin was rewritten to match gawk 5.2 and can run gawk, mawk, and nawk scripts. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Background jobs run concurrently. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Pipeline stages run concurrently and stream data through pipelines with SIGPIPE behavior. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Additional everyday commands and GNU-oriented coreutils behavior improve compatibility for shell scripts. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- The VFS can follow symlinks. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)

### Fixes and other changes

- Expands aliases per line and closes remaining Oils specification gaps. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Unifies indirect subscript consumption and preserves nested subscripts with a complete-reference boundary. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Reads a backquoted substitution after a quoted segment. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Interpreter and parser behavior was brought closer to bash across expansion, arrays, redirects, traps, shell options, and diagnostics. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Coprocesses run concurrently over in-process pipes. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Accepts HH:MM date-times and zone suffixes, and reads weekday names instead of returning the current time. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Truncates array targets at the first ] to stop operand recursion and preserves nested subscripts. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Ignores invalid stdin when stdin is unread under -n. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Releases mapfile budgets and surfaces refusals. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)
- Falls back to a direct write when creation of a hidden temporary file is refused. (0.19.0) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.19.0)

## bashkit 0.18

### Breaking changes

- Untrusted workflow code no longer receives the checkout token. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
- With additionalProperties set to false, unrecognised flags now produce an error naming the valid flags instead of silently dropping the property. (0.18.1) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.1)

### New APIs and options

- Adds GNU-style case conversion escapes for uppercasing and lowercasing text. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
- Adds GNU-style getopt support, including -s, -z, -f, -l, and attached -i.bak. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
- Registers a raw-argv builtin alongside ToolDef tools, enabling positionals, short flags, --, and parse-time required-argument checking inside a ScriptedTool. (0.18.1) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.1)

### Behavior and default changes

- The -i option now writes files atomically. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
- Clap output is stripped of ANSI codes. (0.18.1) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.1)

### Fixes and other changes

- Verification now outlasts the registry cache, improving release pipeline reliability. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
- Adds the missing GNU sed commands: y, =, l, n, N, P, D, T, z, F, r, R, w, and W. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
- Implements GNU range-address semantics, bringing sed address behavior closer to GNU sed 4.9. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
- Preserves a missing final newline instead of adding one. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
- VFS paths now use forward slashes on every host, fixing Windows path handling. (0.18.2) — [release notes](https://github.com/everruns/bashkit/releases/tag/v0.18.2)
