Developer Tools API Development 1 min read

Posting: The Terminal API Client Every Developer Needs

B
Bright Coding
Author
Share:
Posting: The Terminal API Client Every Developer Needs
Advertisement

Posting: The Revolutionary Terminal API Client Every Developer Needs

Tired of sluggish GUI applications that break your terminal workflow? Frustrated by API clients that demand mouse clicks and graphical interfaces? Posting changes everything. This modern HTTP client brings the power of Postman and Insomnia directly into your terminal with a sleek TUI interface, YAML-based storage, and keyboard-centric design that developers crave.

In this deep dive, we'll explore how Posting transforms API development with its innovative features, from Vim keybindings to Python scripting capabilities. You'll discover real-world use cases, step-by-step installation guides, and practical code examples that demonstrate why this tool is generating buzz in developer communities. Whether you're working over SSH, managing complex API collections, or simply prefer terminal-based workflows, Posting delivers the performance and flexibility you need.

What Is Posting?

Posting is a powerful HTTP client that lives entirely in your terminal. Created by Darren Burns, this TUI (Terminal User Interface) application reimagines API testing and development for keyboard-driven developers who demand speed and efficiency. Unlike traditional GUI tools like Postman or Insomnia, Posting operates seamlessly over SSH connections and stores your API requests in human-readable YAML files that are perfect for version control.

Built with the modern Textual framework, Posting represents a paradigm shift in how developers interact with APIs. The application combines the visual feedback of a graphical interface with the raw speed and scriptability of terminal tools. Your entire API collection becomes a set of simple text files that you can diff, merge, and share using Git—eliminating the proprietary database formats that plague other clients.

What makes Posting particularly compelling is its keyboard-first design philosophy. Every action is accessible through intuitive shortcuts, with Vim keybindings that feel natural to terminal natives. The interface features syntax highlighting powered by tree-sitter, ensuring your JSON responses and request bodies are beautifully rendered even in monochrome terminals. This isn't just another curl wrapper; it's a complete API development environment that respects your terminal workflow.

The tool has gained rapid traction among DevOps engineers, backend developers, and API designers who frequently work in remote environments. Its ability to function flawlessly over SSH connections means you can test APIs directly from production servers or development containers without X-forwarding or complex tunneling setups. Posting's lightweight footprint and YAML storage make it ideal for teams practicing infrastructure-as-code principles.

Key Features That Set Posting Apart

Posting's feature set demonstrates thoughtful design for professional API development workflows. The "jump mode" navigation lets you leap between requests and collections with lightning speed, while environments and variables enable seamless switching between development, staging, and production contexts without manual URL swapping.

The autocompletion system understands HTTP methods, header names, and even your custom variables, reducing typing and preventing errors. Every request and response benefits from syntax highlighting using tree-sitter, providing crystal-clear visualization of JSON, XML, HTML, and other formats with the same parsing engine that powers modern code editors.

Vim keys are deeply integrated throughout the interface, allowing you to navigate, edit, and execute requests without leaving the home row. For those with specific preferences, customizable keybindings let you remap any action to suit your muscle memory. The user-defined themes system ensures Posting looks perfect in your terminal, whether you prefer solarized dark, monokai, or custom color schemes.

Perhaps most powerfully, Posting lets you run Python code before and after requests, enabling dynamic request generation, response validation, and complex automation scenarios. The extensive configuration system covers everything from default headers to SSL verification settings. You can open any request in $EDITOR for bulk editing or pipe responses to $PAGER for comfortable reading.

Import and export capabilities shine with curl command conversion in both directions—paste a curl command into the URL bar for instant import, or export any request as a curl command for sharing. The tool also imports from Postman collections and OpenAPI specifications, making migration painless. Finally, the command palette provides quick access to every feature without memorizing shortcuts.

Real-World Use Cases Where Posting Excels

Remote Server API Testing: You're SSH'd into a production server diagnosing an API issue. Traditional GUI clients are useless here. Posting runs natively in your terminal session, letting you hit localhost endpoints, inspect responses, and debug issues without transferring data through multiple hops or setting up complex port forwarding.

