# HTTPie CLI: no install command in the repo, a Makefile that greps its own version

> HTTPie is a command-line HTTP client for testing and debugging APIs, with a README that hands installation and the full feature list to a website rather than to the repository. What the repository does contain is a nine line feature summary, four runnable examples, distro packaging manifests, and a Makefile that derives the version by grepping a constant out of the package.

**httpie/cli** — GitHub describes it as 🥧 HTTPie CLI , modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more.. The repository metadata lists Python as its primary language. The metadata lists the BSD-3-Clause license. This article stays within the project description and details documented in the GitHub repository README.

- Repository: https://github.com/httpie/cli
- Website: https://httpie.io
- Stars: 38,598 · Forks: 4,010
- Language: Python
- License: BSD-3-Clause
- Published: 2026-08-13 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/httpie-cli

## The README has no install command and points at a website

The getting started section is two links and nothing else: installation instructions at httpie.io/docs#installation, and full documentation at httpie.io/docs. There is no pip command, no shell snippet, and no version requirement anywhere in the file. The same pattern runs through the feature list, which is nine items long and closes with a link labelled see all features pointing back at the docs site.

The repository is not empty of installation machinery, it just does not document it here. The root carries snapcraft.yaml for a Snap package and .packit.yaml for Fedora packaging, the badges link a PyPI project page, and the Makefile contains a full development install path. So three acquisition channels exist, distro packages, PyPI, and a source build, and the README names none of them.

The consequence is that you cannot answer how to install HTTPie from a clone of the repository, and you cannot enumerate what the client supports without network access, because the authoritative feature list is the website rather than the file you just read.

## `--offline` builds the request without sending it

One of the four examples is the safe one:

```bash
http --offline pie.dev/post hello=offline
```

Offline mode builds and prints the request instead of transmitting it, which is the only way in the file to see exactly what a command would put on the wire. It sits third in the example list, after two commands that do send traffic.

The consequence is that the mode you want on day one, when you are learning the syntax and do not yet know what a command does, is the mode that is easy to miss. A newcomer copying the first two examples sends real requests to httpie.io and to pie.dev before reading about the flag that would have shown them the same thing locally. Anyone pointing HTTPie at a third party endpoint should reach for --offline first, because the syntax is short enough that a mistyped field name becomes a live request rather than a printed one.

## Three of the four examples send traffic somewhere real

The examples are short, which is the point, and two of them end in a request against someone else's server. The first is a plain GET:

```bash
https httpie.io/hello
```

The second sets a method, a header, and a data field in one line:

```bash
http PUT pie.dev/put X-API-Token:123 name=John
```

The fourth posts a comment to a real GitHub issue, which is also the authentication example:

```bash
http -a USERNAME POST https://api.github.com/repos/httpie/cli/issues/83/comments body='HTTPie is awesome! :heart:'
```

The consequence is that the documentation teaches by transmitting. The GitHub example carries a literal placeholder, USERNAME, so copying it verbatim gets you an authentication failure rather than a comment, and a reader who substitutes a real token is writing to a stranger's issue thread. The inline data syntax, name=John and X-API-Token:123, is the genuinely transferable part of these lines, and it can be practised against --offline with no network at all.

## The version is one constant that the Makefile greps for

The packaging story is unusual enough to be worth reading. setup.py contains no metadata at all:

```
from setuptools import setup

setup()
```

Everything is in setup.cfg, and the version is not in either file. The Makefile defines it by reading the source:

```
VERSION=$(shell grep __version__ httpie/__init__.py)
```

The consequence is that one line in httpie/__init__.py is the single source of truth for the package version, the Makefile variable, and whatever the release tag is expected to match. Change it and all three move together, which keeps contributors from editing three files, and it also means the repository has no place to record a mismatch when a release is tagged from a commit whose constant was not bumped.

## The Makefile builds a venv and puts it first on PATH

Running make with no arguments prints a task list rather than building anything, because the default target is list-tasks. The build chain is all: uninstall-httpie install test, and install resolves to venv followed by install-reqs. The requirements step upgrades pip, wheel, and build, installs the dev and test extras, and then installs the package itself in editable mode with --editable .

