ATAC is a free, open source api development & testing project written in Rust and released under MIT. It has 3,747 GitHub stars, 144 forks and 20 open issues, and was last pushed 14 days ago. On this registry it ranks #66 of 186 tracked projects in API Development & Testing, with 5 head-to-head comparisons available. It gained 14 stars over the last 30 tracked days.

What is ATAC?

What it is

ATAC is a terminal API client written in Rust and licensed under MIT. It lives in the developer tools and API development and testing ecosystem, and it targets users who want a Postman-like workflow without leaving a terminal. The project describes itself as Arguably a Terminal API Client, and it is based on clients such as Postman, Insomnia, and Bruno.

The concrete problem it solves is the need for API testing without a specific graphical environment. ATAC is based on Postman, Insomnia, and Bruno, but runs inside a terminal. It provides collection and request management, HTTP request testing, and local operation. The README states the philosophy is free, account-less, and offline for now and forever.

Key capabilities

  • Provides a terminal user interface built with ratatui, so users can work without a graphical environment.
  • Manages API collections and requests locally, following the model of Postman, Insomnia, and Bruno.
  • Acts as an HTTP client for common methods, including GET, POST, PUT, PATCH, DELETE, and OPTIONS.
  • Supports installation through cargo, Homebrew, Scoop, Arch pacman, Fedora Copr, Docker, release binaries, and source compilation.
  • Offers Docker packaging through the juliencaposiena/atac image for terminal use in containers.
  • Operates without an account and offline, according to the README.
  • Supports source compilation with cargo run and cargo build --release.

Who uses it and how

  • API developers use it to create and manage collections and requests inside a terminal.
  • Users who need offline work use it without an account, according to the project philosophy.
  • Package managers and Docker users install it through cargo, Homebrew, Scoop, Arch, Fedora Copr, or the Docker image.
  • Terminal users compare it with Postman, Insomnia, and Bruno when they want common HTTP method support.
  • Source builders clone the repository and run cargo run or cargo build --release for a local executable.

Getting started

Install ATAC with cargo install atac --locked, Homebrew, Scoop, Arch pacman, Fedora Copr, or the Docker image juliencaposiena/atac. Run it from a terminal, add a release binary to PATH, and on macOS remove the quarantine attribute if needed.

When to use it — and when not to

Use ATAC when users want a local, free, account-less, offline API client in a terminal. It offers a terminal alternative to the basic collection and request workflow of Postman, Insomnia, and Bruno. The provided facts do not mention database, storage, or SMTP setup, but they show 20 open issues and no contributor count.

project readme (upstream, from github) — read inline

ATAC ⚔📩

Rust License: MIT GitHub Release

Demo Animation

Table Of Contents

Description

ATAC is Arguably a Terminal API Client. It is based on well-known clients such as Postman, Insomnia, or even Bruno, but inside your terminal without any specific graphical environment needed.

The philosophy of ATAC is to be free, account-less, and offline for now and forever.

How to install

Packaging status

crates.io package

Install with cargo

[!IMPORTANT] First, make sure your rust version is at least 1.82

Simply use:

cargo install atac --locked
Arch package

Install from Arch

You can use pacman to install:

pacman -S atac
Homebrew package

Install with Homebrew

Simply use:

brew install atac
Scoop package

Install with Scoop

Simply use:

scoop install atac
Fedora copr Release

Install from Fedora copr

Simply use:

dnf copr enable joxcat/atac
dnf install atac
Docker Image Version

Docker package

Pull the image from https://hub.docker.com/r/juliencaposiena/atac

GitHub Release

Binary

The binaries from the latest release can be found here

[!IMPORTANT] Remember to run it from a terminal. For example, you can add the binary into your PATH. You won't be able to run it like other graphical applications since it needs CLI arguments.

[!TIP] Note for macOS users. After downloading the binary you may need to run the command sudo xattr -rd com.apple.quarantine ~/bin/atac (modify to reflect the path where atac is located).

Compile by yourself

[!IMPORTANT] First, make sure your rust version is at least 1.82

Simply clone the repository and use:

cargo run
cargo run -- -h

[!TIP] Build the latest release

cargo build --release

Features

Current