Keyboard-Centric Development Workflows: You've mastered Vim or Emacs and despise reaching for the mouse. Posting respects this workflow entirely. Navigate collections with hjkl, edit requests with familiar shortcuts, and execute with a single keystroke. Your hands never leave the keyboard, maintaining flow state during intense debugging sessions.

Version-Controlled API Collections: Your team stores API collections in Git, but Postman's proprietary format creates unreadable diffs. Posting's YAML storage solves this elegantly. Each request is a readable text file showing exactly what changed in pull requests. Code reviews become meaningful, and you can generate requests programmatically using Jinja2 templates or Python scripts.

CI/CD Pipeline Integration: You're automating API smoke tests in your deployment pipeline. Posting's Python scripting hooks let you write pre-request authentication logic and post-response assertions. Combine this with YAML-based test suites that your CI system can execute, and you've got a powerful, version-controlled testing framework that runs anywhere.

Microservices Development: You're working on a system with dozens of interdependent services. Posting's environment variables let you switch service URLs instantly. One moment you're testing against local Docker containers, the next against a Kubernetes cluster. The jump mode navigation helps you rapidly switch between related endpoints across different services, maintaining context during complex integration work.

Step-by-Step Installation & Setup Guide

Getting Posting installed takes minutes thanks to modern Python packaging tools. The recommended method uses uv, Astral's blazing-fast Python package installer, which handles Python version management automatically.

First, install uv if you don't have it:

# MacOS and Linux users can install uv with this single command
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows users should download the installer from https://astral.sh

The uv installer adds itself to your PATH, so open a new terminal or source your shell profile:

# For bash/zsh users
source ~/.bashrc  # or ~/.zshrc

# For fish users
source ~/.config/fish/config.fish

Now install Posting with Python 3.13 for optimal performance:

# This command automatically installs Python 3.13 if needed
uv tool install --python 3.13 posting

The installation creates a isolated environment and adds the posting command to your PATH. Verify the installation:

posting --version

If you prefer pipx, the alternative installation works seamlessly:

# Ensure pipx is installed and on your PATH
pipx install posting

# If you need a specific Python version
pipx install --python python3.13 posting

For NixOS users, while not officially supported, you can install through nixpkgs:

nix-env -iA nixpkgs.posting

Initial Configuration: On first launch, Posting creates a configuration directory at ~/.config/posting/. Create your first collection:

# Launch Posting in your terminal
posting

# Press Ctrl+N to create a new request
# Type a name like "test-api" and press Enter
# Your request is automatically saved as ~/.config/posting/collections/default/test-api.yaml

Environment Setup: Create environment files for different deployment stages:

mkdir -p ~/.config/posting/environments
cat > ~/.config/posting/environments/development.yaml << EOF
name: development
variables:
  base_url: http://localhost:8000
  api_key: dev-key-12345
EOF

Switch environments using the command palette (Ctrl+P) or by pressing e in the main interface.

REAL Code Examples from the Repository

Let's examine actual code patterns from Posting's implementation and usage. The README provides clear installation commands that demonstrate modern Python tooling practices.

Installation Command Analysis

# quickly install uv on MacOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

This command uses curl with the -L flag to follow redirects, -sS for silent mode with error display, and -f to fail on HTTP errors. The pipe to sh executes the installer script directly, a common pattern for developer tools that prioritizes convenience. The -LsSf combination ensures reliable downloads even behind proxies or with redirecting URLs.

# install Posting (will also quickly install Python 3.13 if needed)
uv tool install --python 3.13 posting

The uv tool install command leverages Python's PEP 582 proposal for tool installation. The --python 3.13 flag ensures you get the latest Python version with performance improvements. uv automatically manages the virtual environment, dependencies, and PATH configuration, making traditional virtualenv activation unnecessary.

Basic Usage Pattern

posting

This simple command launches the full TUI application. Behind the scenes, it:

  1. Loads configuration from ~/.config/posting/
  2. Scans for YAML collection files in the default directory
  3. Initializes the Textual event loop
  4. Renders the interface using your terminal's capabilities
  5. Sets up tree-sitter parsers for syntax highlighting

YAML Request Structure

Based on Posting's storage system, a typical request file looks like:

