Skip to main content

A command line HTTP client that is easy to use

Project description

Talkie

A convenient command-line HTTP client for interacting with APIs and web services. Talkie makes working with HTTP in the terminal simple and human-friendly thanks to intuitive syntax and beautiful formatted output.

Talkie Logo

PyPI version Python 3.8+ Tests codecov Pylint License: MIT

Quick Start

# Install
pip install talkie

# Make your first request
talkie get https://jsonplaceholder.typicode.com/posts/1
๐Ÿ“บ See demo output
$ talkie get https://jsonplaceholder.typicode.com/posts/1

HTTP/1.1 200 OK
Content-Type: application/json

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occasi...",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur..."
}

Talkie demo

Contents

Features

  • ๐Ÿš€ Intuitive syntax for working with HTTP requests
  • ๐ŸŒˆ Beautiful colored output with syntax highlighting
  • ๐Ÿ’ก Automatic content type detection (JSON, XML, HTML)
  • ๐Ÿ” OpenAPI specification inspection for convenient API work
  • ๐Ÿ”„ Curl command generation for compatibility
  • ๐Ÿ“ Automatic data formatting (JSON, XML, HTML, Markdown)
  • ๐ŸŒ Environment support for working with different APIs
  • ๐Ÿ” Save and reuse headers and tokens
  • ๐Ÿ’พ Save responses to files
  • ๐Ÿงฐ Full support for all HTTP methods
  • ๐ŸŒ WebSocket connections for bidirectional communication
  • ๐Ÿ“Š GraphQL requests for working with GraphQL APIs
  • ๐Ÿ“œ Request history for reuse and analysis
  • โšก Parallel request execution for improved performance

Why Talkie?

Talkie combines the best of both worlds: the simplicity of HTTPie and the power of curl, while adding features that neither offers out of the box.

When to choose Talkie over HTTPie:

  • You need GraphQL โ€” Talkie has a dedicated graphql command with query files and variables
  • You work with WebSocket โ€” built-in ws command, no extra tools
  • You explore OpenAPI specs โ€” inspect endpoints, schemas, and generate examples
  • You run parallel requests โ€” batch API calls with configurable concurrency
  • You want searchable history โ€” find, repeat, and export past requests

When to choose Talkie over curl:

  • You prefer human-friendly syntax โ€” talkie post /users name=John instead of -d '{"name":"John"}'
  • You want colored, formatted output โ€” JSON/XML/HTML with syntax highlighting
  • You need environments โ€” switch between dev/staging/prod with one config
  • You don't want to remember curl flags โ€” intuitive -H, -q, -o options

Unique Features

Feature Description
GraphQL Native talkie graphql with query files, variables, and introspection
WebSocket talkie ws for real-time connections, no separate client needed
OpenAPI Inspect specs, list endpoints, generate request examples
Parallel requests talkie parallel for batch execution with concurrency control
Request history Search, repeat, export/import โ€” full audit trail of your API work

Comparison with Alternatives

Feature Talkie HTTPie curl wget
Intuitive syntax โœ… โœ… โŒ โš ๏ธ
Colored output โœ… โœ… โŒ โŒ
JSON/XML formatting โœ… โœ… โŒ โŒ
GraphQL โœ… โŒ โš ๏ธ โŒ
WebSocket โœ… โŒ โœ… โŒ
OpenAPI inspection โœ… โŒ โŒ โŒ
Parallel requests โœ… โŒ โŒ โš ๏ธ
Request history โœ… โš ๏ธ โŒ โŒ
Environment config โœ… โš ๏ธ โŒ โŒ
Curl command generation โœ… โš ๏ธ โ€” โ€”
Pre-installed โŒ โŒ โœ… โœ…
Python API โœ… โœ… โŒ โŒ

Legend: โœ… Yes | โš ๏ธ Partial/Manual | โŒ No | โ€” N/A

Installation

From PyPI

pip install talkie

From source code

git clone https://github.com/craxti/talkie.git
cd talkie
pip install -e .

Usage

Basic Requests

# GET request
talkie get https://api.example.com/users

# POST request with JSON data (automatic type detection)
talkie post https://api.example.com/users name=John age:=30 is_admin:=true

# PUT request
talkie put https://api.example.com/users/1 name=Peter

# DELETE request
talkie delete https://api.example.com/users/1

Headers and Parameters

# Adding headers
talkie get https://api.example.com/users \
  -H "Authorization: Bearer token123" \
  -H "Accept: application/json"

# Query parameters
talkie get https://api.example.com/users -q "page=1" -q "limit=10"

# Save response to file
talkie get https://api.example.com/users -o users.json

Output and Formatting

# Verbose output
talkie get https://api.example.com/users -v

# JSON only
talkie get https://api.example.com/users --json

# Headers only
talkie get https://api.example.com/users --headers

