# Compatibility — rusty-pdfgrep vs upstream `pdfgrep(1)` v2.2.0
Populated during Polish phase. v0.1.0 release.
## Flag Surface
| `-r` / `--recursive` | ✓ | ✓ | ✓ |
| `-R` / `--dereference-recursive` | ✓ | ✗ (deferred to v0.2.0) | ✗ |
| `-n` / `--page-number` | ✓ | ✓ | ✓ |
| `-c` / `--count` | ✓ | ✓ (per-file) | ✓ |
| `-h` / `--no-filename` | ✓ | ✓ | ✓ |
| `-H` / `--with-filename` | ✓ | ✓ | ✓ |
| `-i` / `--ignore-case` | ✓ | ✓ | ✓ |
| `-v` / `--invert-match` | ✓ | ✓ | ✓ |
| `-l` / `--files-with-matches` | ✓ | ✓ | ✓ |
| `-L` / `--files-without-match` | ✓ | ✓ | ✓ |
| `-m N` / `--max-count` | ✓ | ✓ | ✓ |
| `-o` / `--only-matching` | ✓ | ✓ | ✓ |
| `-q` / `--quiet` | ✓ | ✓ | ✓ |
| `-Z` / `--null` | ✓ | ✓ (with `-l`/`-L`) | ✓ |
| `-F` / `--fixed-strings` | ✓ | ✓ | ✓ |
| `-P` / `--perl-regexp` | ✓ (libpcre2) | ✓ (`fancy-regex`) | ✓ |
| `--color` | ✓ | ✓ | ✓ |
| `--page-range N-M` | ✓ | ✓ | ✓ |
| `--include=GLOB` | ✓ | ✓ | ✓ |
| `--exclude=GLOB` | ✓ | ✓ | ✓ |
| `--password PWD` (repeated) | ✓ | ✓ | ✓ |
| `--max-stdin-bytes BYTES` | ✗ | ✓ (BREAKING-CHANGE — default 512 MiB) | ✓ |
| `--password-list FILE` | ✗ | ✗ | ✗ |
| `-w` / `--word-regexp` | ✗ | ✗ | ✗ |
| `-A`/`-B`/`-C` context | ✓ | ✗ (deferred) | ✗ |
| `--cache` | ✓ | ✗ (deferred) | ✗ |
| `--unac` | ✓ | ✗ (deferred) | ✗ |
| `completions <shell>` subcommand | ✗ | ✓ (Default-mode only) | ✗ |
## Behavioral Divergences
### Default-mode (BREAKING-CHANGE)
- Conflicting flag pairs (e.g., `-F` + `-P`) — Default rejects at parse time via clap. Strict uses last-wins (matches upstream).
### `-P` engine
- `fancy-regex` (pure-Rust) instead of libpcre2. Recursive patterns, callouts, conditional patterns diverge. Most common PCRE features (lookaround, named groups, backreferences) work as upstream.
### stdin cap
- 512 MiB default; configurable via `--max-stdin-bytes BYTES`. Upstream buffers unbounded.
### Stream policy
- Match lines → STDOUT (matches upstream)
- Warnings, errors → STDERR (matches upstream)
### Library API
- `PdfGrep`, `PdfGrepBuilder`, `Match` (`#[non_exhaustive]`), `PdfGrepError` (`#[non_exhaustive]`). `default-features = false` strips all CLI deps.