Posting
An open-source, keyboard-centric API client for the terminal, featuring YAML-based request storage, environment management, and scriptable workflows.
Posting is a beautiful, open-source terminal application designed for developing and testing APIs. Built by Darren Burns using the Textual Python framework, it provides an efficient, keyboard-centric interface that allows users to fly through their API workflows. Whether running locally on macOS, Windows, and Linux, or over SSH on remote machines and containers, Posting ensures that your API testing environment is always available and highly performant. Requests are saved in a human-readable, version-control-friendly YAML format, making it easy to track changes, collaborate, and maintain your collections alongside your code. The application supports complex workflows, including the use of environment variables loaded from dotenv files, pre-request and post-response Python scripting, and integration with external tools like editors and pagers.
Posting is engineered to be highly customizable and accessible. It features a jump mode for rapid navigation, a powerful command palette for executing actions, and comprehensive autocompletion for URLs, headers, and variables. The interface is fully themeable, with support for custom syntax highlighting powered by tree-sitter. Users can tailor their experience by adjusting keybindings, UI spacing, and layout configurations. Designed for speed, it avoids the overhead of traditional GUI-based API clients, ensuring that developers can stay in their terminal environment while handling sophisticated API interaction tasks effectively.
Some of the key features are:
- Keyboard-Centric Interface: Designed for high efficiency with full support for navigation, jump mode, and command execution via keyboard.
- Version-Control Friendly: All requests are stored as YAML files, making them perfect for tracking in Git or other version control systems.
- Environment Variables: Dynamically manage and inject data into requests using dotenv files, which can be hot-reloaded automatically.
- Python Scripting: Execute custom Python code before and after requests to prepare data, handle authentication, or perform validation.
- Extensive Import/Export: Import cURL commands by pasting directly into the URL bar and export requests back to cURL or YAML for sharing.
- Customizable UI: Choose from built-in themes, create your own, or adjust the layout, keymaps, and UI spacing to fit your preferences.
- Contextual Help: Access detailed keybinding information for any focused widget by pressing F1, ensuring a shallow learning curve.
- Cross-Platform: Operates seamlessly across macOS, Linux, and Windows, including containers and remote servers.
The application operates by loading a collection directory, where each request is represented as a YAML file. Users can navigate through these collections using a sidebar browser. When a request is selected, it populates the main UI, where parameters, headers, and body content can be edited. Posting uses an internal configuration system—modifiable via a local YAML config file or environment variables—to control behavior. Once configured, scripts can be attached to requests to handle dynamic data processing. During runtime, Posting watches for changes to scripts or environment files, updating the UI in real-time to reflect the new state, which provides a seamless development experience.
Some common use cases include:
- API Debugging: Quickly testing and iterating on RESTful API endpoints during local development or in production environments.
- CI/CD Integration: Using saved YAML request files as part of a documentation or testing suite within a project repository.
- Remote Testing: Connecting to remote servers or Docker containers over SSH to test APIs within the environment they are hosted in.
- Environmental Switching: Managing different configurations for development, staging, and production environments using separate dotenv files.
- Automated Workflow Preparation: Using Python scripts to generate dynamic tokens or signatures required for complex authenticated API requests.