# Response formatting
talkie get https://api.example.com/users --format json
talkie get https://api.example.com/users -f xml

Curl Command Generation

# Generate curl command for request
talkie curl https://api.example.com/users -H "Authorization: Bearer token123"

# Add curl command to regular request
talkie get https://api.example.com/users --curl

# Configure curl parameters
talkie curl https://api.example.com/users -X POST -d "name=John" -d "age:=30" -v -k

OpenAPI Inspection

# Inspect OpenAPI specification from URL
talkie openapi https://api.example.com/openapi.json

# Inspect local specification file
talkie openapi ./openapi.yaml

# Show only endpoints
talkie openapi https://api.example.com/openapi.json --endpoints

# Generate request examples
talkie openapi https://api.example.com/openapi.json --examples

File Formatting

# Format JSON file
talkie format data.json

# Format and save to file
talkie format data.json -o formatted.json

# Format with specific type
talkie format data.txt -t json

WebSocket

# Connect to WebSocket server
talkie ws wss://echo.websocket.org

# Send message
talkie ws wss://echo.websocket.org --send "Hello"

# Connect with headers
talkie ws wss://api.example.com/ws \
  -H "Authorization: Bearer token123"

GraphQL Requests

# Simple query
talkie graphql https://api.example.com/graphql \
  -q "query { users { id name } }"

# Query from file
talkie graphql https://api.example.com/graphql -f query.graphql

# Query with variables
talkie graphql https://api.example.com/graphql \
  -f query.graphql -v id=123 -v limit=10

Request History

# Show history
talkie history list

# Show last 10 requests
talkie history list --limit 10

# Search history
talkie history search --method GET --url users

# Repeat request from history
talkie history repeat 1a2b3c4d

# Search in history
talkie history search --method GET --url users

# Export history to file
talkie history export history.json

# Import history from file
talkie history import history.json

Parallel Request Execution

# Execute requests from file
talkie parallel -f requests.txt

# File with requests (requests.txt) has format:
# GET https://api.example.com/users/1
# GET https://api.example.com/users/2
# POST https://api.example.com/users name=John

# Execute multiple requests with parallelism limit
talkie parallel -f requests.txt --concurrency 5

# Use delay between requests
talkie parallel -f requests.txt --delay 0.5

# Save results to separate files
talkie parallel -f requests.txt --output-dir ./results

# Execute multiple requests to one URL
talkie parallel -X GET -u "/users/1" -u "/users/2" -u "/posts/1" -b "https://api.example.com"

Configuration Management

Configuration File

Talkie uses ~/.talkie/config.json file for storing settings. The file is created automatically on first run.

You can create the file manually:

mkdir -p ~/.talkie
cat > ~/.talkie/config.json << EOF
{
  "default_headers": {
    "User-Agent": "Talkie/0.1.0",
    "Accept": "application/json"
  },
  "environments": {
    "dev": {
      "name": "dev",
      "base_url": "https://dev-api.example.com",
      "default_headers": {
        "Authorization": "Bearer dev-token"
      }
    },
    "prod": {
      "name": "prod",
      "base_url": "https://prod-api.example.com",
      "default_headers": {
        "Authorization": "Bearer prod-token"
      }
    }
  },
  "active_environment": "dev"
}
EOF

Configuration file location can be changed using TALKIE_CONFIG_DIR environment variable.

Environment Management

Environments allow storing settings for different APIs and quickly switching between them.

Example of using environment:

# Using base URL from active environment
talkie get /users

# Equivalent to (if active environment is dev)
talkie get https://dev-api.example.com/users

Configuration Examples

Multiple Headers for All Requests

{
  "default_headers": {
    "User-Agent": "Talkie/0.1.0",
    "Accept": "application/json",
    "X-API-Key": "your-api-key"
  }
}

Multiple Environment Setup

{
  "environments": {
    "github": {
      "name": "github",
      "base_url": "https://api.github.com",
      "default_headers": {
        "Authorization": "token ghp_xxxxxxxxxxxx"
      }
    },
    "gitlab": {
      "name": "gitlab",
      "base_url": "https://gitlab.com/api/v4",
      "default_headers": {
        "PRIVATE-TOKEN": "glpat-xxxxxxxxxxxx"
      }
    }
  },
  "active_environment": "github"
}

Development

Requirements

  • Python 3.8+
  • httpx
  • typer
  • rich
  • pydantic
  • pyyaml
  • openapi-spec-validator
  • pygments
  • xmltodict
  • html2text
  • websockets

Project Structure