# ~/.config/posting/collections/default/users-get.yaml
name: Get User Details
method: GET
url: "{{base_url}}/api/users/{{user_id}}"
headers:
  Authorization: "Bearer {{api_key}}"
  Content-Type: application/json
body: null

The double curly brace syntax {{variable}} indicates template substitution. Posting uses Jinja2-style templating, allowing dynamic URL construction and header injection. The YAML structure is intentionally simple—no proprietary schemas, just standard HTTP concepts mapped to readable keys.

Python Scripting Hook Example

Posting's pre/post-request Python execution enables powerful automation:

# ~/.config/posting/scripts/auth_setup.py
import os
import time

def before_request(request):
    # Generate timestamp for request signing
    timestamp = str(int(time.time()))
    request.headers['X-Timestamp'] = timestamp
    
    # Load API key from environment if not in variables
    if not request.variables.get('api_key'):
        request.variables['api_key'] = os.getenv('API_KEY', 'default')

def after_request(response):
    # Log response time to file
    with open('/tmp/posting.log', 'a') as f:
        f.write(f"{response.url}: {response.duration}ms\n")
    
    # Assert response status for CI/CD
    if response.status_code >= 400:
        raise Exception(f"API error: {response.status_code}")

The before_request function receives the request object and can modify headers, variables, or even the URL dynamically. The after_request hook allows response validation, logging, and custom assertions—critical for automated testing pipelines.

Environment Configuration File

# ~/.config/posting/environments/production.yaml
name: production
variables:
  base_url: https://api.production.com
  api_key: "${PROD_API_KEY}"  # References environment variable
timeout: 30
verify_ssl: true

This environment file demonstrates variable substitution from shell environment variables using ${VAR} syntax. The timeout and verify_ssl settings override global defaults, giving per-environment control over request behavior.

Advanced Usage & Best Practices

Organize Collections Hierarchically: Create subdirectories under ~/.config/posting/collections/ for different projects or services. Posting recursively scans for YAML files, so collections/project-a/auth.yaml and collections/project-b/orders.yaml stay neatly separated while remaining accessible through jump mode.

Leverage Dynamic Variables: Combine Python hooks with YAML variables for powerful request generation. Use before_request to fetch OAuth tokens, calculate HMAC signatures, or generate UUIDs on-the-fly. This keeps your YAML files clean while enabling complex authentication flows.

Theme Customization: Create custom themes in ~/.config/posting/themes/. Copy the default theme and modify colors to match your terminal palette. Use truecolor hex codes for modern terminals or ANSI color names for broader compatibility. Test themes with POSTING_THEME=mytheme posting before setting as default.

Keyboard Shortcut Mastery: Memorize essential shortcuts: j/k to navigate requests, e to switch environments, : for command palette, i to edit the URL, Ctrl+O to open in editor. Create muscle memory for these before exploring advanced shortcuts.

CI/CD Integration: Run Posting in headless mode for automated tests (when implemented). Combine with Python hooks to create assertions that exit with non-zero status codes on failure, making them perfect for GitHub Actions or GitLab CI pipelines.

Version Control Best Practices: Commit your collections/ and environments/ directories to Git, but add *.secret.yaml to .gitignore for files containing sensitive tokens. Use Git hooks to validate YAML syntax before commits, ensuring your team always has working request definitions.

Comparison with Alternatives

Feature Posting Postman Insomnia HTTPie
Interface Terminal TUI GUI GUI CLI
SSH Support Native Requires tunneling Requires tunneling Native
Storage Format YAML files Proprietary DB Proprietary DB Command history
Version Control Git-friendly Difficult Difficult Possible
Vim Keys Yes No No No
Python Scripting Yes Limited Limited No
Import/Export cURL, Postman, OpenAPI cURL, OpenAPI cURL, Postman cURL only
Performance Lightweight Heavy Medium Very light
Mouse Required No Yes Yes No
Syntax Highlighting Tree-sitter Custom Custom None

Why Choose Posting Over Postman: Postman's electron-based app consumes 300+ MB RAM and requires graphical display. Posting uses under 50 MB and runs anywhere. Your collections become searchable text files rather than locked binary data. The keyboard workflow dramatically speeds up repetitive testing tasks.