The venv is fixed at venv with a bin directory under it, and the Makefile exports PATH with that bin directory prepended. A comment notes that SYSTEM_PYTHON=python3 is only used to create that venv.

The consequence is that the PATH export decides which pip and which python any command you run next resolves to, inside a shell where make has already run, and that the entry point is --editable, so your checkout is what gets imported. Contributors are expected to read CONTRIBUTING.md, which the Makefile header points at twice, and the build is opinionated enough that changing the venv location means editing the Makefile rather than passing a flag.

## The repository lost its stars and says so in the first screen

Above the getting started links there is a section headed We lost 54k GitHub stars. It states that the repository was accidentally made private for a moment, that GitHub deleted a community which took a decade to build, and it points at httpie.io/blog/stardust for the full account.

The consequence is that every popularity signal attached to this project is a recovery artefact rather than a measurement. A star count, a watcher count, and a decade of accumulated community history are not describing the current project, and an evaluator who treats a large number as evidence of momentum is reading a number that was lost to an accident and put back under different rules. Support does not live in the repository either: the Discord, the Twitter account, the Stack Overflow tag, and the newsletter are all listed here and none of them is a place where the code's history can be read.

## No commit since 2024-12-17 and no release since 3.2.4

The repository is not marked archived, and the last push is dated 2024-12-17. The most recent release is 3.2.4, dated 2024-11-01, roughly six weeks before that last commit. Before it came 3.2.3 in July 2024 and 3.2.2 in May 2023, so the gap between the second and third of those releases was over a year while the most recent pair is closer together.

The consequence is that the client you install from PyPI is the 3.2.4 build and there is no development after it in this repository, so anyone expecting bug fixes or platform work to be arriving is looking at the wrong place. What changed between versions is recorded in the CHANGELOG.md at the root rather than in the README, which means the file most people read first cannot answer whether a behaviour they rely on was changed. A CHANGELOG in the tree and a release page are the two places left to check, and both require you to already know the version you are running.

## Conclusion

HTTPie fits someone who wants readable requests in a terminal and a response with colour and formatting already applied, and it is a good fit for scripting against an API you control. It does not fit a team that needs its tooling documented inside the repository it clones, since installation lives on a website, and it does not fit anyone expecting an active upstream, because nothing has been committed since 2024-12-17. Before you adopt it, read the installation page rather than the README, check the changelog for what changed after 3.2.4, and try the offline flag first so your first command does not send traffic to a third party endpoint.

## FAQ

### How do I install HTTPie?

The README contains no install command. It links installation instructions to httpie.io/docs#installation and the full documentation to httpie.io/docs, and its badges point at a PyPI project page. The repository itself also carries snapcraft.yaml and .packit.yaml for distro packaging, and a Makefile with a development install path.

### What are the key differences between cURL and HTTPie?

The README makes no comparison and quotes no benchmark. It states the goal as making CLI interaction with web services as human-friendly as possible, and the differences it does name are expressive syntax, formatted and colorized terminal output, built-in JSON support, forms and file uploads, persistent sessions, custom headers, and wget-like downloads.

### Is HTTPie open source?

Yes. The repository carries a LICENSE file at its root and is released under BSD-3-Clause, with the package source in the httpie directory and releases published on GitHub. The most recent release listed is 3.2.4.

### how to use httpie cli

The http and https commands create and send arbitrary requests with simple syntax and formatted, colorized output. Data fields are written as name=John, headers as X-API-Token:123, and the method as a bare word such as PUT before the URL, so http PUT pie.dev/put X-API-Token:123 name=John sends a PUT with a header and a field.

### httpie cli alternative

The README names no alternative client and makes no comparison to one. What it describes is its own feature set: expressive and intuitive syntax, formatted and colorized terminal output, built-in JSON support, forms and file uploads, HTTPS, proxies and authentication, arbitrary request data, custom headers, persistent sessions, and wget-like downloads, with the full list held on the docs site rather than in the repository.

## Sources

- [Official documentation](https://httpie.io)
- [Official README](https://github.com/httpie/cli#readme)
- [Project repository](https://github.com/httpie/cli)
- [Release notes](https://github.com/httpie/cli/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/httpie-cli
