# IPATool Output Formats: Text and JSON Support Explained

> Discover IPATool output formats. Learn how to leverage both human-readable text and machine-readable JSON for your data processing needs using the --format flag.

- Repository: [Majd/ipatool](https://github.com/majd/ipatool)
- Tags: api-reference
- Published: 2026-09-01

---

**IPATool supports two output formats: human-readable text (default) and machine-readable JSON, controlled via the global `--format` flag.**

The open-source command-line utility [majd/ipatool](https://github.com/majd/ipatool) enables users to search, download, and inspect iOS app packages from the App Store. Understanding the available IPATool output formats allows developers to integrate the tool seamlessly into shell scripts, CI/CD pipelines, and automation workflows.

## Supported Output Formats

IPATool defines its output behavior through the `OutputFormat` enum in [`cmd/output_format.go`](https://github.com/majd/ipatool/blob/main/cmd/output_format.go). The implementation recognizes two distinct presentation modes:

### Text Format (Default)

The **text** format produces plain, human-readable output optimized for interactive terminal sessions. This is the default behavior when you run any command without specifying the `--format` flag. The text logger, instantiated in `newLogger` within [`cmd/common.go`](https://github.com/majd/ipatool/blob/main/cmd/common.go), formats log entries with colors and padding for readability.

### JSON Format

The **JSON** format emits structured, machine-readable JSON objects suitable for programmatic consumption. This format is ideal for piping results into tools like `jq` or for processing by downstream applications. When enabled, the JSON logger in [`cmd/common.go`](https://github.com/majd/ipatool/blob/main/cmd/common.go) serializes output as compact JSON without terminal formatting.

## How to Specify the Output Format

The output format is controlled by the persistent `--format` (or `-f`) flag defined in [`cmd/root.go`](https://github.com/majd/ipatool/blob/main/cmd/root.go). This flag accepts either `text` or `json` as values.

```bash

# Use default text output

ipatool search --term "MyApp"

# Explicitly request JSON output

ipatool search --term "MyApp" --format json

# Short flag syntax

ipatool download --bundle-id com.example.app -f json

```

## Source Code Implementation

According to the majd/ipatool source code, the output format switching logic spans three primary files:

- **[`cmd/output_format.go`](https://github.com/majd/ipatool/blob/main/cmd/output_format.go)**: Declares the `OutputFormat` enum with constants `OutputFormatText` and `OutputFormatJSON`, and implements the `UnmarshalText` method for parsing user input.
- **[`cmd/root.go`](https://github.com/majd/ipatool/blob/main/cmd/root.go)**: Registers the global `--format` flag and binds it to the configuration, making it available to all subcommands.
- **[`cmd/common.go`](https://github.com/majd/ipatool/blob/main/cmd/common.go)**: Contains the `newLogger` function that selects between a text logger (zerolog ConsoleWriter) and a JSON logger (zerolog JSON output) based on the `OutputFormat` setting.

## Summary

- IPATool supports **text** and **JSON** output formats.
- The default format is **text**, optimized for human readability.
- Use `--format json` or `-f json` to enable machine-readable JSON output.
- The format configuration is handled by the `OutputFormat` enum in [`cmd/output_format.go`](https://github.com/majd/ipatool/blob/main/cmd/output_format.go) and applied via `newLogger` in [`cmd/common.go`](https://github.com/majd/ipatool/blob/main/cmd/common.go).
- Invalid format values trigger an error and fallback behavior as implemented in the enum's unmarshaling logic.

## Frequently Asked Questions

### What is the default output format in IPATool?

The default output format is **text**. When you execute commands without the `--format` flag, IPATool uses the text logger to produce human-readable output with terminal-friendly formatting. This behavior is hardcoded in the `newLogger` function in [`cmd/common.go`](https://github.com/majd/ipatool/blob/main/cmd/common.go) when no format override is specified.

### How do I enable JSON output in IPATool?

Pass the `--format json` or `-f json` flag to any command. This setting instructs the `newLogger` function in [`cmd/common.go`](https://github.com/majd/ipatool/blob/main/cmd/common.go) to instantiate a JSON logger instead of the default text logger, serializing all output as compact JSON objects suitable for parsing.

### Can IPATool output formats be used in automation scripts?

Yes. The **JSON format** is specifically designed for automation. You can pipe JSON output to utilities like `jq` to extract specific fields, or redirect it to files for processing in CI/CD pipelines. For example: `ipatool search --term "App" --format json | jq '.[0].bundleID'`.

### What happens if I specify an invalid output format?

If you provide an unsupported format string (anything other than `text` or `json`), the `UnmarshalText` method in [`cmd/output_format.go`](https://github.com/majd/ipatool/blob/main/cmd/output_format.go) returns an error and IPATool falls back to JSON output while indicating the invalid selection. This ensures the tool remains usable even with malformed input flags.