unsubbed.co

Milkman

Released under MIT, Milkman provides craft and organize requests for any technology on self-hosted infrastructure.

A JavaFX-based API workbench, honestly reviewed. No marketing fluff, just what you actually get.

TL;DR

  • What it is: A free, MIT-licensed, JavaFX-based request/response workbench — think Postman, but faster to start, account-free, and built entirely around a plugin architecture [1].
  • Who it’s for: Developers who are fed up with Postman and Insomnia requiring accounts to use their own local tool, or anyone who wants a lightweight API client that doesn’t consume 500MB of RAM before you’ve even sent a request [1].
  • Cost savings: Postman’s paid plans start at ~$14/user/month. Milkman is free. Not “free tier with limits” — just free, forever, no login [1][2].
  • Key strength: It’s a Java app, not an Electron app. That means faster startup, lower memory usage, and genuine skinability via CSS themes. The plugin model means you can test REST, gRPC, GraphQL, WebSocket, and even databases with one tool [1].
  • Key weakness: 1,328 GitHub stars — a fraction of Postman’s or Bruno’s traction. This is a solo developer’s project, not a company-backed product. No collaboration features, no cloud sync, no team workspaces. If your team needs shared collections with real-time sync, this isn’t it [1][2].

What is Milkman

Milkman is a desktop API workbench built in JavaFX by a single developer (warmuuh) who got tired of Electron-based tools. The project README is blunt about the origin story: “I got sick of all those electron-based applications that need ages and loads of memory to start up. Therefore I created a JavaFX-based workbench for crafting requests / responses.” [1]

It’s not trying to be Postman. It’s trying to be Postman minus the bloat, minus the account requirement, and minus the vendor lock-in.

What makes it unusual is the architecture. Almost everything in Milkman is a plugin — HTTP requests, gRPC, GraphQL, WebSocket, database queries, importers, editors, themes. The core application handles workspaces, environments, collections, and requests. Everything else, including the HTTP client itself, is plugged in on top [1]. This means you extend it exactly as far as you need and no further.

The project gained a surge of attention in 2023 when Kong made Insomnia require an account to use. The README directly addresses Insomnia users: “Rest assured that the restriction of having an account in Postman (and now, Insomnia) was one of the main reasons to create Milkman and such a thing will never ever happen.” [1] It now supports direct import of Insomnia data, added specifically for refugees from that migration.

As of this review: 1,328 GitHub stars, MIT license, active nightly builds [1].


Why people choose it

No independent third-party reviews of Milkman as a developer tool were available at time of writing. What follows is based on the README, official documentation, and the project’s own stated design decisions [1][2].

The case for Milkman comes down to three compounding frustrations with the incumbents.

The account problem. Postman requires a free account. Insomnia now requires a free account. For a tool that sits entirely on your local machine and talks to your local API, this offends a lot of developers. Milkman has no accounts, no sign-in, no telemetry that we can verify. You download it, you run it.

The Electron problem. Postman and Insomnia are both built on Electron, which means they’re running a full Chromium browser to display a desktop app. That’s slow to start and heavy on memory. JavaFX is not glamorous but it is fast and lean by comparison. The README explicitly pitches startup speed as a feature [1].

The lock-in problem. Postman collections are proprietary. When Kong changed Insomnia’s terms, users discovered they couldn’t easily export their data. Milkman imports Postman v2.1 dump files and Insomnia exports, which is the right way to enter a market that keeps burning its users [1][2].

The plugin model also means that unlike Postman (which bolts on gRPC and GraphQL as enterprise features), Milkman handles all protocol types through the same interface. You’re not paying for a “Professional” plan to hit a gRPC endpoint.


Features

Core:

  • Workspaces, environments, collections, requests — the standard API client primitives [1][2]
  • Visual request builder with table-based editors for headers, params, body [1]
  • Environment variable substitution [1]
  • Test runner — execute a set of requests as a sequential test scenario [1][2]
  • Hotkeys documented in the features reference [2]
  • Themes via CSS — light and dark ship by default, custom themes possible [1][2]

Protocol plugins (available separately or via package managers):

  • HTTP/REST — included in the main distribution. JSON highlighting, proxy support (including Basic auth), SSE (server-sent events) support, chunked responses [1][2]
  • gRPC — service discovery, server reflection, streaming [1]
  • GraphQL — separate plugin [1]
  • WebSocket — available as plugin [1]
  • Database — including Cassandra; other database plugins exist in the plugin archive [1]

Import/Export:

  • Postman v2.1 dump import [1][2]
  • Insomnia export import [1]
  • Environment import from Postman and Insomnia [1]

