Hurl

Developer ToolsDesktop

A command-line tool that runs and tests HTTP requests defined in plain-text files.

Latest 8.0.1 · · Desktopby Orange Open SourceWebsiteOrange-OpenSource/hurl

Release activity

Release activity — 3 releases across 3 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026
MondayNo releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026
TuesdayNo releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026
WednesdayNo releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026
ThursdayNo releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026
FridayNo releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026No releases on Aug 14, 2026
SaturdayNo releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026

3 releases in the last year

Changelog

8.0.0

Added 8
  • Add raw multiline strings and remove deprecated multiline attributes
  • Add --no-cookie-store option to deactivate cookie storage for one file
  • Add support for asserting and capturing TLS certificate value
  • Support color env variables configuration
  • Add rawbytes query
  • Add --verbosity option (globally and per request)
  • Add Subject Alt Name (SAN) attribute for certificate assertions
  • Add support for curl --data-raw option in hurlfmt import
Changed 7
  • Replace legacy env var variable configuration HURL_foo by HURL_VARIABLE_foo
  • Rename ignore-asserts to no-assert
  • Use new JSONPath module implementing RFC 9535
  • Rename --noproxy to --no-proxy with backward compatible alias
  • Separate color usage (ANSI codes) for standard output and standard error
  • Use color and pretty when using output per request
  • Enhance error message for invalid filter input on filters
Fixed 3
  • Reject invalid header value on command line option
  • Fix single quote in cookie value breaking curl output
  • Fix truncating existing output file when response is tiny
Removed 1
  • Delete deprecated --interactive option
Deprecated 1
  • Add charsetDecode filter and make decode deprecated

8.0.0 (2026-04-24)

Thanks to @backtozero, @Hari-Oggy, @eyupcanakman, @AdmiralRazorbeard, @giorgiovilardo, @kikonen, @eirayuki, @aageneralov, @mateusz834, @msterin, @lillem4n, @jwadolowski, @ashishajr, @spiffytech, @rajiv,

Take a tour of this version here!

Breaking Changes:

  • Use CookieStore in HurlResult (crate compatibility) #4697
  • Delete deprecated --interactive option #4712
  • Replace legacy env var variable configuration HURL_foo by HURL_VARIABLE_foo #4882
  • Rename ignore-asserts to no-assert #4889
  • Using new JSONPath module implementing RFC 9535 #4270

Enhancements:

  • Add raw multiline strings and remove deprecated multiline attributes #1733
  • Add --no-cookie-store option to deactivate cookie storage for one file #2168
  • Rename --noproxy to --no-proxy with backward compatible alias #4709
  • Separate color usage (ANSI codes) for standard output and standard error #4790
  • Add support for asserting/capturing TLS certificate value #4698
  • Use color/pretty when using output per request #4970
  • Support color env variables configuration #4777
  • Enhance error message for invalid filter input on filters #4381
  • Add rawbytes query #4250
  • Using new JSONPath module implementing RFC 9535 #4270
  • Add --verbosity option (globally and per request) #4613
  • Add Subject Alt Name (SAN) attribute for certificate assertions #4617

Bugs Fixed:

  • Reject invalid header value on command line option #4843
  • Fix single quote in cookie value breaking curl output #4557
  • Add support for curl --data-raw option in hurlfmt import #4411
  • Fix truncating existing output file when response is tiny #4576

Deprecations:

  • Add charsetDecode filter and make decode deprecated #4732
View originalPermalink
How 8.0.0 went

7.1.0

Added 11
  • Add CLI option to pretty print the response body
  • Support adding secret with HURL_SECRET_foo env variable
  • Support `--secrets-file` for injecting secrets
  • Add `--ntlm` option per request
  • Add `--negotiate` option per request
  • Add utf8Decode/utf8Encode filters
Changed 5
  • Use happy path with http/https scheme for URL parsing to improve stress test use-cases
  • Replace unmaintained encoding crate with encoding_rs crate
  • Enhance logging for retry
  • Enhance `--test` duration logging
  • HTML report enhancements
Fixed 5
  • Parse `--user`, `--negotiate`, and `--ntlm` options in hurlfmt
  • Accept more path names when appending HTML reports
  • Fix filtering of Authorization: and Cookie: headers when following redirections
  • Fix supporting space in cookie storage cookie values
  • Fix implicit "Content-Type" headers when following redirections

7.1.0 (2025-11-18)

