ATAC ⚔📩

Table Of Contents
- Description
- How to install
- Features
- Documentation
- Others
- Technical precisions
- Contributors
- Star history
- License
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
Install with cargo
[!IMPORTANT] First, make sure your rust version is at least 1.76
Simply use:
cargo install atac
Install from Arch
You can use pacman to install:
pacman -S atac
Install with Homebrew
Simply use:
Install from Fedora copr
Simply use:
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.76
Simply clone the repository and use:
[!TIP] Build the latest 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: |
| - HEAD | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| - OPTIONS | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| 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: |
| - JWT, Digest, 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 | :x: :soon: | :white_check_mark: | :x: |
| WebSocket Client | :x: :soon: | :white_check_mark: | :white_check_mark: |
| 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 and versioned 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: |
| 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: |
| - Disable CORS | :white_check_mark: | :x: | :x: |
| - Toggle syntax highlighting | :white_check_mark: | :x: | :x: |
| Postman v2.1.0 import | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| OpenAPI import | :x: :soon: | :white_check_mark: | :white_check_mark: |
TODO v1.0.0
-
To add
- Create a repo wiki
- Document the whole code
- Command line usage (send requests, add new requests)
- Request body syntax highlighting
- Export a request to other code formats (raw, curl, PHP, JS, Rust, ...)
- OpenAPI & Insomnia import
-
To improve
- Editing cookies
- Auto-completion on env file variables
- Manage multipart Content-type header (auto-generated for now) https://github.com/seanmonstar/reqwest/issues/2259
-
To fix
- Query parameters bug
TODO v2.0.0
- To add
- WebSocket requests
- Maybe GraphQL requests
- Maybe MQTT requests
- Maybe gRPC requests
Ideas (will think about it later)
- Base URL property on collections
Documentation
[!NOTE] Documentation will soon be published in the wiki section
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
Technical precisions
Tested on
- Console Host
- Windows 11 (Pro)
- WSL2 Debian
- Windows 10 (Pro)
- Windows 8.1 (N)
- Ubuntu Desktop Terminal
- Ubuntu 17.10
- Pop!_OS 20.04
- (Arch, Manjaro) KDE Konsole
- (Arch, NixOS) Kitty
- Linux Mint
- (OpenSuse) Alacritty
- (Chrome OS) Crostini
(List from here)
Dependencies
| Library | Version | Reason |
|---|---|---|
| reqwest & reqwest cookie store | 0.11.27 & 0.6.0 | Send requests |
| ratatui | 0.26.2 | Terminal UI framework |
| crossterm | 0.27.0 | Terminal Backend |
| crokey | 0.6.4 | Used to parse, use key bindings files and some utilities |
| tui-big-text | 0.4.2 | Display big texts. Only used for displaying ATAC in the homepage. |
| tui-tree-widget | 0.19.0 | Display tree-like lists. Used for displaying the collections. |
| tui-textarea | 0.5.0 | Text area that handle a lot of features. Used for editing request body. |
| throbber-widgets-tui | 0.4.1 | Display loading UI elements. Used when request is pending. |
| ratatui-image | 1.0.0 | Display response images. |
| image | 0.24.9 | Decode images. |
| syntect | 5.2.0 | Syntax highlighting |
| serde (serde_json, serde-yaml) | 1.0.197 (1.0.144, 0.9.34) | Serialize & Deserialize application data into files |
| jsonxf | 0.1.1 | Pretty print JSON |
| toml | 0.8.11 | Serialize & Deserialize application config files |
| boa_engine | 0.18.0 | Create Javascript runtimes. Used for pre and post request scripts |
| My fork of postman_collection | 0.2.1 | Deserialize Postman collection files |
| clap | 4.5.0 | Command Line Argument Parser |
| arboard | 3.3.2 | Copy response body to clipboard |
| tokio | 1.0.0 | Handle asynchronous requests |
| parking_lot | 0.12.2 | Smaller, faster and more flexible implementation of RwLock and Mutex. Used everywhere. |
| strum | 0.26.2 | Enum facilities |
| lazy_static | 1.4.0 | Allows for more flexible constants. Mainly used for accessing CLI arguments everywhere |
| nestify | 0.3.3 | Used to nest struct definitions |
| snailquote | 0.3.1 | Unescape string |
| indexmap | 2.2.6 | Ordered hashmap. Used in environments to preserve files' values order |
| base64 | 0.22.0 | Encode auth. |
| regex | 1.10.3 | Regex. Using for parsing requests URL |
Binary size
The binary file size goes from ~4.5 MB to ~7 MB depending on the platform. I try to keep it as small as possible.
Contributors
Maintainers
Packagers
- Cargo, Brew - @julien-cpsn
- Arch - @orhun
- Fedora copr - @joxcat
Star history
License
The MIT license for this project can be seen here