Back to projects
Dart

hitch

Postman-style desktop API client — collections, environments, history, OpenAPI import.

DartFlutterOpenAPISwagger

Hitch Logo

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.

hitch main window

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 curl command.
  • 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

LayerChoice
UI frameworkFlutter (Linux, Windows, macOS)
State managementPico — my own state management library
PersistencePlain JSON files (collections, environments, history) — no embedded database
HTTPhttp package
Spec parsingOpenAPI 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

  1. Run any FastAPI app locally (it exposes /openapi.json automatically, no setup needed)
  2. In hitch: Import from OpenAPI / Swagger → enter http://localhost:8000
  3. Review the discovered routes, deselect anything you don't want, hit Import
  4. 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