Metadata-Version: 2.5
Name: oneopen-postkid
Version: 0.1.0
Summary: Local-first Postman-style API client with a red and white desktop UI (pure Python).
Project-URL: Homepage, https://github.com/1-OpenSource/OneOpen-Postkid
Project-URL: Documentation, https://github.com/1-OpenSource/OneOpen-Postkid#readme
Project-URL: Repository, https://github.com/1-OpenSource/OneOpen-Postkid
Project-URL: Issues, https://github.com/1-OpenSource/OneOpen-Postkid/issues
Project-URL: Changelog, https://github.com/1-OpenSource/OneOpen-Postkid/blob/main/CHANGELOG.md
Author: OneOpen
Maintainer: OneOpen
License-Expression: MIT
License-File: LICENSE
Keywords: api,client,desktop,flet,graphql,http,httpx,mqtt,oneopen,postkid,postman,rest,soap,websocket
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: MacOS X
Classifier: Environment :: Win32 (MS Windows)
Classifier: Environment :: X11 Applications
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Testing
Requires-Python: >=3.10
Requires-Dist: flet[all]>=1.0.0
Requires-Dist: httpx[http2]>=0.27.0
Requires-Dist: paho-mqtt>=2.0.0
Requires-Dist: websockets>=12.0
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == 'dev'
Requires-Dist: hatch>=1.12; extra == 'dev'
Requires-Dist: twine>=6.0; extra == 'dev'
Description-Content-Type: text/markdown

# OneOpen Postkid

**Local-first Postman-style API client** — a pure-Python desktop app with a red & white UI.

Collections, environments, cookies, flows, and history stay on your machine. No cloud account, no sync tax.

[![PyPI](https://img.shields.io/pypi/v/oneopen-postkid.svg)](https://pypi.org/project/oneopen-postkid/)
[![Python](https://img.shields.io/pypi/pyversions/oneopen-postkid.svg)](https://pypi.org/project/oneopen-postkid/)
[![License: MIT](https://img.shields.io/badge/License-MIT-rose.svg)](LICENSE)

## Install

Requires **Python 3.10+**.

```bash
pip install oneopen-postkid
```

Then launch:

```bash
postkid
```

Aliases that do the same thing:

```bash
oneopen-postkid
python -m oneopen_postkid
```

> First launch may download a Flet desktop runtime. On Linux you may need system packages for the window toolkit — see [Flet docs](https://flet.dev/docs/getting-started/).

### From source

```bash
git clone https://github.com/1-OpenSource/OneOpen-Postkid.git
cd OneOpen-Postkid
pip install -e .
postkid
```

## Features

### Requests & protocols
- HTTP request builder (method, URL, params, headers, body, auth)
- Protocols: **HTTP**, **GraphQL**, **WebSocket**, **MQTT**, **SOAP/XML**
- Body types: none, form-data, urlencoded, raw, JSON, GraphQL, SOAP, binary
- Path variables (`:id` / `{id}`) separate from query params
- Auto-name requests from the URL (Postman-style)
- Auto-format / beautify / minify JSON & XML

### Auth
- Bearer, Basic, API Key  
- OAuth 2.0 (client credentials + access token)  
- Digest, Hawk, AWS Signature V4  

### Collections & environments
- Local collections with **folders**, duplicate / rename / move
- Environments, globals, and collection variables with `{{var}}` interpolation
- Environment quick-look and active-env switcher
- Import: Postman Collection v2.1, OpenAPI/Swagger, native JSON, cURL paste  
- Export: native JSON or Postman Collection v2.1  
- Collection Runner (iterations + delay)  
- Flows — sequential multi-request runners  

### Scripts & tooling
- Pre-request & test scripts in **Python** (`pm.*` API)
- Console + embedded terminal (toggle from the footer)
- Code snippets (cURL and more)
- Find & replace across collections
- Cookies jar (view / edit / clear; auto-absorb `Set-Cookie`)
- History with search / filter / clear
- Request **Docs** and saved **response examples**

### UX
- Postman-inspired dense chrome, red brand (`#E11D48`)
- Dark theme toggle
- Keyboard shortcuts: `Ctrl+Enter` send, `Ctrl+S` save, `Ctrl+N` new tab, `Ctrl+F` find
- Settings: timeout, redirects, SSL verify, proxy, HTTP/2, client certificates
- Custom window chrome with taskbar icon

## Quick start

1. Install and run `postkid`.
2. Open the **Getting Started** collection (created on first launch).
3. Pick the **Local** environment (`base_url` points at JSONPlaceholder).
4. Hit **Send**.

Try a GraphQL or SOAP request by switching the **protocol** / body type on the request bar.

## Data location

Everything is plain JSON under `~/.oneopen_postkid` (or `%USERPROFILE%\.oneopen_postkid` on Windows):

| File | Purpose |
|------|---------|
| `collections.json` | Collections, folders, requests |
| `environments.json` | Environments & variables |
| `globals.json` | Global variables |
| `cookies.json` | Cookie jar |
| `flows.json` | Saved flows |
| `history.json` | Recent sends (capped) |
| `settings.json` | Timeouts, proxy, theme, etc. |

Override the data directory:

```bash
# Windows (PowerShell)
$env:ONEOPEN_POSTKID_HOME = "D:\postkid-data"
postkid

# macOS / Linux
export ONEOPEN_POSTKID_HOME=/path/to/data
postkid
```

## Keyboard shortcuts

| Shortcut | Action |
|----------|--------|
| `Ctrl+Enter` | Send request |
| `Ctrl+S` | Save request |
| `Ctrl+N` | New tab |
| `Ctrl+F` | Find & replace |

## Stack

| Piece | Role |
|-------|------|
| [Flet](https://flet.dev) | Desktop UI (Python → native window) |
| [httpx](https://www.python-httpx.org/) | HTTP / HTTP/2 client |
| [websockets](https://websockets.readthedocs.io/) | WebSocket round-trips |
| [paho-mqtt](https://eclipse.dev/paho/) | MQTT publish / subscribe |

## Development

```bash
# Editable install + packaging tools
pip install -e ".[dev]"

# Smoke import
python -c "from oneopen_postkid import __version__; print(__version__)"

# Build sdist + wheel
python -m build

# Check metadata before upload (needs recent twine for Metadata 2.5)
python -m twine check dist/*

# Publish (maintainers) — create a PyPI API token first
python -m twine upload --repository testpypi dist/*
python -m twine upload dist/*
```

## License

[MIT](LICENSE) © OneOpen / 1-OpenSource
