Requestkit is inspired by Stripe’s CLI to send payloads to your app, but it instead can send (and receive!) any payload. It runs entirely on your machine. It’s a local HTTP server that captures incoming HTTP requests (webhooks) and send outbound requests (API).
Requestkit is fast, requires zero configuration and configuration can be easily shared within projects. Install it as a Ruby gem, start the server and point your webhooks to localhost:4000.

⭐ Star the project on GitHub ⭐
Tell me more!
Requestkit is a local HTTP request toolkit for development. Sounds fancy, but what can you do with it?
- See webhook payloads: view complete headers and body data for every request in a clean interface;
- Send HTTP requests: test outbound HTTP calls to your local API endpoint or external services and inspect their responses;
- Organize by namespace: automatically groups requests by URL path (e.g.,
/stripe,/github) for easy filtering; - Persist across restarts: optional file storage keeps your request history between sessions.
How does it work?
Requestkit runs as a local web server on your machine (default: http://localhost:4000). When you send any HTTP request to it, Requestkit captures the complete request including headers and body, then stores it for inspection. Open the web app in your browser to see all captured requests organized by namespace, with full details available at a glance.
The tool uses SQLite for storage, giving you the choice between in-memory mode (fast, temporary) or file-based persistence. You can configure defaults via YAML files at the user or project level and override them with CLI flags. Namespaces are automatically extracted from URL paths, so /stripe/webhook goes into the “stripe” namespace while /github/push goes into “github”.
In short:
- Install via
gem install requestkit; - Start with
requestkit(or customize port/storage with flags); - Send requests to
http://localhost:4000/your-namespace/path; - For outbound requests, create JSON files defining the HTTP call (in
.requestkit/requests/:namespace/:name.json); - View everything in your browser at
http://localhost:4000.

Behind the scenes
Requestkit is built with Ruby and uses some interesting tools. It uses Ruby Async with Server-Sent Events (SSE) to push new requests to the browser instantly, so the codebase stays lightweight and dependencies minimal. The server itself runs on async-http, which handles concurrent connections efficiently without the overhead of a full web framework.
Storage is handled by SQLite3 with a simple schema that tracks request direction (inbound & outbound), namespaces, timestamps and parent relationships for request/response pairs (to be used later). The web UI is a single ERB template with vanilla CSS (using tailwindcss-ruby). No JavaScript frameworks, but using Attractive.js for the odd interactivity. For outbound requests, Requestkit uses async-http with custom SSL contexts to handle HTTPS endpoints.
As with most OSS I share (gift), I publish a very early first version in the hopes to inspire you to build along with me. 😊 Explore the code and contribute on GitHub
💬 Over to you…
What did you like about this article? Learned something knew? Found something is missing or even broken? 🫣 Let me (and others) know!
Comments are powered by Chirp Form
{{comment}}