Changelog
All notable changes to hurlx are documented here. View all releases on GitHub β
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
Verboseandclient.TimeoutinapplyRequestOptionsβ per-entry option overrides no longer bleed into later entries - βrunner:
contains,startsWith,endsWith,matchesasserts now useformatAssertValueβ numeric and boolean assert values now work correctly - βrunner:
optsToEntryoff-by-one fix β--to Nnow 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
Download v1.0.12
Repository housekeeping β no functional changes.
π§ΉHousekeeping
- βUntrack
.claude/,.workbuddy/memory/,.github/workflows/CLAUDE.md, andhurlx_test_binfrom version control - βAdd above paths to
.gitignoreβ they are now kept local-only - β
.github/workflows/build.ymlcontinues to be tracked (CI requires it)
Template engine error propagation, runner state isolation, and security hardening.
β¨Improvements
- βtmpl:
Render()now returns(string, error)β errors propagate cleanly instead of panicking - βtmpl:
generateUUIDandgenerateRandomHexreturn errors instead of panic on crypto failures - βtmpl: merged
getEnv/getenvbranches; addeduuidas alias fornewUuid - β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
resolvingset - βimporter: path-traversal guard for body file paths
π§Code Quality
- βcli:
filepath.WalkDirreplaces deprecatedfilepath.Walk - βcli: errors from
os.WriteFileandjson.MarshalIndentare now handled and reported
New template functions, runner improvements, and stdlib base64.
πNew Features
- βtmpl: new
uuidalias fornewUuid - βtmpl:
date "format"supports Java-style and strftime format patterns - βtmpl:
randomHex Ngenerates N random hex bytes - βtmpl:
getenvas case-insensitive alias forgetEnv - βrunner:
ConnectTimeoutandProxyoptions 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
brfrom Accept-Encoding (brotli not supported)
β¨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.