The Fastest Way For Testing

An enhanced version of Hurl, designed for modern API engineering workflows. Chain requests, capture values, and evaluate queries on headers and body response.

hurlx adds import/export syntax, making HTTP testing more modular and maintainable.

# auth.hurlx
POST https://api.example.com/login
[JSON]
{
  "username": "{{username}}",
  "password": "{{password}}"
}
HTTP 200
[Captures]
token: jsonpath "$.token"
expires: jsonpath "$.expires_at"

export token
export expires

# api-test.hurlx
import "auth.hurlx"

GET https://api.example.com/users
Authorization: Bearer {{token}}
HTTP 200
[Asserts]
jsonpath "$.length()" > 0

Why hurlx?

hurlx extends Hurl with modular capabilities while maintaining full compatibility with all existing Hurl features.

Modular Import/Export

Reuse authentication, configuration, and endpoint definitions across multiple test files with import/export syntax.

Advanced Assertions

Powerful assertion capabilities including JSONPath, XPath, regex, and type checking for comprehensive testing.

Variable Chaining

Chain variables across requests for complex workflows like multi-step authentication and data pipelines.

Template System

Dynamic value generation with built-in functions for UUID, dates, random hex, and environment variables.

Full Hurl Compatibility

100% compatible with all Hurl features. hurlx is a strict superset — your existing Hurl files work as-is.

Engineering Ready

Structured test cases with CI/CD integration, JUnit reports, and professional workflow support built in.

Chain Trace

Use --trace flag to print each chain step result as JSON for detailed debugging and analysis.

auth.hurlxexport tokenexport expiresconfig.hurlxexport base_urlexport api_vertest.hurlximport authimport configGET {{users}}resultsModule AModule BTest Suite

Modular Testing Made Simple

Split your API tests into reusable modules. Import authentication flows, configuration, and endpoint definitions across test suites.

# auth.hurlx
POST https://api.example.com/login
[JSON]
{ "username": "{{user}}" }
HTTP 200
[Captures]
token: jsonpath "$.token"

export token

Chain Requests, Capture Values

Chain multiple HTTP requests together. Capture response values and pass them to subsequent requests for complex API testing workflows.

# Get token → Login → Access
GET https://api.example.com/login
HTTP 200
[Captures]
csrf: xpath "//input[@name='csrf']/@value"

POST https://api.example.com/login
Cookie: csrf={{csrf}}
HTTP 302
</>ClientAPIServerhurlxGET200{token}

Ready for CI/CD

Built for professional workflows. Generate JUnit reports, integrate with GitHub Actions, and run comprehensive test suites in any CI environment.

$ hurlx --test tests/*.hurlx \
    --variable base_url=$API_URL \
    --report-junit=report.xml

Hurl vs hurlx

hurlx is a strict superset of Hurl — every Hurl file is a valid hurlx file.

FeatureHurlhurlx
Basic HTTP Testing
JSON/XML Assertions
Variables & Templates
Filters & Predicates
Captures & Chaining
Modular Import/Export
Chain Trace (--trace)
Structured Test Cases
Engineering-Ready Workflows

hurlx = Hurl superset + modular capabilities

Get Started

Install hurlx and start testing APIs with modular workflows.

curl -L https://github.com/itbaby/hurlx/releases/latest/download/hurlx-darwin-arm64 -o hurlx
chmod +x hurlx
1

Write

Create a .hurlx file with your HTTP requests

2

Run

Execute with hurlx test.hurlx

3

Test

Use --test mode for assertions

# hello.hurlx
GET https://example.com
HTTP 200

$ hurlx hello.hurlx
$ hurlx --test hello.hurlx
$ hurlx --verbose test.hurlx
$ hurlx --test tests/*.hurlx
$ hurlx --trace test.hurlx