Julien-cpsn/ATAC

Repository files navigation

RustLicense: MITGitHub Release

Demo Animation

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.

Packaging status

crates.io package

Important

First, make sure your rust version is at least 1.82

Simply use:

cargo install atac --locked
Arch package

You can use pacman to install:

pacman -S atac
Homebrew package

Simply use:

brew install atac
Scoop package

Simply use:

scoop install atac
Fedora copr Release

Simply use:

dnf copr enable joxcat/atac
dnf install atac
Docker Image Version

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

GitHub Release

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

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
FeaturesATACPostmanInsomnia
Manage collections & requestsβœ…βœ…βœ…
HTTP Clientβœ…βœ…βœ…
Methodsβœ…βœ…βœ…
- GETβœ…βœ…βœ…
- POSTβœ…βœ…βœ…
- PUTβœ…βœ…βœ…
-βœ…βœ…βœ…
- DELETEβœ…βœ…βœ…
- HEADβœ…βœ…βœ…
- OPTIONSβœ…βœ…βœ…
AuthenticationPartialβœ…βœ…
- Basic authβœ…βœ…βœ…
- Bearer tokenβœ…βœ…βœ…
- JWT, Digest, OAuth1-2, AWS❌ πŸ”œβœ…βœ…
Headersβœ…βœ…βœ…
Bodyβœ…βœ…βœ…
- Multipart formβœ…βœ…βœ…
- URL Encoded formβœ…βœ…βœ…
- Fileβœ…βœ…βœ…
- Plain textβœ…βœ…βœ…
- JSON, XML, HTML, Javascriptβœ…βœ…βœ…
Full responseβœ…βœ…βœ…
- Status codeβœ…βœ…βœ…
- Cookiesβœ…βœ…βœ…
- Headersβœ…βœ…βœ…
- Durationβœ…βœ…βœ…
Scriptingβœ…Partial❌
- Pre-request scriptβœ…βŒβŒ
- Post-request scriptβœ…βœ…βŒ
Asynchronous requestsβœ…βœ…βœ…
Per-request settingsβœ…βœ…βœ…
- Use proxyβœ…βœ…βœ…
- Allow redirectsβœ…βœ…βœ…
- Store cookiesβœ…βœ…βœ…
Export to other languagesβœ…βœ…βŒ
WebSocket Client❌ πŸ”œβœ…βœ…
GraphQL❌ πŸ”œβœ…βœ…
gRPC❌ πŸ”œβœ…βœ…
MQTT❌ πŸ”œβœ…βŒ
Freeβœ…DependsDepends
Lightweight, fast and efficientβœ…βŒβŒ
Data storageYour own committable, readable and versioned files (JSON or YAML)Tied to your accountTied to your account
Offlineβœ…βŒβŒ
Real-time collaboration❌ (not planned)βœ…βœ…
Full command line usageβœ…Partial❌
Environment files and variablesβœ… (committable, readable and versioned)βœ…βœ…
View optionsβœ…βœ…βœ…
Global configuration fileβœ…βœ…βœ…
- HTTP/HTTPS Proxyβœ…βœ…βœ…
- Disable CORSβœ…βŒβŒ
- Toggle syntax highlightingβœ…βŒβŒ
Postman v2.1.0 importβœ…βœ…βœ…
OpenAPI importβœ… (AI generated, prone to bugs)βœ…βœ…
Themesβœ…βœ…βœ…
  • To add

    • Individual request documentation in the TUI (markdown)
    • Insomnia import
  • To improve

    • Editing cookies
    • Request body syntax highlighting
    • Manage multipart Content-type header (auto-generated for now) seanmonstar/reqwest#2259
  • To fix

    • Query parameters bug
  • To add

    • WebSocket requests
    • Maybe GraphQL requests
    • Maybe MQTT requests
    • Maybe gRPC requests
  • To improve

    • Auto-completion on env file variables
  • Base URL property and authorization on collections
  • VScode plugin to see and send requests

Here is the documentation: https://atac.julien-cpsn.com/

If you think something is missing, please contribute!

You can read more about it here: https://.com/Julien-cpsn/ATAC/releases/tag/v0.14.0

Thanks to @NachoNievaG you can have an ATAC floating window inside your nvim https://.com/NachoNievaG/atac.nvim

You can read more about it here: https://.com/Julien-cpsn/ATAC/releases/tag/v0.18.0

  • 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)

Category / LibraryVersionReason
Request
reqwest & reqwest cookie store0.12.12 & 0.8.0Send requests
TUI
ratatui0.29.0Terminal UI framework
crokey1.1.2Used to parse, use key bindings files and some utilities
tui-big-text0.7.1Display big texts. Only used for displaying ATAC in the homepage.
tui-tree-widget0.23.0Display tree-like lists. Used for displaying the collections.
tui-textarea0.7.0Text area that handle a lot of features. Used for editing request body.
throbber-widgets-tui0.8.0Display loading UI elements. Used when request is pending.
ratatui-image8.0.0Display response images.
image0.25.6Decode images.
Main functionalities
syntect5.2.0Syntax highlighting
serde (serde_json, serde-yaml)1.0.217 (1.0.139, 0.9.34)Serialize & Deserialize application data into files
jsonxf1.1.1Pretty print JSON
toml0.8.22Serialize & Deserialize application config files
boa_engine0.20.0Create Javascript runtimes. Used for pre and post request scripts
My fork of postman_collection0.2.3Deserialize Postman collection files
curl-parser0.5.0Parse cURL request files
openapiv32.1.0Parse OpenAPI spec files
clap4.5.38Command Line Argument Parser
directories6.0.0Use system files
arboard3.5.0Copy response body to clipboard
Async
tokio1.45.1Handle asynchronous requests
parking_lot0.12.3Smaller, faster and more flexible implementation of RwLock and Mutex. Used everywhere.
Utils
strum0.27.1Enum facilities
lazy_static1.5.0Allows for more flexible constants. Mainly used for accessing CLI arguments everywhere
nestify0.3.3Used to nest struct definitions
walkdir2.5.0Recursively retrieve files
snailquote0.3.1Unescape string
indexmap2.9.0Ordered hashmap. Used in environments to preserve files' values order
rayon1.10.0Allows the usage of multiple threads in for loops
thiserror2.0.11Create custom errors
anyhow1.0.98Result that can contain any error
clap-verbosity-flag3.0.3Add verbosity flag to the CLI
clap_complete4.5.50Generate completion file
clap_mangen0.2.26Generate man pages
regex1.11.1Regex. Using for parsing requests URL
chrono0.4.41Time utils
uuid1.17.0UUID generator
Tracing/Log
tracing0.1.41Log events
tracing-subscriber0.3.19Utilities for implementing and composing tracing subscribers
tracing-log0.2.0Log crate compatibility for tracing
reqwest-tracing0.5.7Opentracing middleware implementation for reqwest-middleware
reqwest-middleware0.4.2Wrapper around reqwest to allow for client middleware chains

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.

Star History Chart

The MIT license for this project can be seen here

About

A simple API client (postman like) in your terminal

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

    Packages

    No packages published