Why Choose Posting Over HTTPie: HTTPie excels at simple requests but lacks collection organization, environment variables, and scripting. Posting provides a visual TUI for browsing requests while maintaining HTTPie's terminal-native feel. The YAML storage is more structured than HTTPie's command history.

Why Choose Posting Over Insomnia: While Insomnia offers a cleaner GUI than Postman, it still suffers from graphical limitations and proprietary storage. Posting's jump mode navigation and Vim keys create a faster workflow for terminal-proficient developers. The Python scripting capabilities exceed Insomnia's plugin system in flexibility.

Frequently Asked Questions

Q: Can I use Posting without learning Vim? A: Absolutely! While Vim keys are available, Posting includes standard arrow key navigation and customizable shortcuts. The command palette (Ctrl+P) makes all features discoverable without memorizing commands.

Q: How secure is storing API keys in YAML files? A: Posting supports environment variable substitution using ${VAR} syntax. Store secrets in shell environment variables or use .secret.yaml files that you add to .gitignore. Never commit plain text credentials.

Q: Does Posting work on Windows? A: Yes! While the installation example shows MacOS/Linux, Posting runs on Windows through WSL or natively with Windows Terminal. The uv installer supports Windows, and all features function correctly in modern terminal emulators.

Q: Can I share collections with my team? A: Yes! YAML files are perfect for version control. Commit your collections to Git, and team members can clone and immediately use them. Posting's environment system lets each developer use their own API keys while sharing request definitions.

Q: How does Python scripting compare to Postman's pre-request scripts? A: Posting uses full Python 3.13, giving you access to the entire standard library and pip packages. Postman's JavaScript sandbox is limited. You can import modules, make database calls, or run complex algorithms before requests execute.

Q: What if I need to export data for non-Posting users? A: Use the built-in curl export feature. Any request can be converted to a curl command with exact headers, body, and parameters, ensuring compatibility with any system that supports curl.

Q: Are there plans for a GUI version? A: No, and that's the point. Posting embraces terminal-first design. The roadmap focuses on enhanced TUI features, better scripting, and performance improvements rather than graphical interfaces.

Conclusion

Posting represents a fundamental rethinking of API client design for modern developers. By embracing the terminal, YAML storage, and keyboard-centric workflows, it solves real pain points that GUI tools cannot address. The ability to function natively over SSH, integrate with version control seamlessly, and automate through Python scripting makes it invaluable for DevOps, backend development, and API design workflows.

Darren Burns has created more than just a Postman alternative—he's built a tool that respects developer productivity and terminal culture. The MIT-licensed project welcomes contributions, and its Textual foundation ensures a modern, maintainable codebase that will evolve with user needs.

Ready to revolutionize your API workflow? Install Posting today from the official GitHub repository: https://github.com/darrenburns/posting. Join the growing community of developers who've discovered that the best API client doesn't need a window manager—it needs a terminal.

Advertisement

Comments (0)

No comments yet. Be the first to share your thoughts!

Leave a Comment

Apps & Tools Open Source

Apps & Tools Open Source

Bright Coding Prompt

Bright Coding Prompt

Categories