Developer ergonomics:

  • CLI interfacemilkman-cli for editing and executing requests from the command line [1][2]
  • Slack command/milkman <privatebin-url> to share requests in Slack channels [1][2]
  • Plugin management UI from version 5.8.0 onward [1]

Platform packaging:

  • Windows: milkman.exe or Chocolatey (choco install milkman, choco install milkman-plugins for all plugins) [1][2]
  • macOS: Homebrew (brew install --cask milkman, all plugins included) [1][2]
  • Linux: manual download and unzip [1]

What it doesn’t have:

  • No cloud sync
  • No team workspaces
  • No real-time collaboration
  • No built-in mock server
  • No API documentation generation
  • No monitoring or scheduled runs

Pricing: the commercial alternative math

Milkman is free. MIT license. No tiers. No limits [1].

The relevant comparison is what you’d otherwise pay:

Postman:

  • Free: 3 collections, 1,000 monthly calls to the Postman API, limited mock calls and monitors
  • Basic: ~$14/user/month — unlimited collections, 100K mock server calls, basic team features
  • Professional: ~$29/user/month — more mocks, monitors, custom domains, SSO
  • Enterprise: custom pricing

A 5-person team on Postman Professional is ~$1,740/year. Milkman is $0/year.

Insomnia:

  • Individual: free (but requires account and sync)
  • Team: $8/user/month (~$480/year for 5 users)
  • Business: $18/user/month

Bruno (the other main account-free alternative): also free, but different trade-offs (stores collections as files in your git repo, Electron-based).

The pricing math for Milkman is simple: if your use case is individual developers or small teams who don’t need cloud sync or collaboration features, the cost savings are the entire subscription you’re currently paying. The catch is that “free with no collaboration” is only the right trade-off for certain teams.


Deployment reality check

Milkman is a desktop application, not a server. There’s no VPS to provision, no Docker container to maintain, no nginx config to write.

Installation on macOS (easiest path):

brew install --cask milkman

All plugins included. Updates via brew upgrade --cask. This is the path that just works [1][2].

Installation on Windows:

choco install milkman-plugins

Installs Milkman and all available plugins under C:\tools\milkman [1][2].

Manual installation (all platforms): Download the release zip from GitHub, download the plugin archive separately if you want protocol plugins, unzip both into the same directory, run the start script or milkman.exe [1]. This requires more attention but works if you don’t use a package manager.

What can go sideways:

  • Milkman is a Java application. The releases appear to bundle what they need for the .exe path on Windows, and Homebrew handles dependencies on macOS. But if you go the manual Linux route, JVM dependency management is on you.
  • Plugins are versioned separately from the core application. If you update Milkman and don’t update plugins, you may hit compatibility issues. The plugin management UI added in 5.8.0 helps with this [1].
  • The Slack integration requires a running PrivateBin instance to paste request content — it’s not a native Slack app. This is a minor friction point for teams that actually want to use that feature [1][2].
  • No nightly builds guarantee stability. The project offers nightly releases for latest features, but these come with the usual caveat of unreleased software [1].

Realistic time to a working instance: 5 minutes on macOS or Windows via package manager. Manual install on Linux: 15–30 minutes depending on Java setup.


Pros and cons

Pros

  • No account required. Ever. The README explicitly names this as a founding principle. Install it, open it, send a request [1].
  • Not Electron. JavaFX loads faster and uses less memory than Postman or Insomnia. If you’ve ever watched a Postman window spend 10 seconds rendering, you’ll appreciate this [1].
  • MIT license. Fork it, embed it, build on it. No licensing restrictions, no commercial use clauses [1].
  • Plugin architecture means real extensibility. This isn’t “add custom scripts in a sandboxed code box.” The plugin model covers request types, editors, importers, and themes — it’s the actual extension surface, not a bolted-on scripting layer [1].
  • Multi-protocol out of the box. HTTP, gRPC, GraphQL, WebSocket, and database queries under one interface. You’re not upgrading to a paid tier for gRPC [1].
  • Postman and Insomnia import. Migration path exists and was specifically added when Insomnia broke its users in 2023 [1].
  • CLI included. milkman-cli means you can script requests from the command line without a separate tool [1][2].

