Axotly v0.1.6 is out! Check out the latest release on GitHub.

Fast and simple CLI for API testing.

Aimed for developer hapiness.

Axotly makes it easy to write and run API tests with a clear and concise syntax, so you can focus on building great applications.

Install and Try Now

Expressive DSL

Tests read like clear specifications — easy to write and maintain.

Fast by Default

Run many tests concurrently with minimal overhead.

Local-first

No login, no cloud dependency — work offline and privately.

Developer-first

Clean output and clear failures you can trust.

How Axotly compares to other tools.

Axotly started as a personal project, I wanted the simplicity of curl, with the structure and assertions needed for real API testing.

Feature curl HTTPie Postman Axotly
CLI-first
Built-in assertions
Local-first / offline
Concurrent test runs
Clear diff-style failures
No accounts / cloud required

Install Axotly

Axotly is a single binary. No runtime, no setup, no accounts. Download the binary for your OS and start testing immediately.

Cargo (Optional)

If you already have Rust installed, this is the easiest way. Works on macOS, Linux, and Windows.

cargo install axotly

Linux

Download the prebuilt binary, make it executable, and move it into your PATH.

chmod +x axotly
  sudo mv axotly /usr/local/bin/

macOS

Download the macOS binary and remove the quarantine attribute if needed.

chmod +x axotly
  xattr -d com.apple.quarantine axotly
  sudo mv axotly /usr/local/bin/

Windows

Download axotly.exe and add its folder to your PATH.

axotly --version

Download binaries from the GitHub Releases page .

Readable tests. Clear results.

Axotly tests read like specifications. When something fails, you see exactly what failed and why.

Create a Test file "tests.ax"

TEST My first test
  GET https://httpbin.org/get

  EXPECT status == 200
END

TEST My second test
  POST https://httpbin.org/post
  Content-Type: application/json

  BODY
  {
    "name": "Axotly",
    "role": "tester"
  }
  BODYEND

  EXPECT status == 200
  EXPECT body.json.name == "Axotly"
  EXPECT body.json.role == "admin"
END

Run the tests

Human readable output

axotly -f ./tests.ax

Axotly — API tests
Running 2 tests...

✓ My first test (848ms)
✗ My second test (431ms)

Failures

1) My second test
  - Expected body.json.role Eq "admin"

────────────────────────────────────
Results
✓ Passed: 1
✗ Failed: 1
⏱ Total duration: 1.28s
────────────────────────────────────
Test suite completed in: 848.26ms

Diff style terminal output

axotly -f ./tests.ax -r diff

Axotly — API tests
Running 2 tests...

examples/test1.ax
✔ My first test (255.095899ms)
✖ My second test (255.928481ms)
  1 body.json.role
    - expected: "admin"
    + actual:   "tester"

────────────────────────────────────────
✔ 1 passed, ✖ 1 failed
Completed in: 256.10ms