| Crates.io | axotly |
| lib.rs | axotly |
| version | 0.1.6 |
| created_at | 2026-01-09 22:43:08.380314+00 |
| updated_at | 2026-01-22 15:22:13.145846+00 |
| description | A fast, reliable, and expressive API testing tool designed for developer happiness. |
| homepage | https://axotly.com |
| repository | https://github.com/JapArt/axotly |
| max_upload_size | |
| id | 2033090 |
| size | 1,015,204 |
Fast, reliable, and expressive API testing — designed for developer happiness.
Axotly is a fast, developer-first CLI tool for testing HTTP (and future GraphQL) APIs using a clear, declarative DSL. Tests focus on what you expect from an API rather than how to assert it, making them readable, diff-friendly, and easy to review.
Tests are written in plain .ax files, organized in folders alongside your code. Axotly automatically discovers and runs them concurrently, producing clear pass/fail output with actionable error messages. It’s designed to feel like curl with structure—simple, deterministic, and local-first.
Key features include REST API testing, JSON assertions and expressive expectations. Planned features include GraphQL support, variables, environment configuration, and CI integrations.
Axotly is a Rust-based CLI (installed via Cargo), runs entirely locally with no accounts required, and is currently in Beta. It’s open source under the MIT license and focused on one goal: making API behavior explicit, testable, and trustworthy.

Axotly is distributed as a Rust CLI.
If you don’t have Rust installed, get it from https://rustup.rs
cargo install axotly
Once installed, verify it works:
axotly --help
curl -fsSL https://raw.githubusercontent.com/JapArt/axotly/main/install.sh | bash
Axotly runs completely locally. No accounts, no logins, no network calls beyond the APIs you test.
/// Assuming you have a folder `examples/` with Axotly test files:
> axotly -f examples
Axotly — API tests
Running 6 tests...
examples/test2.ax
✓ GET request with query (660ms)
✗ POST create a resource (687ms)
✗ PUT update a resource (863ms)
✗ PATCH partial update (1.07s)
✓ DELETE a resource (659ms)
✓ GET with headers (1.38s)
Failures
1) POST create a resource (687ms)
- Path 'body.name' not found
- Path 'body.role' not found
2) PUT update a resource (863ms)
- Path 'body.role' not found
3) PATCH partial update (1.07s)
- Path 'body.active' not found
────────────────────────────────────
Results
✓ Passed: 3
✗ Failed: 3
⏱ Duration: 4.17s
────────────────────────────────────
Completed in: 1.42s
Axotly tests are written in plain text files with the .ax extension.
This makes it easy to:
A typical structure might look like:
api-tests/
users/
get_user.ax
create_user.ax
auth/
login.ax
refresh_token.ax
Axotly will automatically discover and run all .ax files under the given directory.
A simple Axotly test looks like this:
TEST Create a resource <--- Test name
POST https://httpbin.org/post <--- Request (METHOD url)
Content-Type: application/json <--- Headers, one on each line
BODY <--- Body of the request
{
"name": "Axotly",
"role": "tester"
}
BODYEND
EXPECT status == 200 <--- Expects, one on each line
EXPECT body.name == "Axotly"
EXPECT body.role == "tester"
END
You can find more examples in the examples/ folder of the repository.
This is a personal project aimed to use the simplicity of curl, with the structure and assertions needed for real API testing.
Axotly is currently in Beta.
Axotly is already being used locally and in development workflows, and your input will directly shape its future.
The immediate focus is on features that make Axotly practical for real-world teams and CI pipelines:
These improvements will keep Axotly simple while making it production-ready.
Axotly is open source under the MIT License.
You are free to:
Attribution is appreciated ❤️
Contributions, ideas, and feedback are welcome.
Please keep discussions constructive and developer-focused.
Axotly is inspired by the axolotl, a unique animal known for its ability to regenerate and adapt. I used to have one.
MIT © Juan Artau