用 cargo 安装需 Rust 版本至少 1.93;macOS 下载二进制后可能需执行 sudo xattr -rd com.apple.quarantine 去除隔离属性;二进制需从终端带 CLI 参数运行,不能像图形应用那样双击启动
cargo install atac --lockedREADME 未说明,纯终端工具,无 GPU 或显存要求
终端里的 Postman,无需图形界面即可管理并发送 HTTP 请求
在终端里用的轻量 API 客户端,类似 Postman,用 Rust 编写,适合不想离开命令行就能调试和测试接口的开发者。
核心能力
- 在终端内管理集合与请求,无需图形环境
- 支持 GET/POST/PUT/PATCH/DELETE 等完整 HTTP 方法
- 支持 Basic、Bearer、Digest、JWT 认证
- 支持 Multipart、URL 编码、文件与 JSON/XML 等请求体
- 提供 Vim 键位绑定与主题定制
容易踩的坑
- v0.24.0最新正式版2026-10-11 · 2026-10-11 22:09 UTC
Hello, this update has been possible mainly thanks to the huge work of @helenkwok !!! I have some ideas of new features in mind
Added
- 🦟 | Added MQTT requests @helenkwok
- Supports MQTT v3.1.1, v5, clean sessions, client IDs, QoS, many topic subscriptions and many more!!
- You need to add the new MQTT section to your theme files (you can straight copy the websocket section). E.g.:
[MQTT] [MQTT.connection_status] connected = "Green" disconnected = "Red" [MQTT.messages] server_foreground_color = "Blue" server_background_color = "DarkGray" you_background_color = "DarkGray" details_color = "DarkGray"- 🔎 | Added QUERY HTTP method @eshad
- You need to add the new QUERY HTTP method entry to your theme files. E.g.:
[HTTP] [HTTP.methods] GET = "Green" POST = "Yellow" QUERY = "LightMagenta" ...Improved
- Updated dependencies
- 🦟 | Added MQTT requests @helenkwok
- v0.23.12026-09-03 · 2026-09-03 08:49 UTC
查看更新说明
Doing a PhD = having no time. But I'll be back at some point!
Fixed
- Fixed wrong input/value mapping in some Auth fields
- v0.23.02026-02-08 · 2026-02-08 22:39 UTC
查看更新说明
Hi all!!!
Big quality of life and features update, hope you like it :) An enormous rework on text inputs has been made, please report each problem that you encounter.
The next release will likely be on nested collection and default request value in collections (e.g., a collection auth being applied on all its requests)
We are somes features away from v1 🎊
Added
- 🪙 | Added JWT authentication, mostly thanks to @amkarkhi https://github.com/Julien-cpsn/ATAC/pull/179
- Algorithms:
- HS256
- HS384
- HS512
- ES256
- ES384
- RS256
- RS384
- RS512
- PS256
- PS384
- PS512
- EdDSA
- Secret types: text, base64, URL-safe base64, PEM file, DER file
- Algorithms:
- 🫄 | Added Digest authentication. Note that on a 401 unauthorized response, the request digest fields can be filled according to the response
www-authenticateheader- Algorithms:
- MD5
- MD5-sess
- SHA256
- SHA256-sess
- SHA512
- SHA512-sess
- QOP: none, auth, auth-int
- Charset: ASCII, UTF8
- Algorithms:
- 🌐 | You can now set a global config file. Write your configuration at
<ATAC_GLOBAL_DIR>/global.toml, e.g.:/home/julien/.config/atac/global.toml. The values of this config file will be overwritten by directory config. https://github.com/Julien-cpsn/ATAC/issues/192 - ✏️ | [BREAKING] Reworked EVERY text input (~4000 LoC omg) thanks to @preiter93. But what does it change?
- Syntax highlighting everywhere
- Much better support of VIM inputs, not only key-bindings
- Now supports EMACS inputs
- New search mode
Ctrl-fwith default configuration - Now supports external editor on text-areas.
Ctrl-ewith default configuration. - Breaking part: the key bindings files have changed. Single-line text input and text-area part were merged and things were added. Please see https://github.com/Julien-cpsn/ATAC/tree/main/example_resources/key_bindings for better examples.
- You can now disable the usage of graphical protocol by setting
disable_graphical_protocol = <bool>in the config file.
Removed
- [BREAKING] Removed
disable_cors = <bool>from the config file, as it has been deprecated long ago in upstream https://github.com/seanmonstar/reqwest/releases/tag/v0.12.14
Improved
- Updated dependencies
Fixed
- Fixed the app crashing when no clipboard is available (likely headless environment) https://github.com/Julien-cpsn/ATAC/issues/187
- Fixed changing method being allowed in ws requests https://github.com/Julien-cpsn/ATAC/issues/196
- 🪙 | Added JWT authentication, mostly thanks to @amkarkhi https://github.com/Julien-cpsn/ATAC/pull/179
- v0.22.12025-10-18 · 2025-10-18 00:09 UTC
查看更新说明
Hello all!! Been really busy lately due to a scientific conference (and PhD...). I am looking forward reviewing the "external editor" and "JWT" pull request, which seems to look very good to me
Releasing from Tokyo :)
Improved
- The clipboard is now a feature (activated by default) to avoid build problems for some arch environments https://github.com/Julien-cpsn/ATAC/issues/173
Fixed
- Updated
syntectdependency to avoid build problems for some arch/weird distro environments with gcc 15 https://github.com/Julien-cpsn/ATAC/issues/181 https://github.com/Julien-cpsn/ATAC/pull/184 @v3rmine @afgTheCat - Prevent crashing when creating the first collection in a debug build https://github.com/Julien-cpsn/ATAC/pull/182 @afgTheCat
- Removed forgotten print (oops) https://github.com/Julien-cpsn/ATAC/pull/176 @mRezaAnanta
- Ensures not having / and \ in collection or request name to avoid conflicts with the CLI usage and some path problems (when creating the associated file)
- v0.22.02025-09-12 · 2025-09-12 21:53 UTC
查看更新说明
Added
- You can now import Postman environment files by using
atac import postman-env <file path>. https://github.com/Julien-cpsn/ATAC/discussions/172- Example file, which will be saved as
.env.test
- Example file, which will be saved as
{ "id": "f0aedee9-05dc-4b0a-8172-a1e022855db2", "name": "TEST", "values": [ { "key": "host", "value": "http://127.0.0.1:8000/api", "type": "default", "enabled": true }, ... ], "_postman_variable_scope": "environment", "_postman_exported_at": "2025-09-12T20:53:22.305Z", "_postman_exported_using": "Postman/11.62.6" }Improved
- Clipboard now tries to use the Wayland data protocol if available, and falls back to x11 if not found
- Updated the README with the newest functionalities
Fixed
- Fixed the weird display of response's body for unknown
content-typeheaders https://github.com/Julien-cpsn/ATAC/issues/143 - Regression of the
arboardlibrary causing compilation error for Arch Linux https://github.com/Julien-cpsn/ATAC/issues/173
- You can now import Postman environment files by using
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
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.93
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.93
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: |
| - QUERY | :white_check_mark: | :x: | :x: |
| - 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: |
| MQTT Client (3.1.1 & 5, TCP & TLS) | :white_check_mark: | :white_check_mark: | :x: |
| GraphQL | :x: :soon: | :white_check_mark: | :white_check_mark: |
| gRPC | :x: :soon: | :white_check_mark: | :white_check_mark: |
| 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
-
To add
- Individual request documentation in the TUI (markdown)
- Insomnia import
-
To improve
- Editing cookies
- Manage multipart Content-type header (auto-generated for now) https://github.com/seanmonstar/reqwest/issues/2259
TODO v2.0.0
-
To add
- Maybe GraphQL 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.5 | Send requests |
| reqwest-middleware | 0.5.2 | Wrapper around reqwest to allow for client middleware chains |
| reqwest-websocket | 0.6.0 | Wrapper around reqwest to handle web-socket requests |
| rumqttc | 0.25.1 | MQTT 3.1.1 and 5 client |
| rustls-native-certs | 0.8.3 | Load the platform root certificates for MQTT over TLS |
| TUI | ||
| ratatui | 0.30.2 | Terminal UI framework |
| crokey | 1.5.0 | Used to parse, use key bindings files and some utilities |
| tui-big-text | 0.8.10 | Display big texts. Only used for displaying ATAC in the homepage. |
| tui-tree-widget | 0.24.1 | Display tree-like lists. Used for displaying the collections. |
| tui-scrollview | 0.6.8 | Display scrollable panels |
| edtui | 0.11.7 | Text area that handle a lot of features. Used for editing request URL, body, messages, payloads, scripts. |
| throbber-widgets-tui | 0.11.1 | Display loading UI elements. Used when request is pending. |
| ratatui-image | 12.0.0-rc.2 | Display response images. |
| image | 0.25.10 | Decode images. |
| Main functionalities | ||
| syntect | 5.3.0 | Syntax highlighting |
| serde | 1.0.229 | Serialize & Deserialize application data into files |
| jsonxf | 1.1.1 | Pretty print JSON |
| toml | 1.1.8 | Serialize & Deserialize application config files |
| boa_engine | 0.22.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.6.7 | Command Line Argument Parser |
| directories | 6.0.0 | Use system files |
| arboard | 3.6.1 | Copy response body to clipboard |
| jsonwebtoken | 11.1.0 | Create and encode JSON Web Tokens (JWT) |
| digest_auth | 0.3.1 | Digest auth |
| Async | ||
| tokio | 1.53.2 | Handle asynchronous requests |
| parking_lot | 0.12.5 | Smaller, faster and more flexible implementation of RwLock and Mutex. Used everywhere. |
| Utils | ||
| strum | 0.28.0 | Enum facilities |
| lazy_static | 1.5.1 | 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.14.2 | Ordered hashmap. Used in environments to preserve files' values order |
| rayon | 1.12.0 | Allows the usage of multiple threads in for loops |
| thiserror | 2.0.21 | Create custom errors |
| anyhow | 1.0.104 | Result that can contain any error |
| clap-verbosity-flag | 3.0.4 | Add verbosity flag to the CLI |
| clap_complete | 4.6.11 | Generate completion file |
| clap_mangen | 0.3.3 | Generate man pages |
| regex | 1.13.1 | Regex. Using for parsing requests URL |
| chrono | 0.4.45 | Time utils |
| uuid | 1.28.0 | UUID generator |
| base64 | 0.23.1 | Decode base64 strings |
| textwrap | 0.16.4 | Wrap text to max length |
| Tracing | ||
| tracing | 0.1.44 | Log events |
| tracing-subscriber | 0.3.23 | Utilities for implementing and composing tracing subscribers |
| tracing-log | 0.2.0 | Log crate compatibility for tracing |
| reqwest-tracing | 0.7.1 | 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