Changelog

All notable changes to hurlx are documented here. View all releases on GitHub β†’

v1.0.14

Latest2026-05-16GitHub Release β†—

Parser blank-line handling overhaul, comment parsing fix, entry state restoration, and runner redirect isolation fix.

πŸ›Bug Fixes

  • –parser: skipEmptyAndComments now correctly loops over blank lines and comments instead of returning after the first one β€” fixes parsing of files with multiple consecutive blank lines or comments
  • –parser: comment text now uses the raw line with # prefix stripped β€” preserves whitespace in comments like # Step 1
  • –parser: parseEntry uses unreadLine() instead of manual savedLine/savedPos restore β€” fixes state corruption when scanning ahead for response lines
  • –parser: parseRequest and parseKeyValueSection now continue on blank lines instead of returning β€” allows headers and key-value sections to span blank lines correctly
  • –parser: Parse() returns an error for unexpected trailing content instead of silently ignoring it
  • –parser: removed unused col field from Parser struct
  • –runner: applyRequestOptions now saves and restores client.CheckRedirect β€” prevents redirect policy from leaking between entries
  • –runner: optsToEntry returns n directly instead of n + 1 β€” fixes --to-entry off-by-one that included one extra entry beyond the specified index

βœ…Tests Added

  • –TestParseResponseWithBlankLines β€” response headers followed by blank line then [Asserts] section
  • –TestParseMultipleBlankLinesBetweenEntries β€” multiple consecutive blank lines between entries
  • –TestParseOptionsAllFields β€” full options section with location, retry, and other fields
  • –TestParseRequestWithMultipleHeadersAndBlankLines β€” headers with blank lines in between

v1.0.13

2026-04-20GitHub Release β†—

Variable scoping fix for chained entries, fractional duration support, and base64url padding fix.

πŸ›Bug Fixes

  • –runner: pass entry-scoped vars to evaluateQuery and checkAssert β€” captured variables are now correctly visible in subsequent asserts within the same entry
  • –runner: applyRequestOptions now writes option-defined variables to entry-scoped vars β€” fixes variable isolation across chained entries
  • –runner: ParseDuration uses ParseFloat instead of ParseInt β€” fractional durations like 1.5s, 0.5m, 50.5ms now work correctly
  • –filter: decodeBase64URLSafe strips trailing = padding before NoPadding decode β€” fixes decoding of padded URL-safe base64 strings

βœ…Tests Added

  • –TestBase64UrlSafeDecodePadded β€” verify padded URL-safe base64 input is accepted
  • –TestParseDuration float cases β€” 1.5s, 0.5m, 0.25h, 50.5ms
  • –TestCheckIncludes β€” collection includes assertion coverage
  • –TestRunWithVariables β€” end-to-end variable template substitution in URL
  • –TestRunSSRFBlocked β€” file:// URL scheme is rejected at runner level

v1.0.12

2026-04-17GitHub Release β†—

Bug fixes for base64 decoding, runner state isolation, and assert value handling.

πŸ›Bug Fixes

  • –filter: base64 decode now strips trailing = padding before NoPadding decode β€” fixes decoding of any standard padded base64 string (e.g. SGVsbG8=, AA==)
  • –runner: reset redirect recorder per-entry β€” prevents redirect history leaking into subsequent chain steps
  • –runner: on template render error, write to entry-scoped vars instead of shared runner vars β€” prevents cross-entry state pollution
  • –runner: save/restore Verbose and client.Timeout in applyRequestOptions β€” per-entry option overrides no longer bleed into later entries
  • –runner: contains, startsWith, endsWith, matches asserts now use formatAssertValue β€” numeric and boolean assert values now work correctly
  • –runner: optsToEntry off-by-one fix β€” --to N now correctly includes entry N (was N-1)

βœ…Tests Added

  • –TestBase64RoundTrip β€” encodeβ†’decode round-trip for various byte lengths
  • –TestBase64DecodePadded β€” verify padded base64 input is accepted
  • –TestBase64UrlSafeRoundTrip β€” URL-safe variant round-trip

v1.0.11

2026-04-17GitHub Release β†—

Repository housekeeping β€” no functional changes.

🧹Housekeeping

  • –Untrack .claude/, .workbuddy/memory/, .github/workflows/CLAUDE.md, and hurlx_test_bin from version control
  • –Add above paths to .gitignore β€” they are now kept local-only
  • –.github/workflows/build.yml continues to be tracked (CI requires it)

v1.0.10

2026-04-16GitHub Release β†—

Template engine error propagation, runner state isolation, and security hardening.

✨Improvements

  • –tmpl: Render() now returns (string, error) β€” errors propagate cleanly instead of panicking
  • –tmpl: generateUUID and generateRandomHex return errors instead of panic on crypto failures
  • –tmpl: merged getEnv/getenv branches; added uuid as alias for newUuid
  • –runner: per-entry variable cloning prevents shared-state mutation across chain steps
  • –runner: template render errors are now propagated for URL, headers, query, form, cookies, basicAuth, and multipart fields

πŸ”’Security

  • –runner: path-traversal guard added for body-file and multipart-file paths
  • –importer: circular-import detection via an in-progress resolving set
  • –importer: path-traversal guard for body file paths

πŸ”§Code Quality

  • –cli: filepath.WalkDir replaces deprecated filepath.Walk
  • –cli: errors from os.WriteFile and json.MarshalIndent are now handled and reported

v1.0.9

2026-04-16GitHub Release β†—

New template functions, runner improvements, and stdlib base64.

πŸš€New Features

  • –tmpl: new uuid alias for newUuid
  • –tmpl: date "format" supports Java-style and strftime format patterns
  • –tmpl: randomHex N generates N random hex bytes
  • –tmpl: getenv as case-insensitive alias for getEnv
  • –runner: ConnectTimeout and Proxy options support

πŸ›Bug Fixes

  • –filter: replaced hand-rolled base64 implementation with Go stdlib encoding/base64
  • –runner: fix multipart file close order
  • –runner: fix gzip/deflate reader scope
  • –runner: remove br from Accept-Encoding (brotli not supported)

v1.0.8

2026-04-12GitHub Release β†—

✨Improvements

  • –Improve test pass rate from 89% to 96%
  • –Fix 6 major issues across parser, runner, and filter packages
  • –Fix integration tests: use jsonpath for headers
  • –Replace xpath string() with //title/text()

hurlx follows Semantic Versioning. All releases are available on GitHub Releases.