Skip to main content

Rouint

A CLI-based API endpoint management and testing tool. Define endpoints once, organize them locally, and test them against any environment directly from the terminal — no GUI required.

Rouint stores endpoint configurations (method, path, headers, auth, body, files) in a local .rouint-data/ directory and executes requests using the system's native HTTP tools — curl on Linux/macOS and PowerShell on Windows — giving you the transparency of a raw command with the organization of a professional API client.

Features

  • Define reusable API endpoint templates with {placeholder} parameters
  • Interactive endpoint creation wizard with step-back navigation (Esc to go back)
  • Support for GET, POST, PUT, PATCH, DELETE, HEAD, and OPTIONS methods
  • Custom headers with method-aware defaults
  • Authentication — Bearer Token (with temp token reuse) and Custom header auth
  • JSON request body with inline validation
  • File attachment support — multipart/form-data uploads
  • Multi-environment support — add local, staging, and production URLs; choose at test time
  • Automatic URL encoding of placeholder values
  • Pretty-printed JSON in both REQUEST and RESPONSE boxes
  • Full-width terminal panels that adapt to your terminal size
  • Input validation — base URLs, JSON bodies, and file paths checked on entry
  • Local-first storage — all data stays in your project directory
  • .gitignore auto-generated to keep environments and tokens out of version control
  • Cross-platform — native backends for Linux/macOS (cURL) and Windows (PowerShell)

Requirements

All platforms

  • Python 3.9 or higher

Linux / macOS

  • curl installed and available on your PATH (pre-installed on most systems)

Windows

  • PowerShell 5.1 (Windows PowerShell, included with Windows 10/11) or PowerShell 7+ (pwsh)
  • No additional software required — PowerShell is included with Windows

Platform Backends

Rouint automatically selects the appropriate HTTP backend based on your operating system:

Platform Backend Tool
Linux cURL curl subprocess
macOS cURL curl subprocess
Windows PowerShell Invoke-WebRequest via pwsh or powershell.exe

The backend is selected transparently — all CLI commands and endpoint configurations work identically across platforms.

Supported PowerShell versions

  • PowerShell 7+ (pwsh) — preferred, supports native -Form parameter for file uploads
  • Windows PowerShell 5.1 (powershell.exe) — supported with .NET-based multipart upload fallback

Rouint prefers pwsh (PowerShell 7+) if available, and falls back to powershell.exe (Windows PowerShell 5.1). If neither is found, a clear error message is displayed.

Platform limitations

  • On Windows, file uploads on PowerShell 5.1 use a .NET HttpClient-based approach which may behave slightly differently from PowerShell 7+'s native -Form parameter.
  • Request timing on Windows uses a .NET Stopwatch which provides millisecond-level accuracy.

Installation

From PyPI

Linux / macOS:

pip install rouint

Windows:

py -m pip install rouint

From source (for development)

git clone https://github.com/KavimugilRajasekar/Rouint.git
cd Rouint
pip install -e ".[dev]"

Quick Start

1. Initialize your workspace

rouint init

Creates .rouint-data/ in your current directory:

.rouint-data/
├── .gitignore           # Keeps environments, tokens, and bodies out of git
├── config.json          # Workspace configuration
├── registry.json        # Endpoint registry (maps IDs to slugs)
├── endpoints/           # Endpoint configuration files
├── environments/        # Base URLs (gitignored)
└── bodies/              # Request body files (gitignored)

2. Add your base URLs

rouint add-base-url

Choose Add a new base URL, enter the URL and a label:

local      → http://127.0.0.1:8080
staging    → https://staging.myapp.com
production → https://api.myapp.com

To remove a URL, choose Delete an environment.

3. Create an endpoint

rouint add-new-api

A 7-step wizard — press Esc at any step to go back to the previous one:

Step What you set
1 HTTP method — GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
2 Path — with optional {placeholder} syntax
3 Headers — method-aware defaults, add/edit freely
4 Auth — None, Bearer Token, or Custom header
5 Body — JSON, validated on entry (POST/PUT/PATCH/DELETE)
6 Files — multipart attachments (POST/PUT/PATCH/DELETE)
7 Name — a memorable label

The endpoint is saved without a base URL — you choose the environment at test time.

4. Test an endpoint

rouint start-test

Flow: Select endpoint → Select base URL → Fill placeholders → Execute

Displays three panels:

  • REQUEST — method, path, headers, body (pretty-printed JSON)
  • RESPONSE — status, headers, body (pretty-printed JSON)
  • METRICS — HTTP status, response time, response size

Use --no-metrics to hide the metrics panel:

rouint start-test --no-metrics

If a token is detected in the response (Bearer/JWT), Rouint offers to save it as a temp token and automatically reuses it on subsequent Bearer-auth requests.

5. Manage your collection

rouint list-api

Select any endpoint to:

  • Edit — re-run the wizard with existing values pre-filled; Esc steps back
  • View Configuration — print the raw JSON
  • Delete — remove permanently after confirmation

Placeholder System

Use {name} syntax anywhere in the path or query string:

Path Placeholders Example input
/users/{id} id usr-101
/search?q={query} query hello world → URL-encoded
/users/{id}/posts/{post_id} id, post_id 123, 456

Rules:

  • Names must match [a-zA-Z0-9_]
  • Names must be unique within an endpoint
  • Braces must be balanced
  • Values are URL-encoded automatically at test time

File Attachments

For POST/PUT/PATCH/DELETE endpoints, you can attach files during creation:

File path: /home/user/photo.jpg
Form field name: avatar