talkie/
โ”œโ”€โ”€ __init__.py          # Package
โ”œโ”€โ”€ __main__.py          # Entry point
โ”œโ”€โ”€ cli/                 # Command line interface
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ””โ”€โ”€ main.py          # Command definitions
โ”œโ”€โ”€ core/                # Application core
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ client.py        # HTTP client
โ”‚   โ”œโ”€โ”€ request_builder.py
โ”‚   โ”œโ”€โ”€ response_formatter.py
โ”‚   โ””โ”€โ”€ websocket_client.py  # WebSocket client
โ””โ”€โ”€ utils/               # Helper modules
    โ”œโ”€โ”€ __init__.py
    โ”œโ”€โ”€ config.py        # Configuration management
    โ”œโ”€โ”€ formatter.py     # Data formatting
    โ”œโ”€โ”€ curl_generator.py
    โ”œโ”€โ”€ openapi.py
    โ”œโ”€โ”€ graphql.py       # GraphQL support
    โ”œโ”€โ”€ history.py       # Request history
    โ”œโ”€โ”€ colors.py
    โ””โ”€โ”€ logger.py

Running Tests

# Install development dependencies
pip install -e ".[dev]"

# Run all tests
pytest

# Run tests for specific module
pytest tests/test_formatter.py

# Run with coverage
pytest --cov=talkie

Pre-commit Hooks

pip install pre-commit
pre-commit install
# Hooks run automatically on git commit (black, isort, mypy)

Documentation Site

pip install -e ".[dev]"
mkdocs serve
# Open http://127.0.0.1:8000

API Documentation

Documentation is available in the docs/ folder and via mkdocs serve:

It contains detailed description of all Talkie API components:

  • HTTP client and request builder
  • WebSocket client
  • Utilities for formatting and working with various formats
  • GraphQL request interface
  • Components for storing and managing request history

FAQ

How to save response to file?

Use -o or --output option:

talkie get https://api.example.com/data -o response.json

How to use OAuth token?

Add Authorization header:

talkie get https://api.example.com/profile -H "Authorization: Bearer YOUR_TOKEN"

Or save it in configuration:

{
  "environments": {
    "myapi": {
      "base_url": "https://api.example.com",
      "default_headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  },
  "active_environment": "myapi"
}

How to work with WebSocket in async scenarios?

Talkie provides Python API for working with WebSocket:

import asyncio
from talkie.core.websocket_client import WebSocketClient

async def main():
    client = WebSocketClient("wss://echo.websocket.org")
    await client.connect()
    await client.send("Hello")
    response = await client.receive()
    print(f"Received: {response.data}")
    await client.disconnect()

asyncio.run(main())

How to execute complex GraphQL query?

Save query to file and pass it to command:

talkie graphql https://api.example.com/graphql -f complex_query.graphql -v id=123 -v limit=10

Troubleshooting

SSL certificate verification failed

If you get SSLError or certificate errors when connecting to HTTPS:

# For development only โ€” disable SSL verification (not recommended for production)
talkie get https://api.example.com --insecure

Command not found: talkie

Ensure Talkie is installed and in your PATH:

pip install talkie
# Or with user install:
pip install --user talkie
# Verify:
which talkie

Colors not displaying in terminal

Some terminals don't support colors. Try:

# Force colored output
export FORCE_COLOR=1
talkie get https://api.example.com/users

# Or disable colors
talkie get https://api.example.com/users --no-color

Config file not found

Talkie uses ~/.talkie/config.json by default. Override with:

export TALKIE_CONFIG_DIR=/path/to/your/config
talkie get /users

Timeout errors

Increase timeout for slow APIs:

talkie get https://api.example.com/slow-endpoint --timeout 60

License

MIT

Contributing

Contributions are welcome! Please create issues and pull requests on GitHub.

  1. Fork the repository
  2. Create a branch with your changes
  3. Submit a pull request

Code guidelines:

  • Use black for code formatting
  • Add type hints
  • Write tests for new functionality

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

talkie-0.1.3.tar.gz (5.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

talkie-0.1.3-py3-none-any.whl (52.8 kB view details)

Uploaded Python 3

File details

Details for the file talkie-0.1.3.tar.gz.

File metadata

  • Download URL: talkie-0.1.3.tar.gz
  • Upload date:
  • Size: 5.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for talkie-0.1.3.tar.gz
Algorithm Hash digest
SHA256 81e44eadabc25b5e3c995f732422cab0af888f0c542d9f8529dd41adbc0b4709
MD5 b231b3e6a3253ace769e54e8f227841d
BLAKE2b-256 e696c6de1c36e6a5d15098c2152dbd7ab3a65af04652f29ae2cf46e670c28c66

See more details on using hashes here.

File details

Details for the file talkie-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: talkie-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 52.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for talkie-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 35a005443f8b3e8f6e7d46d3755ae9c966c21a710e37b23db21d049156eb031e
MD5 167566091f175dd183f11e0e8b0e00f1
BLAKE2b-256 42fcc212b33002d2af3781ed8066efd07aa440a3fba47b6403066258f98bd86d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page