Features ATAC Postman Insomnia
Manage collections & requests :white_check_mark: :white_check_mark: :white_check_mark:
HTTP Client :white_check_mark: :white_check_mark: :white_check_mark:
Methods :white_check_mark: :white_check_mark: :white_check_mark:
- GET :white_check_mark: :white_check_mark: :white_check_mark:
- POST :white_check_mark: :white_check_mark: :white_check_mark:
- PUT :white_check_mark: :white_check_mark: :white_check_mark:
- PATCH :white_check_mark: :white_check_mark: :white_check_mark:
- DELETE :white_check_mark: :white_check_mark: :white_check_mark:
- OPTIONS :white_check_mark: :white_check_mark: :white_check_mark:
- HEAD :white_check_mark: :white_check_mark: :white_check_mark:
- TRACE :white_check_mark: :x: :x:
- CONNECT :white_check_mark: :x: :x:
Authentication Partial :white_check_mark: :white_check_mark:
- Basic auth :white_check_mark: :white_check_mark: :white_check_mark:
- Bearer token :white_check_mark: :white_check_mark: :white_check_mark:
- Digest :white_check_mark: :white_check_mark: :white_check_mark:
- JWT :white_check_mark: :white_check_mark: :white_check_mark:
- OAuth1-2, AWS :x: :soon: :white_check_mark: :white_check_mark:
Headers :white_check_mark: :white_check_mark: :white_check_mark:
Body :white_check_mark: :white_check_mark: :white_check_mark:
- Multipart form :white_check_mark: :white_check_mark: :white_check_mark:
- URL Encoded form :white_check_mark: :white_check_mark: :white_check_mark:
- File :white_check_mark: :white_check_mark: :white_check_mark:
- Plain text :white_check_mark: :white_check_mark: :white_check_mark:
- JSON, XML, HTML, Javascript :white_check_mark: :white_check_mark: :white_check_mark:
Full response :white_check_mark: :white_check_mark: :white_check_mark:
- Status code :white_check_mark: :white_check_mark: :white_check_mark:
- Cookies :white_check_mark: :white_check_mark: :white_check_mark:
- Headers :white_check_mark: :white_check_mark: :white_check_mark:
- Duration :white_check_mark: :white_check_mark: :white_check_mark:
Scripting :white_check_mark: Partial :x:
- Pre-request script :white_check_mark: :x: :x:
- Post-request script :white_check_mark: :white_check_mark: :x:
Asynchronous requests :white_check_mark: :white_check_mark: :white_check_mark:
Per-request settings :white_check_mark: :white_check_mark: :white_check_mark:
- Use proxy :white_check_mark: :white_check_mark: :white_check_mark:
- Allow redirects :white_check_mark: :white_check_mark: :white_check_mark:
- Store cookies :white_check_mark: :white_check_mark: :white_check_mark:
Export to other languages (HTTP, cURL, PHP Guzzle, NodeJS Axios, Rust Reqwest) :white_check_mark: :white_check_mark: :x:
WebSocket Client :white_check_mark: :white_check_mark: :white_check_mark:
Message :white_check_mark: :white_check_mark: :white_check_mark:
- Text :white_check_mark: :white_check_mark: :white_check_mark:
- Binary :white_check_mark: :x: :x:
- Ping :white_check_mark: :x: :x:
- Pong :white_check_mark: :x: :x:
- Close :white_check_mark: :x: :x:
GraphQL :x: :soon: :white_check_mark: :white_check_mark:
gRPC :x: :soon: :white_check_mark: :white_check_mark:
MQTT :x: :soon: :white_check_mark: :x:
Free :white_check_mark: Depends Depends
Lightweight, fast and efficient :white_check_mark: :x: :x:
Data storage Your own committable, readable, versioned and retro-compatible files (JSON or YAML) Tied to your account Tied to your account
Offline :white_check_mark: :x: :x:
Real-time collaboration :x: (not planned) :white_check_mark: :white_check_mark:
Full command line usage :white_check_mark: Partial :x:
Environment files and variables :white_check_mark: (committable, readable and versioned) :white_check_mark: :white_check_mark:
View options :white_check_mark: :white_check_mark: :white_check_mark:
Global configuration file :white_check_mark: :white_check_mark: :white_check_mark:
- HTTP/HTTPS Proxy :white_check_mark: :white_check_mark: :white_check_mark:
- Toggle syntax highlighting :white_check_mark: :x: :x:
- Save responses :white_check_mark: :question: :question:
Import from other file formats :white_check_mark: :white_check_mark: :white_check_mark:
- Postman v2.1.0 and Postman environment import :white_check_mark: :white_check_mark: :white_check_mark: / :x:
- OpenAPI import :white_check_mark: (AI generated, prone to bugs) :white_check_mark: :white_check_mark:
- cURL import :white_check_mark: :white_check_mark: :white_check_mark:
Themes :white_check_mark: :white_check_mark: :white_check_mark:
Remappable key bindings :white_check_mark: :white_check_mark: :white_check_mark:

TODO v1.0.0

TODO v2.0.0

  • To add

    • Maybe GraphQL requests
    • Maybe MQTT requests
    • Maybe gRPC requests
  • To improve

    • Auto-completion on env file variables

Ideas (will think about it later)

  • Base URL property and authorization on collections
  • VScode plugin to see and send requests

Documentation

Here is the documentation: https://atac.julien-cpsn.com/

If you think something is missing, please contribute!

Others

Vim key-bindings