At test time, Rouint sends the request as multipart/form-data:

  • Linux/macOS: via curl -F (curl sets the correct boundary automatically)
  • Windows: via PowerShell's -Form parameter (PS 7+) or .NET MultipartFormDataContent (PS 5.1)

Authentication

Type Behaviour
None No auth header added
Bearer Token Prompts for token; offers saved temp token if available
Custom Prompts for header name and value; saved in endpoint config

Temp token workflow:

  1. Login endpoint returns a token → Rouint detects it
  2. "Save as temp token?" → saved to .rouint-data/.temp_token
  3. Next Bearer-auth request → "Use saved temp token?" → auto-filled
  4. rouint clear-token → removes it

Git Safety

rouint init creates .rouint-data/.gitignore that protects:

environments/    # real base URLs
.temp_token      # live Bearer tokens
bodies/          # may contain credentials
*.secret.json    # explicitly sensitive files

Safe to commit: endpoints/, registry.json, config.json

Commands Reference

Command Description
rouint init Initialize the Rouint workspace
rouint add-base-url Add or delete a base URL environment
rouint add-new-api Define a new API endpoint interactively
rouint start-test Select an endpoint + base URL and run the test
rouint list-api List, inspect, edit, or delete saved endpoints
rouint clear-token Clear the saved temp Bearer token

Workflow at a Glance

rouint init          # set up workspace (once per project)
rouint add-base-url  # register: local → http://127.0.0.1:8080
rouint add-new-api   # define: POST /api/v1/auth/login
rouint start-test    # pick endpoint → pick URL → test!
rouint list-api      # manage saved endpoints

Project Structure

Rouint/
├── pyproject.toml
├── LICENSE
├── README.md
├── rouint/
│   ├── __init__.py             # Package init, exposes __version__
│   ├── cli.py                  # Click CLI commands and interactive flows
│   ├── core/
│   │   ├── executor.py         # Shared execution interface & platform dispatch
│   │   ├── manager.py          # Endpoint CRUD (save, list, delete)
│   │   └── parser.py           # Placeholder extraction, resolution, validation
│   ├── platforms/
│   │   ├── __init__.py         # Platform detection
│   │   ├── linux/
│   │   │   └── executor.py     # cURL-based HTTP backend
│   │   └── windows/
│   │       └── executor.py     # PowerShell-based HTTP backend
│   ├── utils/
│   │   └── config.py           # Workspace init, data paths, .gitignore generation
│   └── ui/
│       └── components.py       # Banner, header, box_width
└── tests/
    ├── test_executor.py        # Shared + platform executor tests
    ├── test_parser.py          # Placeholder/path tests
    ├── test_manager.py         # Endpoint CRUD tests
    ├── test_platform.py        # Platform detection tests
    └── test_windows.py         # Windows-specific backend tests

Changelog

See CHANGELOG.md for the full version history.


Development

Setup

git clone https://github.com/KavimugilRajasekar/Rouint.git
cd Rouint
python -m venv .venv

# Linux / macOS
source .venv/bin/activate

# Windows
.venv\Scripts\activate

pip install -e ".[dev]"

Running tests

# All platforms
pytest tests/ -v

# Build and validate package
python -m build
python -m twine check dist/*

Branch workflow

  1. Create a feature branch from main: git switch -c feature/my-feature
  2. Implement and test your changes.
  3. Open a Pull Request targeting main.
  4. CI runs on Ubuntu and Windows across Python 3.9–3.13.
  5. After review and CI passes, merge the PR.

Creating a release

  1. Update the version in pyproject.toml and rouint/__init__.py.
  2. Merge all changes into main.
  3. Create a GitHub Release (e.g., tag v1.1.0).
  4. The publish.yml workflow automatically builds and publishes to PyPI.

Configuring PyPI Trusted Publishing

To enable automatic PyPI publishing, configure a Trusted Publisher on PyPI:

  1. Go to pypi.org/manage/project/rouint/settings/publishing/
  2. Add a new publisher with these settings:
    • Owner: KavimugilRajasekar
    • Repository: Rouint
    • Workflow name: publish.yml
    • Environment name: pypi
  3. On GitHub, create an environment named pypi at: https://github.com/KavimugilRajasekar/Rouint/settings/environments

No API token is needed — publishing uses OpenID Connect (OIDC).

Supported Python Versions

  • Python 3.9
  • Python 3.10
  • Python 3.11
  • Python 3.12
  • Python 3.13

License

MIT License — see LICENSE for details.

Author

Kavimugil Rajasekar (kavimugil28@gmail.com)

Metadata

Release files for rouint 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rouint 1.1.1
File Size Uploaded Provenance
rouint-1.1.1.tar.gz 48.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for rouint 1.1.1
File Interpreter ABI Platform
rouint-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 87.0 kB

Release files / rouint-1.1.1.tar.gz

Download URL rouint-1.1.1.tar.gz
Size 48.6 kB
Tags Source
SHA-256 checksum
How to use checksums
57a6bb3e7bfde9e0f8f2172f5775c5f7ff13b1d2ba88ece3fe5b0a5b2f7db940
BLAKE2b-256 checksum
How to use checksums
7fee00fce0e3a6da8ca911c65a7cfe82c3664b5ae4b1b695ccfcb918ebf40d6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / rouint-1.1.1-py3-none-any.whl

Download URL rouint-1.1.1-py3-none-any.whl
Size 38.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cf9274f72619c6d1bc75f2a6f66e42bc5387fee785103bbc4c8ff162c63732c3
BLAKE2b-256 checksum
How to use checksums
f0699d19aeea69623fb2b9cfdd6f5506dc17a754095fbede8f2ff7a7a50d4cdc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Security for rouint 1.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for rouint-1.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page