The Problem
You want to POST some JSON. Here's cURL:
Here's rick:
That's it. That's the whole pitch.
What's New in v0.3.0
Colors & Typography — rick now has beautiful terminal output:
- JSON syntax highlighting — Keys, strings, numbers, booleans all in distinct colors
- Colored HTTP status codes — Green (2xx), Yellow (3xx), Red (4xx/5xx)
- Method colors — GET=green, POST=blue, PUT/PATCH=yellow, DELETE=red
- Progress indicators — Spinner during requests, progress bar for large downloads
- Smart color detection — Auto-disables for pipes/CI, respects
NO_COLORenv
# Pretty JSON with colors (automatic when outputting to terminal)
# Force pretty-print without colors
# Verbose mode shows colored request/response flow
Installation
Pre-built binaries (recommended)
Download the latest release for your platform:
# macOS (Apple Silicon)
|
# macOS (Intel)
|
# Linux (x86_64)
|
# Linux (ARM64)
|
Or download manually from Releases.
From source
Cargo
Quick Start
# GET request (with JSON syntax highlighting!)
# POST JSON (the killer feature)
# Custom headers
# Save response to file (with progress bar for large files)
# See what's happening (colored request/response)
Why rick?
1. --json flag
The single feature that justifies rick's existence.
# cURL (pain)
# rick (joy)
2. Beautiful output
JSON responses are automatically syntax-highlighted. Status codes are colored. Errors come with helpful hints.
3. Smart defaults
| Behavior | cURL | rick |
|---|---|---|
| Follow redirects | No (-L to enable) |
Yes (--no-follow to disable) |
| POST when data provided | No (-X POST required) |
Yes (auto-detected) |
| Colored output | No | Yes (auto-detected) |
4. HTTP-focused
cURL supports 25+ protocols (FTP, LDAP, SMTP, Gopher...). rick supports HTTP and HTTPS. That's it. This keeps the codebase simple, the binary small, and the mental model clear.
5. Zero dependencies
Single static binary. No OpenSSL. No system libraries. Download and run.
Usage
rick [OPTIONS] <URL>
Arguments:
<URL> URL to request
Options:
-X, --method <METHOD> HTTP method (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)
-H, --header <HEADER> Add header (can be used multiple times)
-d, --data <DATA> Request body
--json <JSON> JSON body (sets Content-Type & Accept automatically)
-o, --output <FILE> Write response to file
-i, --include Show response headers
-v, --verbose Show request and response headers
--no-follow Don't follow redirects
--pretty Pretty print JSON response
--color <MODE> Color mode: auto, always, never [default: auto]
--no-color Disable colors (same as --color=never)
-h, --help Print help
-V, --version Print version
Examples
GET request
POST with form data
POST JSON
Custom headers
PUT request
Download file
Debug request/response
# > GET https://httpbin.org/get HTTP/1.1 (green GET)
# >
# < HTTP/1.1 200 OK (green 200)
# < content-type: application/json
# ...
Include response headers
# HTTP/1.1 200 OK
# content-type: application/json
# ...
#
# {"args": {}, ...}
Disable colors for piping
# Automatic (colors disabled when piping)
|
# Explicit
# Or use NO_COLOR environment variable
NO_COLOR=1
vs cURL
| Feature | cURL | rick |
|---|---|---|
| JSON POST | -H "Content-Type: application/json" -d '{}' |
--json '{}' |
| Follow redirects | Need -L |
Default behavior |
| Auto-detect POST | Need -X POST |
Automatic with -d/--json |
| Colored output | No | Yes (automatic) |
| JSON highlighting | No | Yes |
| Progress bars | Basic | Modern with ETA |
| Protocols | 25+ | HTTP(S) only |
| Binary size | ~540 KB (dynamic) | ~7 MB (static) |
| Dependencies | OpenSSL, libcurl, etc. | None |
When to use cURL instead
- You need FTP, SFTP, SCP, or other protocols
- You need advanced features (cookies file, netrc, proxy auth)
- You're writing a shell script that must work everywhere
- Binary size is critical
When to use rick
- 99% of your API testing
- You're tired of the JSON header dance
- You want sane defaults
- You want beautiful terminal output
- You want a single static binary
Name
rick = Rust Integrated Curl + K (for fun)
Yes, it should be "ric" but that looked weird.
Design Philosophy
- Optimize for the common case — JSON APIs are everywhere, make them easy
- Respect muscle memory — Keep familiar flags (
-H,-d,-o,-v,-i,-X) - Modern defaults — Follow redirects, auto-detect methods, colorful output
- Do one thing well — HTTP only, no feature creep
See DECISIONS.md for detailed design rationale.
Building from source
# Clone
# Build
# Run tests
# Install locally
Requirements
- Rust 1.75 or later
- That's it
Contributing
Contributions are welcome! Please read the guidelines:
- Keep it simple — rick is intentionally minimal
- Discuss first — Open an issue before adding features
- Document decisions — Update DECISIONS.md for non-trivial changes
# Format code
# Run clippy
# Run tests
Roadmap
We're actively developing rick. Here's what's coming:
| Version | Focus | Status |
|---|---|---|
| v0.3.0 | Colors & Typography | Done |
| v0.4.0 | Performance & Benchmarks | Up next |
| v0.5.0 | Quality of Life | Planned |
| v0.6.0 | Advanced Features | Planned |
v0.4.0 Highlights (Up Next)
- Benchmark suite against cURL
--timeflag to show request duration- Response time breakdown (DNS, connect, TLS, first byte)
Want to contribute? Check out ROADMAP.md for the full plan and pick something to work on!
Not planned: Other protocols, cookie jars, feature parity with cURL.
License
MIT License — do whatever you want.