Home

Awesome

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

<a href="https://crates.io/crates/atac"> <img src="https://repology.org/badge/version-for-repo/crates_io/atac.svg" alt="crates.io package" align="right"> </a>

Install with cargo

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

Simply use:

cargo install atac --locked
<a href="https://archlinux.org/packages/extra/x86_64/atac/"> <img src="https://repology.org/badge/version-for-repo/arch/atac.svg" alt="Arch package" align="right"> </a>

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
<a href="https://copr.fedorainfracloud.org/coprs/joxcat/atac/"> <img alt="Fedora copr Release" src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fcopr.fedorainfracloud.org%2Fapi_3%2Fpackage%3Fownername%3Djoxcat%26projectname%3Datac%26packagename%3Datac%26with_latest_build%3DTrue&query=%24.builds.latest.source_package.version&style=flat&logo=fedora&logoColor=white&label=Fedora%20copr&color=limegreen" align="right"> </a>

Install from Fedora copr

Simply use:

dnf copr enable joxcat/atac
dnf install atac
<a href="https://hub.docker.com/repository/docker/juliencaposiena/atac"> <img alt="Docker Image Version" src="https://img.shields.io/docker/v/juliencaposiena/atac?logo=docker" align="right"> </a>

Docker package

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

<a href="https://github.com/Julien-cpsn/ATAC/releases"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/julien-cpsn/atac?label=Release&color=45c017" align="right"> </a>

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.79

Simply clone the repository and use:

cargo run
cargo run -- -h

[!TIP] Build the latest release

cargo build --release

Features

Current

FeaturesATACPostmanInsomnia
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:
AuthenticationPartial: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:DependsDepends
Lightweight, fast and efficient:white_check_mark::x::x:
Data storageYour own committable, readable and versioned files (JSON or YAML)Tied to your accountTied 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

TODO v2.0.0

Ideas (will think about it later)

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

(List from here)

Dependencies

Category / LibraryVersionReason
Request
reqwest & reqwest cookie store0.12.5 & 0.8.0Send requests
TUI
ratatui0.28.0Terminal UI framework
crokey1.1.0Used to parse, use key bindings files and some utilities
tui-big-text0.6.0Display big texts. Only used for displaying ATAC in the homepage.
tui-tree-widget0.22.0Display tree-like lists. Used for displaying the collections.
tui-textarea0.6.1Text area that handle a lot of features. Used for editing request body.
throbber-widgets-tui0.6.0Display loading UI elements. Used when request is pending.
ratatui-image1.0.5Display response images.
image0.25.2Decode images.
Main functionalities
syntect5.2.0Syntax highlighting
serde (serde_json, serde-yaml)1.0.213 (1.0.132, 0.9.34)Serialize & Deserialize application data into files
jsonxf1.1.1Pretty print JSON
toml0.8.19Serialize & Deserialize application config files
boa_engine0.19.1Create Javascript runtimes. Used for pre and post request scripts
My fork of postman_collection0.2.3Deserialize Postman collection files
curl-parser0.3.1Parse cURL request files
clap4.5.20Command Line Argument Parser
directories5.0.1Use system files
arboard3.4.1Copy response body to clipboard
Async
tokio1.41.0Handle asynchronous requests
parking_lot0.12.3Smaller, faster and more flexible implementation of RwLock and Mutex. Used everywhere.
Utils
strum0.26.3Enum facilities
lazy_static1.5.0Allows for more flexible constants. Mainly used for accessing CLI arguments everywhere
rayon1.10.0Allows the usage of multiple threads in for loops
nestify0.3.3Used to nest struct definitions
walkdir2.5.0Recursively retrieve files
snailquote0.3.1Unescape string
indexmap2.6.0Ordered hashmap. Used in environments to preserve files' values order
thiserror1.0.65Create custom errors
anyhow1.0.91Result that can contain any error
clap-verbosity-flag2.2.2Add verbosity flag to the CLI
clap_complete4.5.35Generate completion file
clap_mangen0.2.24Generate man pages
base640.22.1Encode auth.
regex1.11.1Regex. Using for parsing requests URL
chrono0.4.38Time utils
uuid1.11.0UUID generator
Tracing/Log
tracing0.1.40Log events
tracing-subscriber0.3.18Utilities for implementing and composing tracing subscribers
tracing-log0.2.0Log crate compatibility for tracing
reqwest-tracing0.5.3Opentracing middleware implementation for reqwest-middleware
reqwest-middleware0.3.3Wrapper 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

Star history

<a href="https://star-history.com/#julien-cpsn/atac&Date"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=julien-cpsn/atac&type=Date&theme=dark" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=julien-cpsn/atac&type=Date" /> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=julien-cpsn/atac&type=Date" /> </picture> </a>

License

The MIT license for this project can be seen here