Hitch
A desktop API client built from scratch in Flutter — collections, environments, request history, and one-click OpenAPI/Swagger import for FastAPI and Express servers. No account, no cloud sync, no telemetry. Your requests live in plain JSON files on your machine.
State management is powered by Pico, a state management library I wrote and published myself rather than reaching for an existing one.

Why
I was tired of bouncing between five different API clients across projects and wanted something I fully understood and could shape around how I actually work — including a feature none of the mainstream tools do cleanly: pointing it at a running FastAPI server and getting a complete, working request collection with zero manual setup.
Features
- Request builder — full method support (GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS), headers, JSON/text bodies, Bearer/Basic/API Key auth.
- Collections — organize requests into named, reorderable collections, persisted as inspectable JSON files.
- Environments — define variables once (
{{base_url}},{{token}}, etc.), switch between Dev/Staging/Prod without touching a single request. - Response viewer — collapsible JSON tree view with syntax coloring, raw view toggle, response headers, status/timing/size.
- History — every request you send is logged locally; revisit or restore any past request.
- cURL export — copy any request as a ready-to-run
curlcommand. - Import/export — collections are portable JSON, shareable or git-trackable.
- OpenAPI/Swagger import — point hitch at a live FastAPI server's
/openapi.json(or any OpenAPI 3.x spec) and it generates a full collection: every route, method, path/query param, and a skeleton request body matching your Pydantic models. Refresh anytime to re-sync as your API evolves, without losing requests you've already edited.
Tech stack
| Layer | Choice |
|---|---|
| UI framework | Flutter (Linux, Windows, macOS) |
| State management | Pico — my own state management library |
| Persistence | Plain JSON files (collections, environments, history) — no embedded database |
| HTTP | http package |
| Spec parsing | OpenAPI 3.x |
Collections and environments are stored as human-readable JSON in your system's app-support directory — easy to inspect, diff, back up, or hand-edit if you want to.
Getting started
git clone https://github.com/LikhinMN/hitch.git
cd hitch
flutter pub get
flutter run -d linux # or -d windows / -d macos
Download a build
Pre-built binaries for Linux, Windows, and macOS are published on the Releases page for every tagged version.
macOS builds are unsigned (no Apple Developer account). You'll need to allow the app in System Settings → Privacy & Security after first launch.
OpenAPI import — quick demo
- Run any FastAPI app locally (it exposes
/openapi.jsonautomatically, no setup needed) - In hitch: Import from OpenAPI / Swagger → enter
http://localhost:8000 - Review the discovered routes, deselect anything you don't want, hit Import
- A full collection appears — every endpoint, with example bodies shaped to match your Pydantic models
For Express servers, hitch reads a standard OpenAPI spec the same way — just expose one via swagger-jsdoc or similar if your server doesn't already.
Project structure
lib/
models/ # HttpRequest, Collection, Environment, HistoryEntry
state/ # Pico stores
services/ # HttpService, StorageService, OpenApiImportService
widgets/
sidebar/ # collection tree, history list
request_builder/ # method/url/headers/body/auth tabs
response_viewer/ # tree view, raw view, headers
Roadmap / ideas
- Query param table (currently appended inline to the URL)
- GraphQL support
- Request chaining (use one response's data as the next request's input)
- Swagger 2.0 / older spec support
License
MIT — see LICENSE.
Built by Likhin M N · @LikhinMN