Thanks to @Nezteb, @quantonganh, @lambrospetrou, @linkdd, @gugahoa, @MikhailWahib, @ashishajr, @rcrisanti,

Take a tour of this version here!

Enhancements:

  • Add CLI option to pretty print the response body #1760
  • Add pretty print option #1760
  • Support adding secret with HURL_SECRET_foo env variable #3901
  • Use happy path with http/https scheme for URL parsing to improve stress test use-cases #4144
  • Support --secrets-file for injecting secrets #4309
  • Add --ntlm option per request #4322
  • Add --negotiate option per request #4323
  • Add utf8Decode/utf8Encode filters #4382
  • Replace unmaintained encoding crate with encoding_rs crate #4399
  • Enhance logging for retry #4419
  • Add support for hour duration #4422
  • Enhance --test duration logging #4423
  • Add parsing support for more types of date time strings to toDate filter #4439 #4440 #4441
  • HTML report enhancements #4445 #4446
  • Add retry count in the progress bar (only if retry >= 1) #4511
  • Add isList predicate #4520
  • Add isObject predicate #4520

Bugs Fixed:

  • Parse --user, --negotiate, and --ntlm options in hurlfmt #4213
  • Add parsing support for more types of date time strings to toDate filter #4439 #4440 #4441
  • Accept more path names when appending HTML reports #4459
  • Fix filtering of Authorization: and Cookie: headers when following redirections #4460
  • Fix supporting space in cookie storage cookie values #4461
  • Fix implicit "Content-Type" headers when following redirections #4522
  • Fix curl debug command with dot-prefixed cookie domain #4558
View originalPermalink
How 7.1.0 went

7.0.0

Added 15
  • Add query for HTTP redirects
  • Add urlQueryParam filter
  • Add option to configure max-time per request
  • Add date comparison predicates
  • Add pinnedpubkey cli option
  • Add base64 url safe encode and decode filters
Changed 6
  • Add replaceRegex filter and fix replace filter to not take regex
  • Show curl command when error format option is set to long
  • Show hurl --help with color
  • Remove hex crate dependency
  • Small tweaks to --test progress output
  • Improve captures error messages when filter chain returned no value
Fixed 12
  • Fix incorrect curl command for POST redirect
  • Fix hurlfmt to disallow invalid header argument in curl command
  • Parse verbose flag in curl command
  • Keep secret value forever, even if a secret variable override an existing one
  • Fix zsh completion
  • Parse cookie Expires date attribute with '-'
Security 1
  • Fix JavaScript injection in HTML report through regex literal

7.0.0 (2025-07-28)

Thanks to @ecolinet, @theoforger, @Muntaner, @ashishajr, @patkujawa-wf, @niklasweimann, @alanbondarun, @benkio, @dhth, @verigak, @markphilpot, @lambrospetrou, @aresler, @nfj25, @nwellnhof, @YannickAlex07, @lu-zero, @RaghavSood, @tjbrockmeyer,

Take a tour of this new version here!

Breaking Changes:

  • Add replaceRegex filter and fix replace filter to not take regex #4018

Enhancements:

  • Add query for HTTP redirects #922
  • Add urlQueryParam filter #2199
  • Show curl command when error format option is set to long #2226
  • Add option to configure max-time per request #3162
  • Add date comparison predicates #3480
  • Add pinnedpubkey cli option #3563
  • Add base64 url safe encode and decode filters #3840
  • parse curl's --cookie flag #3877
  • Show hurl --help with color #3882
  • Add toHex filter #3963
  • Add first and last filters #3998
  • Remove hex crate dependency #4011
  • Small tweaks to --test progress output #4028
  • Add support for negative values for nth filter #4050
  • Add option to configure pinnedpubkey per request #4084
  • Add timeline link on status label in source and run pages #4128
  • Support template in nth filter parameter #4152
  • Implement predicate isUuid #4179
  • Improve captures error messages when filter chain returned no value #4214
  • Add --ntlm cli option #4216
  • Add --negotiate option #4246