Cons

  • Solo developer project. 1,328 stars and a single maintainer. This is not a company with a support team, a roadmap with quarterly commitments, or a track record of sustained investment. If the developer loses interest, the project stalls [1].
  • No collaboration features. Zero. No shared workspaces, no team collections, no cloud sync. If your workflow involves multiple developers sharing and reviewing API collections, Milkman is the wrong tool [1][2].
  • No mock server. Postman’s mock server functionality has no equivalent here. If you’re building against an API that doesn’t exist yet and need to stub responses, you need a separate tool [2].
  • Plugin fragmentation. The fact that everything is a plugin means you need to actively manage a plugin archive alongside the core download. Homebrew handles this cleanly; manual installs are more friction [1].
  • No web interface. It’s a desktop application only. No browser-based access, no sharing a link to a collection with a non-developer [2].
  • Limited community. Small GitHub star count means the forum, Gitter channel, and wiki are thin compared to Postman’s documentation ecosystem. Unusual problems will need you to read source code [1].
  • No API monitoring, scheduling, or automated testing pipeline. For CI/CD integration you’d still reach for something like Bruno (Git-native collections), Hurl, or a dedicated test framework [2].
  • Java. Some developers have strong feelings about running a JVM-based application for what amounts to HTTP tooling. The startup speed improvement over Electron is real, but this is still not a lightweight native app [1].

Who should use this / who shouldn’t

Use Milkman if:

  • You’re a solo developer who is done with Postman’s account wall and doesn’t need collaboration.
  • You work across multiple protocols (REST + gRPC + GraphQL) and don’t want to maintain three separate tools.
  • You’re migrating away from Insomnia after the Kong account requirement change and want a clean import path.
  • You care about startup time and memory usage enough to accept a Java app over an Electron one.
  • You want a tool that will never gate features behind a paywall.

Skip it (use Bruno instead) if:

  • You want account-free and Electron-free, but you also want your collections stored as files in your Git repo.
  • You need a more active contributor community and faster issue resolution.
  • Cross-platform native feel matters more than protocol breadth.

Skip it (stay on Postman) if:

  • Your team shares collections and environments in real time.
  • You rely on Postman Monitors, mock servers, or API documentation generation.
  • You need enterprise SSO and audit logs.
  • Your junior developers need the extensive Postman tutorial ecosystem to get started.

Skip it (use Insomnia or HTTPie) if:

  • You’re on a team that already has an Insomnia Enterprise subscription and the account requirement is acceptable.
  • You prefer a polished, design-first UI over extensibility.

Alternatives worth considering

  • Bruno — the strongest account-free alternative. Electron-based (slower than Milkman), but stores collections as files on disk in Git-friendly format. More actively maintained and growing faster. If Git-native collections matter, Bruno is probably the better choice.
  • Postman — the incumbent. Largest integration catalog, best documentation, best collaboration features, most expensive, requires account even for local use.
  • Insomnia — was a strong Postman alternative until Kong required accounts in 2023. Still usable, but the trust damage is done.
  • HTTPie Desktop — clean UI, account-free free tier, good for REST-only workflows. Less extensible than Milkman.
  • Hurl — command-line only. If you want scripted HTTP testing in CI/CD, Hurl is purpose-built for it and doesn’t need a desktop app at all.
  • curl + jq — for developers who want zero dependencies and don’t mind writing requests manually. Not a recommendation, just an acknowledgment that it exists.

The realistic shortlist for an account-free, free-as-in-freedom developer tool is Milkman vs Bruno. Pick Milkman if multi-protocol support and startup speed matter. Pick Bruno if Git-native collections and a larger community matter.


Bottom line

Milkman fills a real gap: a free, account-free, multi-protocol API client that doesn’t run on Electron. For a solo developer or small team who has been bitten by Postman’s account requirement, Insomnia’s 2023 policy change, or both, it offers a clean exit with a working import path. The plugin architecture is genuinely extensible, and the JavaFX foundation gives it a speed advantage over the Electron incumbents.

The trade-off is significant, though. This is a one-person project with 1,328 stars — not a company product with a roadmap and a support team. There are no collaboration features, no cloud sync, no mock server, no monitoring. If any of those matter for your workflow, Milkman isn’t a complete solution and you’ll be stitching it together with other tools.

For the developer who wants a fast, local, private API workbench that just works without an account — it delivers on that promise. For a team, it’s a component, not a platform.


Sources

  1. GitHub — warmuuh/milkman — README, feature documentation, and plugin reference. https://github.com/warmuuh/milkman
  2. Milkman official documentation — Installation, features, plugin list, Slack integration. https://milkman.dev/docs/

Features

Integrations & APIs

  • Plugin / Extension System
  • REST API
  • Slack Integration

Customization & Branding

  • Themes / Skins

Mobile & Desktop

  • Desktop App