A simple API client (postman like) in your terminal
ATAC โ๐ฉ ===

Table Of Contents
* Install with cargo * Install with Homebrew * Install with Scoop * Install from Arch * Install from Fedora copr * Docker package * Binary * Compile by yourself * Current * TODO v1.0.0 * TODO v2.0.0 * Vim key-bindings * NeoVim integration * Themes * Tested on * Dependencies * Binary size * Maintainers * PackagersDescription
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
Install with cargo
[!IMPORTANT]
First, make sure your rust version is at least 1.82
Simply use:
cargo install atac --locked
Install from Arch
You can use pacman to install:
pacman -S atac
Install with Homebrew
Simply use:
brew install atac
Install with Scoop
Simply use:
scoop install atac
Install from Fedora copr
Simply use:
dnf copr enable joxcat/atac
dnf install atac
Docker package
Pull the image from https://hub.docker.com/r/juliencaposiena/atac
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 whereatacis 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 | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | HTTP Client | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Methods | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - GET | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - POST | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - PUT | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - PATCH | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - DELETE | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - OPTIONS | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - HEAD | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - TRACE | :whitecheckmark: | :x: | :x: | | - CONNECT | :whitecheckmark: | :x: | :x: | | Authentication | Partial | :whitecheckmark: | :whitecheckmark: | | - Basic auth | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Bearer token | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Digest | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - JWT | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - OAuth1-2, AWS | :x: :soon: | :whitecheckmark: | :whitecheckmark: | | Headers | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Body | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Multipart form | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - URL Encoded form | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - File | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Plain text | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - JSON, XML, HTML, Javascript | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Full response | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Status code | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Cookies | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Headers | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Duration | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Scripting | :whitecheckmark: | Partial | :x: | | - Pre-request script | :whitecheckmark: | :x: | :x: | | - Post-request script | :whitecheckmark: | :whitecheckmark: | :x: | | Asynchronous requests | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Per-request settings | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Use proxy | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Allow redirects | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Store cookies | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Export to other languages (HTTP, cURL, PHP Guzzle, NodeJS Axios, Rust Reqwest) | :whitecheckmark: | :whitecheckmark: | :x: | | WebSocket Client | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Message | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Text | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Binary | :whitecheckmark: | :x: | :x: | | - Ping | :whitecheckmark: | :x: | :x: | | - Pong | :whitecheckmark: | :x: | :x: | | - Close | :whitecheckmark: | :x: | :x: | | GraphQL | :x: :soon: | :whitecheckmark: | :whitecheckmark: | | gRPC | :x: :soon: | :whitecheckmark: | :whitecheckmark: | | MQTT | :x: :soon: | :whitecheckmark: | :x: | | Free | :whitecheckmark: | Depends | Depends | | Lightweight, fast and efficient | :whitecheckmark: | :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 | :whitecheckmark: | :x: | :x: | | Real-time collaboration | :x: (not planned) | :whitecheckmark: | :whitecheckmark: | | Full command line usage | :whitecheckmark: | Partial | :x: | | Environment files and variables | :whitecheckmark: (committable, readable and versioned) | :whitecheckmark: | :whitecheckmark: | | View options | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Global configuration file | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - HTTP/HTTPS Proxy | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Toggle syntax highlighting | :whitecheckmark: | :x: | :x: | | - Save responses | :whitecheckmark: | :question: | :question: | | Import from other file formats | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | - Postman v2.1.0 and Postman environment import | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: / :x: | | - OpenAPI import | :whitecheckmark: (AI generated, prone to bugs) | :whitecheckmark: | :whitecheckmark: | | - cURL import | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Themes | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: | | Remappable key bindings | :whitecheckmark: | :whitecheckmark: | :whitecheckmark: |
TODO v1.0.0
- To add
- To improve
TODO v2.0.0
- To add
- To improve
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
- Ubuntu Desktop Terminal
- (Arch, Manjaro) KDE Konsole
- (Arch, NixOS) Kitty
- Linux Mint
- (OpenSuse) Alacritty
- (Chrome OS) Crostini
- Apple
(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 | | boaengine | 0.21.0 | Create Javascript runtimes. Used for pre and post request scripts | | parsepostman_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) | | digestauth | 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 | | lazystatic | 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 | | clapcomplete | 4.5.65 | Generate completion file | | clapmangen | 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
- Cargo, Brew, Docker - @julien-cpsn
- Arch - @orhun
- Fedora copr - @joxcat
Star history
License
The MIT license for this project can be seen here