Bugs Fixed:

  • Fix incorrect curl command for POST redirect #2797
  • Fix hurlfmt to disallow invalid header argument in curl command #3668
  • Parse verbose flag in curl command #3760
  • Keep secret value forever, even if a secret variable override an existing one #3898
  • Fix zsh completion #3938
  • Parse cookie Expires date attribute with '-' #3956
  • Replace deprecated libxml2 initGenericErrorDefaultFunc with xmlSetGenericErrorFunc #3975
  • HTML report: fix span for lines in comment. #4002
  • Fix HTML closing tag for line with trailing comment #4017
  • Add replaceRegex filter and fix replace filter to not take regex #4018
  • Fix request body during redirections #4073
  • Fix "variables" token in GraphQL HTML export #4117
  • Support negative index in jsonpath #4154

Security Issues Fixed:

  • Fix JavaScript injection in HTML report through regex literal #4125
View originalPermalink
How 7.0.0 went

6.1.1

Fixed 4
  • Fix hurlfmt spacing
  • Fix filename parsing
  • Fix jsonpath array wildcard with missing attribute
  • Fix predicate contains with none input

6.1.1 (2025-03-19)

Thanks to @lu-zero, @andrejohansson, @demostanis, @techfg,

Bugs Fixed:

  • Fix hurlfmt spacing #3839
  • Fix filename parsing #3848
  • Fix jsonpath array wildcard with missing attribute #3859 #3869
  • Fix predicate contains with none input #3868
View originalPermalink
How 6.1.1 went

6.1.0

Added 9
  • Add HTTP version query
  • Add curl -H/--header option to globally add headers to all requests
  • Add toString filter
  • Add base64 decode filter
  • Add base64 encode filter
  • Add IP address query
Changed 8
  • Remove limitation for --cookie-jar to use only one hurl file
  • Redact secrets from JUnit reports
  • Redact secrets from JSON report
  • Redact secrets from HTML report
  • Redact secrets from curl export
  • Redact secrets from cookies export
  • Redact dynamic values from logs
  • Use Hurl predicates identifiers for Hurl to JSON file export in hurlfmt
Fixed 1
  • Fix invalid escape in hurlfmt parse func
