zapreq 0.1.5

A fast, friendly HTTP client for the terminal
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
# ⚑️ zapreq

> **A blazing fast, developer-friendly HTTP client β€” HTTPie reimagined in Rust, featuring a TUI, a Tauri GUI, Local Regression Testing, and an AI Assistant.**

[![Crates.io](https://img.shields.io/crates/v/zapreq.svg)](https://crates.io/crates/zapreq)
[![CI](https://github.com/MFAIZAN20/zapreq/actions/workflows/ci.yml/badge.svg)](https://github.com/MFAIZAN20/zapreq/actions/workflows/ci.yml)
[![License](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](#license)
[![Rust](https://img.shields.io/badge/rust-stable-orange.svg)](https://www.rust-lang.org)
[![Downloads](https://img.shields.io/crates/d/zapreq.svg)](https://crates.io/crates/zapreq)

`zapreq` is a next-generation API client that installs as a single, lightweight binary. It ships with `http` as a compatibility alias. If you know HTTPie, you already know `zapreq` β€” it features the same clean syntax, but boasts sub-5ms startup times, minimal memory usage, and an ecosystem of local-first tools (TUI, Tauri GUI, Regression Suite, Security Scanner, AI Assistant) that Postman and HTTPie do not ship out of the box.

---

## πŸ—ΊοΈ Table of Contents

- [✨ Core Highlights]#-core-highlights
- [πŸ“¦ Installation]#-installation
- [πŸš€ Quick Start]#-quick-start
- [🧭 Request Items Syntax]#-request-items-syntax
- [🎨 Output Customization]#-output-customization
- [πŸ” Authentication Profiles]#-authentication-profiles
- [πŸ”„ Sessions & Cookie Persistence]#-sessions--cookie-persistence
- [🌐 Environment Profiles]#-environment-profiles
- [πŸ“‚ Hierarchical Collections & Drag-and-Drop]#-hierarchical-collections--drag-and-drop
- [πŸ–₯️ Tauri Desktop GUI]#-tauri-desktop-gui
- [πŸ“Ÿ Terminal TUI]#-terminal-tui
- [πŸ§ͺ API Testing & Regression Suites]#-api-testing--regression-suites
- [πŸ“Š Performance Benchmarking]#-performance-benchmarking
- [πŸ›‘οΈ Local Security Scanner]#-local-security-scanner
- [πŸ“ Local Notes & Revision History]#-local-notes--revision-history
- [πŸ“– API Documentation Generator]#-api-documentation-generator
- [🧠 AI Request Assistant]#-ai-request-assistant
- [βš–οΈ Response Diffing]#-response-diffing
- [πŸ“₯ Resumeable Download Mode]#-resumeable-download-mode
- [βš™οΈ Configuration Reference]#-configuration-reference
- [πŸ”Œ Extension Plugins]#-extension-plugins
- [πŸ“Š zapreq vs. curl vs. HTTPie]#-zapreq-vs-curl-vs-httpie
- [πŸ› οΈ Contributing]#-contributing
- [πŸ“„ License]#-license
- [πŸ—οΈ System Architecture]#️-system-architecture

---

## πŸ—οΈ System Architecture

The following diagram illustrates how the `zapreq` CLI, terminal TUI, and Tauri desktop GUI interface with the core request engine, security scanners, test runners, and local SQLite/JSON storage:

```mermaid
graph TD
    %% Define Styles
    classDef ui fill:#4f46e5,stroke:#312e81,color:#ffffff,stroke-width:2px;
    classDef engine fill:#10b981,stroke:#065f46,color:#ffffff,stroke-width:2px;
    classDef db fill:#f59e0b,stroke:#78350f,color:#ffffff,stroke-width:2px;
    classDef ext fill:#6b7280,stroke:#374151,color:#ffffff,stroke-width:2px;

    %% Nodes
    subgraph UI ["User Interfaces (Rust/Tauri)"]
        CLI["CLI Command Line"]:::ui
        TUI["Terminal TUI (ratatui)"]:::ui
        GUI["Tauri Desktop App (React/TS)"]:::ui
    end

    subgraph Core ["Core Request & Analysis Engine (Rust Lib)"]
        ReqEngine["Request Engine (reqwest)"]:::engine
        Tester["Test & Assertions Engine"]:::engine
        Scanner["Security Scanner"]:::engine
        Benchmarker["Performance Benchmarker"]:::engine
        AIAssistant["AI Prompt Parser"]:::engine
    end

    subgraph Data ["Local Storage (Local-First)"]
        Config["config.json & Envs"]:::db
        Sessions["Session Cookie Jars"]:::db
        SQLite["SQLite DB (Notes, Reports, History)"]:::db
    end

    subgraph Ext ["External Systems"]
        TargetAPI["Target API Endpoint"]:::ext
        AIService["AI API Endpoint"]:::ext
        Schemas["Postman / OpenAPI Files"]:::ext
    end

    %% Relations
    CLI --> ReqEngine
    TUI --> ReqEngine
    GUI <--> |Tauri IPC Commands| ReqEngine

    ReqEngine --> |HTTP Calls| TargetAPI
    ReqEngine <--> Sessions
    
    TUI & GUI & CLI <--> SQLite
    Tester & Scanner & Benchmarker & AIAssistant --> ReqEngine
    
    AIAssistant --> |LLM Prompts| AIService
    
    Tester --> SQLite
    Scanner --> SQLite
    Benchmarker --> SQLite
    
    CLI & TUI & GUI <--> Config
    
    GUI <--> |Import/Export| Schemas
```

---

## ✨ Core Highlights

* **Single Native Binary (~3 MB):** Zero Python dependencies, virtual environments, or Node runtimes. 
* **⚑️ Sub-5ms Startup Time:** Instantly fires requests. HTTPie takes ~200ms due to Python interpreter overhead.
* **πŸ“‚ Hierarchical Workspaces:** Organise requests into collapsible folder structures using `/` delimiters, with full interactive drag-and-drop support in the Tauri GUI.
* **πŸ§ͺ Local Test Automation:** Write API assertions (`--expect-status`, `--expect-json`) directly in the shell and run recursive test suites with a visual history dashboard.
* **πŸ›‘οΈ Security First:** Local-first static and live scanning for sensitive headers, exposed credentials, missing HTTPS transport, and overly permissive APIs.
* **🧠 AI-Powered Execution:** Generate requests and explain execution paths using natural language descriptions powered by LLMs.
* **πŸ“Ÿ Multi-modal:** Fluidly transition between raw **CLI commands**, a keyboard-driven terminal **TUI**, or a modern **Desktop GUI** sharing the same local database.

---

## πŸ“¦ Installation

### Cargo (Rust Toolchain)
```bash
cargo install zapreq
```

### Binary Downloads
Pre-built binaries for Linux, macOS (x86_64 + Apple Silicon), and Windows are attached to every [GitHub release](https://github.com/MFAIZAN20/zapreq/releases). Download the binary and place it in your system `PATH`.

### Package Managers

```bash
# Arch Linux (AUR)
yay -S zapreq

# macOS or Linux (Homebrew Tap)
brew tap MFAIZAN20/zapreq
brew install zapreq
```

---

## πŸš€ Quick Start

```bash
# 1. Simple GET request
zapreq GET https://httpbin.org/get

# 2. POST request with JSON payload (inferred from arguments)
zapreq POST https://httpbin.org/post name="Faizan" age:=22 active:=true

# 3. Form-encoded payload
zapreq --form POST https://httpbin.org/post username=faizan status=active

# 4. Custom Request Headers & Query Parameters
zapreq GET https://httpbin.org/get X-API-Token:secretKey page==2 limit==10

# 5. HTTP Digest Authentication (includes automatic 401 challenge retry)
zapreq --auth-type digest --auth user:pass https://httpbin.org/digest-auth/auth/user/pass

# 6. Save a request into a Collection Workspace
zapreq requests save api-v1 get-user -- GET https://api.example.com/users/{USER_ID}
```

---

## 🧭 Request Items Syntax

`zapreq` uses positional arguments after the URL to define query params, headers, and body payloads. The operator character determines the data type.

| Operator | Syntax Type | Example | Compiled Output |
|---|---|---|---|
| `:` | Request Header | `X-Custom-Header:value` | `X-Custom-Header: value` |
| `=` | String Body Field | `username=faizan` | `"username": "faizan"` |
| `:=` | Raw JSON Field | `items:=["a", "b"]` | `"items": ["a", "b"]` |
| `==` | Query Parameter | `search==rust` | `?search=rust` |
| `@` | File Upload | `avatar@/tmp/avatar.png` | Multipart form file |
| `@` with MIME | File with MIME | `data@/tmp/data.bin;type=application/octet-stream` | Explicit MIME file attachment |
| `=@` | String Field from File | `pubkey=@~/.ssh/id_ed25519.pub` | File content read as string |
| `:=@` | JSON Field from File | `config:=@/tmp/config.json` | File content parsed as JSON |

> πŸ’‘ **Precedence Order:** Operator parsing evaluates from left to right with strict precedence: `:=` / `:=@` βž” `==` βž” `:` βž” `=` / `=@` βž” `@`.

---

## 🎨 Output Customization

Fine-tune output verbose levels, syntax themes, and color formatting.

```bash
# Print response headers only (useful for status checks)
zapreq --print=h GET https://httpbin.org/get

# Print request + response headers (no body payload)
zapreq --print=Hh GET https://httpbin.org/get

# Print full details (Request headers/body + Response headers/body)
zapreq --verbose GET https://httpbin.org/get

# Change color theme (supported: monokai, solarized, dracula, autumn)
zapreq --style=dracula GET https://httpbin.org/json

# Format output summary line (Status code, latency, content length)
zapreq --summary GET https://httpbin.org/get
```

### `--print` Flags Matrix
Combine these flags together (e.g. `--print=Hb`):
* `H`: Request headers
* `B`: Request body payload
* `h`: Response headers
* `b`: Response body payload

---

## πŸ” Authentication Profiles

`zapreq` provides comprehensive authentication protocols. Passed credentials are automatically masked as `****` in `--verbose` outputs.

```bash
# HTTP Basic Auth (default type)
zapreq --auth admin:super_secret https://api.example.com/me

# OAuth2 / Bearer Token
zapreq --auth-type bearer --auth "eyJhbGciOi..." https://api.example.com/me

# HTTP Digest Auth (RFC 7616 - supports MD5 & SHA-256 with handshake sequence)
zapreq --auth-type digest --auth admin:password https://api.example.com/protected
```

---

## πŸ”„ Sessions & Cookie Persistence

Sessions serialize cookie jars, headers, and authentication parameters locally, allowing you to persist API state between independent CLI invocations. Sessions are saved in `~/.config/zapreq/sessions/{hostname}/{session_name}.json`.

```bash
# Authenticate and initialize a session named 'dev-user'
zapreq --session dev-user POST https://api.example.com/login username=faizan password=secret

# Subsequent requests automatically load and write back updated cookie updates
zapreq --session dev-user GET https://api.example.com/dashboard

# Load session in read-only mode (prevents updating the cookie jar on response)
zapreq --session-read-only dev-user GET https://api.example.com/analytics
```

---

## 🌐 Environment Profiles

Easily manage variables across environmental configurations (`dev`, `staging`, `prod`). Profiles are JSON files saved in `~/.config/zapreq/envs/{profile_name}.json`.

### Example Profile File (`prod.json`)
```json
{
  "base_url": "https://api.production.internal",
  "headers": {
    "X-Client-Version": "4.2"
  },
  "variables": {
    "USER_ID": "893",
    "ROLE": "admin"
  }
}
```

### CLI Substitution
Tokens matching `{KEY}` in the URL or request parameters are replaced dynamically:
```bash
zapreq --env-profile prod GET /users/{USER_ID}/permissions role={ROLE}
```

---

## πŸ“‚ Hierarchical Collections & Drag-and-Drop

Organize saved API requests in namespaces and folder hierarchies. Workspaces store requests under named aliases in a local database.

### Command Line Workspace Actions
```bash
# Create a new workspace
zapreq collections new payments

# Save a request under a hierarchical folder segment path (using `/` delimiters)
zapreq requests save payments "Billing / Invoices / Get Invoice" -- GET https://api.example.com/invoices/{ID}

# List all requests in a workspace
zapreq requests list payments

# Run a saved request (replaces tokens dynamically)
zapreq requests run payments "Billing / Invoices / Get Invoice" ID=56
```

### Drag-and-Drop Organizing
In the Tauri Desktop GUI, folders and request nodes are displayed in a clean directory tree. You can drag and drop request items to relocate them between folders or drag them to the root panel zone. Moving requests automatically updates their database path names. Empty folders are tracked and preserved on screen when child elements are moved or deleted.

---

## πŸ–₯️ Tauri Desktop GUI

Open the fully integrated desktop interface by running `zapreq` without subcommands or calling `gui` explicitly:

```bash
zapreq
# or
zapreq gui
```

### GUI Key Capabilities:
* **Multi-pane Layout:** Workspace directory tree (left), Request Editor & tabbed controls (center), Response Viewer (right).
* **Workspace Management:** Interactive creation, migration, import, and export of workspace definitions (Zapreq, Postman, and OpenAPI schemas supported).
* **Tabs-based Request Builders:** Dedicated visual sections for query parameters, custom headers, body fields (JSON, URL Form, Multipart, Raw File), script editors, and authorization.
* **Regression Suites Tab:** Run automated test suites sequentially with visual progress bars and live status feedback.
* **Interactive Summary Dashboard:** A homepage view featuring an animated SVG Donut Chart showing test pass/fail distributions and a scrollable feed of recent request runs with latency metrics.

---

## πŸ“Ÿ Terminal TUI

For keyboard-first developers, `zapreq` includes a full-featured terminal workspace TUI built in Rust:

```bash
zapreq tui
```

It supports workspace switching, interactive request running, headers/body tab toggle, and environment variable expansions using native terminal widgets.

---

## πŸ§ͺ API Testing & Regression Suites

Perform automated assertions on API responses. Test suites and execution history are stored in a local SQLite file.

### CLI Ad-hoc Assertions
```bash
# Assert HTTP status and header patterns
zapreq test --expect-status 200 --expect-header content-type~json -- GET https://httpbin.org/json

# Assert nested JSON keys using dot-notation syntax
zapreq test --expect-json slideshow.slides[0].title="Wake up!" -- GET https://httpbin.org/json
```

### Local Regression Suites
Create test suites and cases to execute multiple requests in sequence.

```bash
# Add a regression test case linking to a saved workspace request
zapreq regression add smoke-tests check-auth --workspace payments --request "Billing / Get Token" --expect-status 200

# List cases in a suite
zapreq regression list --suite smoke-tests

# Run a suite
zapreq regression run smoke-tests

# Inspect test history for a specific case
zapreq regression history smoke-tests check-auth
```

---

## πŸ“Š Performance Benchmarking

Benchmark endpoint response times and latencies locally.

```bash
# Run a request 100 times in sequence to measure latency metrics
zapreq perf benchmark --alias get-users --iterations 100

# Benchmark a workspace over a specific duration (runs continuously for 30s)
zapreq perf benchmark --workspace payments --duration-secs 30
```

### Benchmark Metrics Tracked:
* **Iterations & Success Rate:** Number of executions, HTTP 2xx vs. 4xx/5xx status rates, and network errors.
* **Latency Distribution:** $min$, $p50$ (median), $p95$ (tail latency), $p99$, and $max$ execution times in milliseconds.
* **Payload Size Analysis:** Total headers and body size processed.

---

## πŸ›‘οΈ Local Security Scanner

Scan saved requests, imported schemas, or live endpoints to check for security vulnerabilities.

```bash
# Scan a specific saved command alias
zapreq security scan --alias login-api

# Scan an entire workspace for vulnerabilities with a severity filter
zapreq security scan --workspace staging --severity high

# Perform a live active scan (executes safe GET/HEAD requests to check live response headers)
zapreq security scan --alias fetch-profile --live
```

### Issues Scanned & Flagged:
* **HTTPS Transport:** Flag requests communicating over unencrypted `http://`.
* **Credential Exposure:** Detect secrets, API keys, private keys, or passwords saved inside request text fields.
* **Sensitive Query Parameters:** Warn against sending tokens or credentials in the URL query string.
* **Missing Security Headers:** Detect absence of `Content-Security-Policy`, `X-Content-Type-Options`, `Strict-Transport-Security`, etc., during live checks.
* **Excessive Data Exposure:** Analyzes live payloads for potential over-fetching of sensitive user metadata.

---

## πŸ“ Local Notes & Revision History

Document your endpoints directly inside `zapreq` with local notes linked to aliases, workspaces, or requests. Notes keep a local version history in SQLite.

```bash
# Add a note with tags
zapreq notes add --alias get-users --title "Authentication Required" --tag security "Requires a valid JWT token. Token expires every 2 hours."

# List and search notes
zapreq notes list --query JWT

# View note edit revisions
zapreq notes history 1
```

---

## πŸ“– API Documentation Generator

Generate documentation files locally from workspace definitions.

```bash
# Generate clean Markdown documentation
zapreq docs generate --workspace payments --format markdown --output ./docs.md

# Generate static HTML API documentation
zapreq docs generate --workspace payments --format html --output ./dist/docs.html

# Export workspace schema as an OpenAPI 3.0 specification file
zapreq docs generate --workspace payments --format openapi --output ./openapi-spec.json
```

---

## 🧠 AI Request Assistant

Translate plain English prompts into runnable HTTP commands using LLMs. Provide your OpenAI-compatible endpoint key:

```bash
export ZAPREQ_AI_KEY=sk-...
```

```bash
# Describe a request in natural language (defaults to dry-run verification mode)
zapreq ai "GET https://api.github.com/repos/MFAIZAN20/zapreq with User-Agent header"

# Generate and immediately send the request
zapreq ai "POST request to https://httpbin.org/post with username Faizan" --send

# Explain how the generated command was built
zapreq ai "GET users limit 5" --explain
```

---

## βš–οΈ Response Diffing

Flatten two JSON response payloads and compare them side by side. Highlights differences in keys, structure types, and values.

```bash
zapreq diff https://api.example.com/v1/users/1 https://api.example.com/v2/users/1
```

### Example Visual Diff Output
```diff
A: GET https://api.example.com/v1/users/1  β†’  200 OK
B: GET https://api.example.com/v2/users/1  β†’  200 OK

   id          1
   name        "Faizan"
-  role        "admin"            (only in A)
+  privilege   "super_admin"      (only in B)
~  updated_at  "2026-01-01"  βž”  "2026-06-18"
```

---

## πŸ“₯ Resumeable Download Mode

Download large files from the command line with standard visual progress indicators.

```bash
# Download file, saving to current directory
zapreq --download https://example.com/large-bundle.iso

# Continue/resume a partial download
zapreq --download --continue --output bundle.iso https://example.com/large-bundle.iso
```

---

## βš™οΈ Configuration Reference

Configuration parameters are stored in `~/.config/zapreq/config.json`.

```json
{
  "default_options": ["--style=dracula"],
  "default_scheme": "https",
  "plugins_dir": "~/.config/zapreq/plugins",
  "output_theme": "dracula",
  "pretty": "all",
  "verify": true
}
```

| Config Parameter | Value Type | Default Value | Description |
|---|---|---|---|
| `default_options` | `string[]` | `[]` | CLI flags prepended before every command execution |
| `default_scheme` | `string` | `"https"` | HTTP scheme assumed when URL lacks scheme prefix |
| `plugins_dir` | `string` | `"~/.config/zapreq/plugins"` | Path scanned for TOML plugin definitions |
| `output_theme` | `string` | `"monokai"` | Syntax highlighting style theme |
| `pretty` | `string` | `"all"` | Formatting mode (`all`, `colors`, `format`, `none`) |
| `verify` | `boolean` | `true` | Enable/disable TLS certificate verification checks |

---

## πŸ”Œ Extension Plugins

`zapreq` discovers external plugins via TOML manifests located in `plugins_dir`.

### Example Plugin Manifest (`aws-hmac.toml`)
```toml
[plugin]
name        = "aws-hmac"
version     = "1.2.0"
description = "AWS Signature Version 4 Signing"
auth_types  = ["aws"]
executable  = "./aws-hmac-plugin"
```

### Plugin CLI Commands
```bash
# List all registered plugins
zapreq plugins list

# Verify plugin manifest configuration and permissions
zapreq plugins validate

# Run a plugin binary manually
zapreq plugins run aws-hmac -- --help
```

---

## πŸ“Š zapreq vs. curl vs. HTTPie

| Capability | `curl` | HTTPie | `zapreq` |
|---|---|---|---|
| **Syntax Style** | Verbose / Low-level | Clean / Developer-focused | Clean / Developer-focused |
| **Startup Overhead** | Minimal (< 3ms) | Slow (~200ms) | **Minimal (< 5ms)** |
| **Dependencies** | None (C library) | Python Runtime (~15MB) | **None (Self-contained binary)** |
| **Named Sessions** | ❌ | βœ… | **βœ…** |
| **Tauri Desktop GUI** | ❌ | ❌ | **βœ… (`zapreq gui`)** |
| **Terminal TUI Interface** | ❌ | ❌ | **βœ… (`zapreq tui`)** |
| **Regression Testing** | ❌ | ❌ | **βœ… (`zapreq test` / `regression`)** |
| **Performance Benchmarks** | ❌ | ❌ | **βœ… (`zapreq perf`)** |
| **Local SQLite DB** | ❌ | ❌ | **βœ… (Reports, Notes, History)** |
| **AI Assistant** | ❌ | ❌ | **βœ… (`zapreq ai`)** |
| **Response Diffing** | ❌ | ❌ | **βœ… (`zapreq diff`)** |

---

## πŸ› οΈ Contributing

1. Clone the repository:
   ```bash
   git clone https://github.com/MFAIZAN20/zapreq.git
   cd zapreq
   ```
2. Run unit and integration tests:
   ```bash
   cargo test --all
   ```
3. Run code formatting and lint checkers:
   ```bash
   cargo fmt --all
   cargo clippy --all-targets --all-features -- -D warnings
   ```
4. Build release binaries:
   ```bash
   cargo build --release
   ```

---

## πŸ“„ License

Licensed under either of the following, at your option:
* **MIT License** ([LICENSE-MIT]LICENSE-MIT)
* **Apache License, Version 2.0** ([LICENSE-APACHE]LICENSE-APACHE)

Standard Rust ecosystem dual licensing applies.

Copyright Β© 2026 Muhammad Faizan. All rights reserved.