Product Promotion
0x5a.live
for different kinds of informations and explorations.
GitHub - Julien-cpsn/ATAC: A simple API client (postman like) in your terminal
A simple API client (postman like) in your terminal - Julien-cpsn/ATAC
Visit SiteGitHub - Julien-cpsn/ATAC: A simple API client (postman like) in your terminal
A simple API client (postman like) in your terminal - Julien-cpsn/ATAC
Powered by 0x5a.live ๐
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.79
Simply use:
cargo install atac --locked
Install from Arch
You can use pacman to install:
pacman -S atac
Install with Homebrew
Simply use:
brew tap julien-cpsn/atac
brew 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/repository/docker/juliencaposiena/atac/general
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 whereatac
is located).
Compile by yourself
[!IMPORTANT] First, make sure your rust version is at least 1.79
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: |
- 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: |
Full command line usage | :white_check_mark: | Partial | :w: |
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: |
Themes | :white_check_mark: | :white_check_mark: | :white_check_mark: |
TODO v1.0.0
-
To add
- Document the whole code
- Error notification in TUI
- 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
- Handle "home" and "end" keys in the body editor (https://github.com/Julien-cpsn/ATAC/issues/93)
- Manage multipart Content-type header (auto-generated for now) https://github.com/seanmonstar/reqwest/issues/2259
- Go from syntect to tree-siter (because syntect causes a little memory leak)
-
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 and authorization on collections
- VScode plugin to see and send requests
- Scoop installation
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 | Reason |
---|---|---|
Request | ||
reqwest & reqwest cookie store | 0.12.5 & 0.8.0 | Send requests |
TUI | ||
ratatui | 0.28.0 | Terminal UI framework |
crokey | 1.1.0 | Used to parse, use key bindings files and some utilities |
tui-big-text | 0.6.0 | Display big texts. Only used for displaying ATAC in the homepage. |
tui-tree-widget | 0.22.0 | Display tree-like lists. Used for displaying the collections. |
tui-textarea | 0.6.1 | Text area that handle a lot of features. Used for editing request body. |
throbber-widgets-tui | 0.6.0 | Display loading UI elements. Used when request is pending. |
ratatui-image | 1.0.5 | Display response images. |
image | 0.25.2 | Decode images. |
Main functionalities | ||
syntect | 5.2.0 | Syntax highlighting |
serde (serde_json, serde-yaml) | 1.0.213 (1.0.132, 0.9.34) | Serialize & Deserialize application data into files |
jsonxf | 1.1.1 | Pretty print JSON |
toml | 0.8.19 | Serialize & Deserialize application config files |
boa_engine | 0.19.1 | Create Javascript runtimes. Used for pre and post request scripts |
My fork of postman_collection | 0.2.3 | Deserialize Postman collection files |
curl-parser | 0.3.1 | Parse cURL request files |
clap | 4.5.20 | Command Line Argument Parser |
directories | 5.0.1 | Use system files |
arboard | 3.4.1 | Copy response body to clipboard |
Async | ||
tokio | 1.41.0 | Handle asynchronous requests |
parking_lot | 0.12.3 | Smaller, faster and more flexible implementation of RwLock and Mutex. Used everywhere. |
Utils | ||
strum | 0.26.3 | Enum facilities |
lazy_static | 1.5.0 | Allows for more flexible constants. Mainly used for accessing CLI arguments everywhere |
rayon | 1.10.0 | Allows the usage of multiple threads in for loops |
nestify | 0.3.3 | Used to nest struct definitions |
walkdir | 2.5.0 | Recursively retrieve files |
snailquote | 0.3.1 | Unescape string |
indexmap | 2.6.0 | Ordered hashmap. Used in environments to preserve files' values order |
thiserror | 1.0.65 | Create custom errors |
anyhow | 1.0.91 | Result that can contain any error |
clap-verbosity-flag | 2.2.2 | Add verbosity flag to the CLI |
clap_complete | 4.5.35 | Generate completion file |
clap_mangen | 0.2.24 | Generate man pages |
base64 | 0.22.1 | Encode auth. |
regex | 1.11.1 | Regex. Using for parsing requests URL |
chrono | 0.4.38 | Time utils |
uuid | 1.11.0 | UUID generator |
Tracing/Log | ||
tracing | 0.1.40 | Log events |
tracing-subscriber | 0.3.18 | Utilities for implementing and composing tracing subscribers |
tracing-log | 0.2.0 | Log crate compatibility for tracing |
reqwest-tracing | 0.5.3 | Opentracing middleware implementation for reqwest-middleware |
reqwest-middleware | 0.3.3 | Wrapper around reqwest to allow for client middleware chains |
Binary size
The binary file size goes from ~5 MB to ~12 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
Rust Resources
are all listed below.
Made with โค๏ธ
to provide different kinds of informations and resources.