hurl is a free, open source api development & testing project written in Rust and released under Apache-2.0. It has 19,203 GitHub stars, 745 forks and 200 open issues, and was last pushed 20 hours ago. On this registry it ranks #13 of 103 tracked projects in API Development & Testing, with 5 head-to-head comparisons available. It gained 9 stars over the last 3 tracked days.

What is hurl?

What it is

Hurl is a command line tool that runs HTTP requests defined in a simple plain text format. It lives in the Rust ecosystem, is licensed under Apache-2.0, and is powered under the hood by libcurl, so it inherits curl's transfer behavior while adding a readable file format on top. A single Hurl file can chain multiple requests, capture values from one response, and reuse those values in later requests, which makes it possible to describe an entire HTTP session rather than a single call. The project has been on GitHub for six years and carries roughly 19,000 stars and 744 forks.

The concrete problem it solves is testing and exercising HTTP endpoints without writing code. Instead of building a test harness in a general purpose language, a developer writes requests, captures, and assertions directly in plain text, and Hurl evaluates them. It handles HTML content, REST, SOAP, and GraphQL APIs, along with any XML or JSON based interface, using XPath and JSONPath queries against response bodies plus predicates on status codes and headers. The same file works for fetching data interactively and for running as an automated HTTP test.

Key capabilities

  • Runs HTTP requests from a plain text file format, with no programming language required.
  • Chains multiple requests in one file and passes captured values between them, such as a CSRF token read via XPath and reused in a later form post.
  • Evaluates XPath and JSONPath queries on response bodies, and asserts on status codes and response headers.
  • Supports HTML forms, multipart form data, JSON bodies, templated JSON and XML bodies, GraphQL queries, and SOAP requests.
  • Handles basic authentication and dynamic data within request definitions.
  • Measures endpoint performance through duration assertions on responses.
  • Integrates into CI/CD and emits text, JUnit, TAP, and HTML reports.

Who uses it and how

  • Developers run Hurl files locally as a fast CLI to check endpoints during development.
  • Continuous integration pipelines execute the same files as automated HTTP tests, with JUnit, TAP, or HTML reports consumed by the CI system.
  • Teams testing REST and JSON APIs assert on response structure, field counts, and value formats such as identifier patterns.
  • Teams working with HTML applications assert on page content, for example reading a normalized page title through XPath.
  • QA and integration testing workflows use the text format because it stays reviewable in version control alongside the code it exercises.

Getting started

The README describes Hurl as a single binary that is easy to install with no runtime required, and the project publishes through Crates.io. Documentation, a tutorial, and downloadable HTML, PDF, and Markdown guides are available at hurl.dev.

When to use it — and when not to

H

project readme (upstream, from github) — read inline

deploy status coverage Crates.io documentation

What's Hurl?

Hurl is a command line tool that runs HTTP requests defined in a simple plain text format.

It can chain requests, capture values and evaluate queries on headers and body response. Hurl is very versatile: it can be used for both fetching data and testing HTTP sessions.

Hurl makes it easy to work with HTML content, REST / SOAP / GraphQL APIs, or any other XML / JSON based APIs.

# Go home and capture token
GET https://example.org
HTTP 200
[Captures]
csrf_token: xpath "string(//meta[@name='_csrf_token']/@content)"


# Do login!
POST https://example.org/login
[Form]
user: toto
password: 1234
token: {{csrf_token}}
HTTP 302

Chaining multiple requests is easy:

GET https://example.org/api/health
GET https://example.org/api/step1
GET https://example.org/api/step2
GET https://example.org/api/step3

Also an HTTP Test Tool

Hurl can run HTTP requests but can also be used to test HTTP responses. Different types of queries and predicates are supported, from [XPath] and [JSONPath] on body response, to assert on status code and response headers.

It is well adapted for REST / JSON APIs

POST https://example.org/api/tests
{
    "id": "4568",
    "evaluate": true
}
HTTP 200
[Asserts]
header "X-Frame-Options" == "SAMEORIGIN"
jsonpath "$.status" == "RUNNING"    # Check the status code
jsonpath "$.tests" count == 25      # Check the number of items
jsonpath "$.id" matches /\d{4}/     # Check the format of the id

HTML content

GET https://example.org
HTTP 200
[Asserts]
xpath "normalize-space(//head/title)" == "Hello world!"

GraphQL

POST https://example.org/graphql
```graphql
{
  human(id: "1000") {
    name
    height(unit: FOOT)
  }
}
```
HTTP 200

and even SOAP APIs

POST https://example.org/InStock
Content-Type: application/soap+xml; charset=utf-8
SOAPAction: "http://www.w3.org/2003/05/soap-envelope"
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:m="https://example.org">
  <soap:Header></soap:Header>
  <soap:Body>
    <m:GetStockPrice>
      <m:StockName>GOOG</m:StockName>
    </m:GetStockPrice>
  </soap:Body>
</soap:Envelope>
HTTP 200

Hurl can also be used to test the performance of HTTP endpoints

GET https://example.org/api/v1/pets
HTTP 200
[Asserts]
duration < 1000  # Duration in ms

And check response bytes

GET https://example.org/data.tar.gz
HTTP 200
[Asserts]
sha256 == hex,039058c6f2c0cb492c533b0a4d14ef77cc0f78abccced5287d84a1a2011cfb81;

Finally, Hurl is easy to integrate in CI/CD, with text, JUnit, TAP and HTML reports

Why Hurl?

  • Text Format: for both devops and developers
  • Fast CLI: a command line for local dev and continuous integration
  • Single Binary: easy to install, with no runtime required

Powered by curl

Hurl is a lightweight binary written in [Rust]. Under the hood, Hurl HTTP engine is powered by [libcurl], one of the most powerful and reliable file transfer libraries. With its text file format, Hurl adds syntactic sugar to run and test HTTP requests, but it's still the [curl] that we love: fast, efficient and IPv6 / HTTP/3 ready.

Feedbacks

To support its development, [star Hurl on GitHub]!

[Feedback, suggestion, bugs or improvements] are welcome.

POST https://hurl.dev/api/feedback
{
  "name": "John Doe",
  "feedback": "Hurl is awesome!"
}
HTTP 200

Resources

[License]

[Blog]

[Tutorial]

[Documentation] (download [HTML], [PDF], [Markdown])

[GitHub]

Table of Contents

readme truncated — read the full docs on github

Frequently asked questions

Is hurl free to use?

hurl is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does hurl do?

Hurl, run and test HTTP requests with plain text.

What is hurl written in?

hurl is primarily written in Rust. Its source is publicly available at https://github.com/Orange-OpenSource/hurl, and it has 19,203 GitHub stars.