Changelog

View Source

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.3.0 (2026-04-14)

Features

  • add context option to justbash struct for custom commands (#34) (8824fd9)
  • add xxd/od, curl flags, grep -P, awk crash guard (#32) (4afdb3b)
  • add production resource limits and execution stats (#28) (9c7a36d)
  • add missing command flags, stdin support, and bash comparison fixtures (#31) (67de3b0)
  • replace NimbleParsec lexer with hand-written state machine (#30) (bc05d36)
  • add telemetry instrumentation for script execution (#29) (b8cac23)

Bug Fixes

  • jq parser failing to resolve builtin function names to atoms (144cbe8)

0.2.0 (2026-03-23)

Features

  • add 12 new evals covering uncovered commands and shell features (2c21f75)
  • add custom command eval with KV store (840ba00)
  • add eval system and fix 5 bugs exposed by LLM agent evals (39e4637)
  • expand evals to 28 tasks and fix 8 additional bugs (5ba37c5)
  • major expansion - 15 new commands, jq overhaul, test infrastructure (a5efb73)
  • test infrastructure, new commands, jq overhaul (13749d2)

Bug Fixes

  • 8 AWK bugs, jq -e exit status, declare -A keys, printf redirect parsing (cb57e64)
  • capture bash state between exec calls in README example (09b2039)
  • correct GitHub URLs in CHANGELOG (a4cf791)
  • correct GitHub URLs in CHANGELOG (5b29c7e)
  • heredoc in compound commands, assoc array subscripts, which/type builtins, jq @tsv (99aab44)
  • implement AWK field assignment ($N = value) with $0 reconstruction (e760cad)
  • read IFS splitting, wc/head/tail multi-file, and improve eval robustness (7d96af7)
  • remove deprecated package-name from release-please workflow (d1d7ab7)
  • tests: use variable instead of module attribute for spec tests (#18) (f583911)

Unreleased

0.1.0 - 2026-01-11

Added

  • Initial release
  • In-memory virtual filesystem (JustBash.Fs.InMemoryFs)
  • Bash lexer and recursive descent parser
  • Variable expansion: $VAR, ${VAR}, ${VAR:-default}, ${VAR:=default}, ${VAR:+alt}, ${#VAR}, ${VAR:start:len}, ${VAR#pattern}, ${VAR%pattern}, ${VAR/old/new}, ${VAR^^}, ${VAR,,}
  • Command substitution: $(cmd) and backticks
  • Arithmetic expansion: $((expr)) with full operator support including **, ?:, hex, binary
  • Control flow: if/elif/else/fi, for x in ...; do; done, while/until, case/esac
  • Logical operators: &&, ||, ! with short-circuit evaluation
  • Pipes with stdin/stdout flow
  • Redirections: >, >>, 2>, &>, <, <<<, heredocs
  • Brace expansion: {a,b,c}, {1..5}, {a..z}
  • Arrays: arr=(...), ${arr[0]}, ${arr[@]}, ${#arr[@]}
  • Functions with local variables
  • Extended test command: [[ ]] with regex support

Commands

File operations:

  • cat, ls, cp, mv, rm, mkdir, touch, ln
  • find, stat, du, tree, file, readlink

Text processing:

  • grep, sed, awk (full implementations)
  • sort, uniq, head, tail, wc, cut, tr
  • rev, tac, nl, fold, paste, comm, diff, expand

Data tools:

  • jq (comprehensive JSON processor)
  • curl (HTTP client with network allowlists)
  • markdown / md (Markdown to HTML)
  • base64, md5sum

Shell builtins:

  • echo, printf, pwd, cd, export, unset
  • test, [, [[, true, false, :
  • set (shell options: -e, -u, -o pipefail)
  • source, ., read, exit, return
  • local, declare, typeset
  • break, continue, shift, getopts, trap

Utilities:

  • seq, date, sleep, basename, dirname
  • which, env, printenv, hostname
  • xargs, tee