You can read more about it here: https://github.com/Julien-cpsn/ATAC/releases/tag/v0.14.0

NeoVim integration

Thanks to @NachoNievaG you can have an ATAC floating window inside your nvim https://github.com/NachoNievaG/atac.nvim

Themes

You can read more about it here: https://github.com/Julien-cpsn/ATAC/releases/tag/v0.18.0

Technical precisions

Tested on

  • Console Host
    • Windows 11 (Pro)
    • WSL2 Debian 12
    • Windows 10 (Pro)
    • Windows 8.1 (N)
  • Ubuntu Desktop Terminal
    • Ubuntu 23.04 64-bit
    • Ubuntu 17.10
    • Pop!_OS 20.04
  • (Arch, Manjaro) KDE Konsole
  • (Arch, NixOS) Kitty
  • Linux Mint
  • (OpenSuse) Alacritty
  • (Chrome OS) Crostini
  • Apple
    • macOS Monterey 12.7.1 (Intel-Chip)
    • macOS Sonama 14.4 (M1 Max, Apple Silicon-Chip)

(List from here)

Dependencies

Category / Library Version Comment
Request
reqwest 0.13.2 Send requests
reqwest-middleware 0.5.1 Wrapper around reqwest to allow for client middleware chains
reqwest-websocket 0.6.0 Wrapper around reqwest to handle web-socket requests
TUI
ratatui 0.30.0 Terminal UI framework
crokey 1.4.0 Used to parse, use key bindings files and some utilities
tui-big-text 0.8.2 Display big texts. Only used for displaying ATAC in the homepage.
tui-tree-widget 0.24.0 Display tree-like lists. Used for displaying the collections.
tui-scrollview 0.6.2 Display scrollable panels
edtui 0.11.1 Text area that handle a lot of features. Used for editing request URL, body, messages, payloads, scripts.
throbber-widgets-tui 0.10.0 Display loading UI elements. Used when request is pending.
ratatui-image 10.0.5 Display response images.
image 0.25.9 Decode images.
Main functionalities
syntect 5.3.0 Syntax highlighting
serde 1.0.228 Serialize & Deserialize application data into files
jsonxf 1.1.1 Pretty print JSON
toml 0.9.11 Serialize & Deserialize application config files
boa_engine 0.21.0 Create Javascript runtimes. Used for pre and post request scripts
parse_postman_collection 0.2.4 Deserialize Postman collection files
curl-parser 0.6.0 Parse cURL request files
openapiv3 2.2.0 Parse OpenAPI spec files
clap 4.5.57 Command Line Argument Parser
directories 6.0.0 Use system files
arboard 3.6.1 Copy response body to clipboard
jsonwebtoken 10.3.0 Create and encode JSON Web Tokens (JWT)
digest_auth 0.3.1 Digest auth
Async
tokio 1.49.0 Handle asynchronous requests
parking_lot 0.12.5 Smaller, faster and more flexible implementation of RwLock and Mutex. Used everywhere.
Utils
strum 0.27.2 Enum facilities
lazy_static 1.5.0 Allows for more flexible constants. Mainly used for accessing CLI arguments everywhere
nestify 0.3.3 Used to nest struct definitions
walkdir 2.5.0 Recursively retrieve files
snailquote 0.3.1 Unescape string
indexmap 2.13.0 Ordered hashmap. Used in environments to preserve files' values order
rayon 1.11.0 Allows the usage of multiple threads in for loops
thiserror 2.0.18 Create custom errors
anyhow 1.0.101 Result that can contain any error
clap-verbosity-flag 3.0.4 Add verbosity flag to the CLI
clap_complete 4.5.65 Generate completion file
clap_mangen 0.2.31 Generate man pages
regex 1.12.3 Regex. Using for parsing requests URL
chrono 0.4.43 Time utils
uuid 1.20.0 UUID generator
base64 0.22.1 Decode base64 strings
textwrap 0.16.2 Wrap text to max length
Tracing
tracing 0.1.44 Log events
tracing-subscriber 0.3.22 Utilities for implementing and composing tracing subscribers
tracing-log 0.2.0 Log crate compatibility for tracing
reqwest-tracing 0.7.0 Opentracing middleware implementation for reqwest-middleware

Binary size

The binary file size goes from ~5 MB to ~15 MB depending on the platform. I try to keep it as small as possible, unfortunately for me, I bundle a Javascript runtime.

Contributors

Maintainers

Packagers

Star history

Star History Chart

License

The MIT license for this project can be seen here

Frequently asked questions

Is ATAC free to use?

ATAC is open source under the MIT 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 ATAC do?

A simple API client (postman like) in your terminal

What is ATAC written in?

ATAC is primarily written in Rust. Its source is publicly available at https://github.com/Julien-cpsn/ATAC, and it has 3,747 GitHub stars.