Removed 2
  • Remove deprecated predicates (notEquals, greaterThan etc.) in favor of operators
  • Remove deprecated keyword HTTP/* for HTTP

6.1.0 (2025-03-12)

Thanks to @lilyhuang-github, @ashishajr, @kidbrax, @theoforger, @smokedlinq, @docwhat, @glb-cblin, @Enoz, @ikorason, @uday-rana, @lu-zero, @nghiab1906724, @overbyte,

See a tour of this version here!

Breaking Changes:

  • Remove deprecated predicates (notEquals, greaterThan etc...) in favor of operators #3532
  • Remove deprecated keyword HTTP/* for HTTP #3697

Enhancements:

  • Removed limitation for --cookie-jar to use only one hurl file #2537
  • Add HTTP version query #1706
  • Add curl -H/--header option to globally add headers to all requests #1905 #2144
  • Add toString Filter #2035 #3798
  • Add base64 decode filter #2145
  • Add base64 encode filter #2145
  • Redacts secrets from JUnit reports #2947 #2972
  • Redacts secrets from JSON report #2947 #2972
  • Redact secret in HTML report #2947 #2972
  • Redact secrets from curl export #2947 #2972
  • Redact secrets from cookies export #2947 #2972
  • Add IP address query #3106
  • Add isIpv4 / isIpv6 asserts on IP versions #3106
  • Allow sending empty HTTP header #3536
  • Redact dynamic values from logs #3543
  • Add header option per request #3575
  • Fix invalid escape in hurlfmt parse func #3615
  • hurlfmt: Use Hurl predicates identifiers for Hurl to JSON file export #3662
  • Add aarch64 deb package #3829

Bugs Fixed:

  • Fix missing request line errors in HTML report #3534
  • Eval template in JSON object key #3593
  • Show error message if format is invalid in format filter #3613
  • Create parent folders if missing when using --cookie-jar FILE #3637
  • Remove lint errors and Fix non-zero exit code in case of error #3648
  • Support BigInteger in variable #3656
  • fix hurlfmt html export loosing some whitespaces #3675
  • Fix template to source #3675
  • Fix changing HTTP version per request sometimes not effective #3719
  • Add bash file completion for hurl/hurlfmt #3750
  • Fix multilines HTML export #3768
  • Change parsing file content type in multipart form data #3796

Deprecations:

  • Deprecate includes in favor of contains predicate #1896
  • Warn for deprecated multilines string attributes #3622
  • Warn for --interactive deprecation #3763
View originalPermalink
How 6.1.0 went

6.0.0

Added 10
  • Implement function newUuid
  • Implement --limit-rate option from curl
  • Add --curl option to export executed requests to curl commands
  • Support short name for sections [QueryStringParams] => [Query], [FormParams] => [Form], [MultipartFormData] => [Multipart]
  • Add filter on boolean value in JSONPath
  • Add non-equal filter on string and number value in JSONPath
Changed 6
  • Change API for setting variable in hurl::runner::run
  • Rename feature flag from vendored-openssl to static-openssl
  • Configure --connect-timeout per request
  • Remove url-specific parser to align with grammar
  • Categorise options in --help
  • Support more JSON and XML like mimetypes with debug output
Fixed 2
  • Fix reading standard input multiple times
  • Support case-insensitive Cookie Attributes
Removed 2
  • Remove deprecated --fail-at-end option
  • Remove hurlfmt deprecated --format option

6.0.0 (2024-12-03)

Thanks to @cemoktra, @zikani03, @lambrospetrou, @jmvargas, @quantonganh, @sandeshbhusal, @thePanz, @niklasweimann, @infogulch, @orlandow, @bp7968h,

See a tour of this version here!

Breaking Changes:

  • Check that variables do not conflict with existing functions #3229
  • Remove deprecated --fail-at-end option #3430
  • Change API for setting variable in hurl::runner::run #3440
  • Remove hurlfmt deprecated --format option #3445
  • Rename feature flag from vendored-openssl to static-openssl #3460

Enhancements:

  • Implement function newUuid #973
  • Implement --limit-rate from curl #1222
  • Add --curl option to export executed requests to curl commands #2679
  • Configure --connect-timeout per request #3163
  • Support short name for sections [QueryStringParams] => [Query], [FormParams] => [Form], [MultipartFormData] => [Multipart] #3238
  • Remove url-specific parser (align with grammar) #3244
  • Remove the crate float-cmp #3247
  • Jsonpath / Add filter on boolean value #3252
  • Jsonpath / Add non-equal filter on string and number value #3261
  • Add support for backtick strings in predicates values #3317
  • Categorise options in --help #3339
  • Support more JSON / XML "like" mimetypes with debug output #3343
  • Add curl debug command to --json and JSON report #3374
  • Add curl debug command to HTML report #3386
  • Render Date value #3431
  • Add newDate generator #3443

Bugs Fixed:

  • Fix reading standard input multiple times #3216
  • Fix filename parsing (used by cert option) #3242
  • Add additional check for --max-filesize option #3245
  • Support case-insensitive Cookie Attributes #3265
  • Allow any string in Location Header when not following redirection #3293
  • Fix graceful shutdown of workers threads in --test #3297
  • Fix missing space in variable option HTML export #3412
View originalPermalink
How 6.0.0 went

5.0.1

Fixed 1
  • Fix regression in --output when output file doesn't exist

5.0.1 (2024-08-30)

Bugs Fixed:

  • Fix regression in --output when output file doesn't exist #3195
View originalPermalink
How 5.0.1 went

5.0.0

Added 12
  • Create intermediary directories if necessary when producing TAP report
  • Expose request comments in --out json (hurlfmt)
  • Create intermediary directories if necessary when producing JUnit report
  • Add global requests count in test summary
  • Run tests in parallel
  • Add support for importing curl url option in hurlfmt
Changed 3
  • Encode oneline string only with one backtick
  • Replace output warnings by errors
  • Apply delay only once per entry, no matter how many retry
Fixed 5
  • Fix inconsistent case for fields queryString and httpVersion in --json
  • Get SSL certificates info on reused connections, from a cache
  • Fix max-redirs: -1 in [Options] section
  • Fix error displayed in double with bad option
  • Fix hurlfmt exit code with lint error

5.0.0 (2024-08-29)

Thanks to @lambrospetrou, @OverkillGuy, @badboy, @DenuxPlays, @linkdd, @nkback, @claytonneal,

See a tour of this version here!

Breaking Changes:

  • Encode oneline string only with one backtick #3113

Enhancements:

  • Create intermediary directories if necessary when producing TAP report #2860
  • Expose request comments in --out json (hurlfmt) #2850
  • Create intermediary directories if necessary when producing JUnit report #2842
  • Add global requests count in test summary #2832
  • Replace output warnings by errors #2815
  • Fix inconsistent case for fields queryString and httpVersion in --json #2804
  • Run tests in parallel #2753
  • Add support for importing curl url option in hurlfmt #2750
  • Add JSON report #2738
  • Add repeat option to repeat a sequence of Hurl file #2680
  • Add repeat option per request #2680
  • Add optional duration unit #2653
  • Apply delay only once per entry, no matter how many retry #1973
  • Add toFloat filter #1732
  • Accept directory as Hurl arguments for processing file #1446

Bugs Fixed:

  • Get SSL certificates info on reused connections, from a cache #3031
  • Fix max-redirs: -1 in [Options] section #3023
  • Fix error displayed in double with bad option #2920
  • Fix hurlfmt exit code with lint error #2919
  • Truncate file then append it when dumping response with --output. #2886
  • Fix crash with --json option when capturing 'HttpOnly' and 'Secure' cookie attribute #2871
  • Fix crash when capturing 'Expires' cookie attribute #2870
  • Fix empty JSON key parsing #2836
  • Do not filter 'Authorization' header if host doesn't change while following redirect #2823
  • Fix sending 'Authorization' header from --user when following redirect #2812
  • Fix URL when following redirect for certain 'Location' header #2783
  • Fix powershell completion file #2729
View originalPermalink
How 5.0.0 went

4.3.0

Added 8
  • Support --user option per request
  • Add isNumber predicate
  • Add isIsoDate predicate to check YYYY-MM-DDTHH:mm:sssZ format
  • Add --from-entry option to execute a file from a given entry
  • Add --max-filesize option to limit HTTP response
  • Add --netrc, --netrc-file and --netrc-optional options
  • Add bash, powershell, fish, and zsh completion for hurl and hurlfmt
  • Add experimental --parallel and --jobs options
Changed 7
  • Create intermediate directory when using --report-html
  • Use '-' to read Hurl file from standard input
  • Add completion files in Linux/MacOS packages
  • Fix tarball layout to Linux filesystem
  • Display source request when there are asserts or runtime errors
  • Use explicit stdout output
  • Prevent raw binary response from being displayed on standard output
Fixed 10
  • Export begin_call and end_call timings fields to RFC3339 with microseconds precision
  • Fix standalone css for regex
  • Fix charset parsing logic of Content-Type header
  • Fix filename templatization bug under certain conditions
  • Fix empty glob not always returning an error
  • Fix hurlfmt query certificate for hurl output format
Security 1
  • Prevent script injection in HTML report

4.3.0 (2024-04-23)

Thanks to @tarampampam, @CMiksche, @CodeMan99, @OverkillGuy, @hsanson, @jaminalder, @teto, @humphd, @mohammed90,

See a tour of this version here!

Enhancements:

  • Support --user option per request #2585
  • Add isNumber predicate #2538
  • Create intermediate directory when using --report-html #2531
  • Use '-' to read Hurl file from standard input #2523
  • Add --from-entry option to execute a file from a given entry #2500
  • Add isIsoDate predicate (take a string, checks YYYY-MM-DDTHH:mm:sssZ) #2427
  • Add completion files in Linux/MacOS packages #2401
  • Fix tarball layout to Linux filesystem #2401
  • Add --max-filesize option to limit HTTP response #2353
  • Display source request when there are asserts/runtime errors #2351
  • Using explicit stdout output #2312
  • Prevent raw binary response to be displayed on standard output #2306
  • Add --netrc, --netrc-file and --netrc-optional options #2094
  • Generate bash completion for hurl/hurlfmt #1864
  • Generate powershell completion for hurl/hurlfmt #1864
  • Generate fish completion for hurl/hurlfmt #1864
  • Generate zsh completion for hurl/hurlfmt #1864
  • Add experimental --parallel / --jobs options #88 #87

Bugs Fixed:

  • Export begin_call, end_call timings fields to RFC3339 (microseconds) #2699
  • Fix standalone css for regex #2693
  • Fix charset parsing logic of Content-Type header #2540
  • Fix filename templatization bug under certain conditions #2533
  • Fix empty glob not always returning an error #2517
  • Fix hurlfmt query certificate for hurl output format #2511
  • Fix --test progress bar not displayed when verbose is used #2506
  • Per request output takes file-root into account for path resolving #2445
  • Fix silent error when verbose option use unset variable #2444
  • Fix Content-type header override when used in lowercase #2416

Security Issues Fixed:

  • Prevent script injection in HTML report #2719
View originalPermalink
How 4.3.0 went
View all

Discussion

If you publish Hurl, you can claim this product by proving you administer its repository.