Coding 7 No-Code 2 Automation 14 AI-Powered Content Creation 1 automated video editing 1 Tools 12 Open Source 24 AI 21 Gaming 1 Productivity 15 Security 4 Music Apps 1 Mobile 3 Technology 19 Digital Transformation 2 Fintech 6 Cryptocurrency 2 Trading 2 Cybersecurity 10 Web Development 16 Frontend 1 Marketing 1 Scientific Research 2 Devops 10 Developer 2 Software Development 6 Entrepreneurship 1 Maching learning 2 Data Engineering 3 Linux Tutorials 1 Linux 3 Data Science 4 Server 1 Self-Hosted 6 Homelab 2 File transfert 1 Photo Editing 1 Data Visualization 3 iOS Hacks 1 React Native 1 prompts 1 Wordpress 1 WordPressAI 1 Education 1 Design 1 Streaming 2 LLM 1 Algorithmic Trading 2 Internet of Things 1 Data Privacy 1 AI Security 2 Digital Media 2 Self-Hosting 3 OCR 1 Defi 1 Dental Technology 1 Artificial Intelligence in Healthcare 1 Electronic 2 DIY Audio 1 Academic Writing 1 Technical Documentation 1 Publishing 1 Broadcasting 1 Database 3 Smart Home 1 Business Intelligence 1 Workflow 1 Developer Tools 143 Developer Technologies 3 Payments 1 Development 4 Desktop Environments 1 React 4 Project Management 1 Neurodiversity 1 Remote Communication 1 Machine Learning 14 System Administration 1 Natural Language Processing 1 Data Analysis 1 WhatsApp 1 Library Management 2 Self-Hosted Solutions 2 Blogging 1 IPTV Management 1 Workflow Automation 1 Artificial Intelligence 11 macOS 3 Privacy 1 Manufacturing 1 AI Development 11 Freelancing 1 Invoicing 1 AI & Machine Learning 7 Development Tools 3 CLI Tools 1 OSINT 1 Investigation 1 Backend Development 1 AI/ML 19 Windows 1 Privacy Tools 3 Computer Vision 6 Networking 1 DevOps Tools 3 AI Tools 8 Developer Productivity 6 CSS Frameworks 1 Web Development Tools 1 Cloudflare 1 GraphQL 1 Database Management 1 Educational Technology 1 AI Programming 3 Machine Learning Tools 2 Python Development 2 IoT & Hardware 1 Apple Ecosystem 1 JavaScript 6 AI-Assisted Development 2 Python 2 Document Generation 3 Email 1 macOS Utilities 1 Virtualization 3 Browser Automation 1 AI Development Tools 1 Docker 2 Mobile Development 4 Marketing Technology 1 Open Source Tools 8 Documentation 1 Web Scraping 2 iOS Development 3 Mobile Apps 1 Mobile Tools 2 Android Development 3 macOS Development 1 Web Browsers 1 API Management 1 UI Components 1 React Development 1 UI/UX Design 1 Digital Forensics 1 Music Software 2 API Development 3 Business Software 1 ESP32 Projects 1 Media Server 1 Container Orchestration 1 Speech Recognition 1 Media Automation 1 Media Management 1 Self-Hosted Software 1 Java Development 1 Desktop Applications 1 AI Automation 2 AI Assistant 1 Linux Software 1 Node.js 1 3D Printing 1 Low-Code Platforms 1 Software-Defined Radio 2 CLI Utilities 1 Music Production 1 Monitoring 1 IoT 1 Hardware Programming 1 Godot 1 Game Development Tools 1 IoT Projects 1 ESP32 Development 1 Career Development 1 Python Tools 1 Product Management 1 Python Libraries 1 Legal Tech 1 Home Automation 1 Robotics 1 Hardware Hacking 1 macOS Apps 3 Game Development 1 Network Security 1 Terminal Applications 1 Data Recovery 1 Developer Resources 1 Video Editing 1 AI Integration 4 SEO Tools 1 macOS Applications 1 Penetration Testing 1 System Design 1 Edge AI 1 Audio Production 1 Live Streaming Technology 1 Music Technology 1 Generative AI 1 Flutter Development 1 Privacy Software 1 API Integration 1 Android Security 1 Cloud Computing 1 AI Engineering 1 Command Line Utilities 1 Audio Processing 1 Swift Development 1 AI Frameworks 1 Multi-Agent Systems 1 JavaScript Frameworks 1 Media Applications 1 Mathematical Visualization 1 AI Infrastructure 1 Edge Computing 1 Financial Technology 2 Security Tools 1 AI/ML Tools 1 3D Graphics 2 Database Technology 1 Observability 1 RSS Readers 1 Next.js 1 SaaS Development 1 Docker Tools 1 DevOps Monitoring 1 Visual Programming 1 Testing Tools 1 Video Processing 1 Database Tools 1 Family Technology 1 Open Source Software 1 Motion Capture 1 Scientific Computing 1 Infrastructure 1 CLI Applications 1 AI and Machine Learning 1 Finance/Trading 1 Cloud Infrastructure 1 Quantum Computing 1
Advertisement
Advertisement