mrkeyoor.com_
Wed 09 Sept 16:48 UTC
Dev Toolsevaluationupdated 09 Sept 2026

resty review

Resty is a Go HTTP client that turns common API work into chained method calls instead of repeated request setup and response plumbing. It handles bodies, authentication, retries, tracing, middleware, server-sent events, and other client concerns while still using Go's HTTP stack underneath.

trackingstars / 7d
Verdict

Our Resty run installed 6 packages, built in 27 seconds, and passed 2 of 2 Go test results, making it the easiest repository in this group to verify. Use v2 for a final release today, or trial v3 when its circuit breaker, hedging, load balancing, or SSE support saves real application code. Stay with net/http for simple clients, and test the named v3 edge cases before moving a production wrapper.

We ran it

Lab card: what happened when we ran restyScreenshot of resty (resty.dev)
Install✓ · 7s6 packages
Build✓ · 27s
Tests✓ · 57s2 passed · 0 failed of 2 (go test)
Repo56 files~26,758 lines of source · 3.4 MB · 3 CI workflows

Answers from our run

Does resty build from source?

Dependencies installed in 7 seconds (6 packages), and the build succeeded in 27 seconds. We cloned commit 51f294a into a clean Debian container with 3 CPUs and no project-specific setup.

Do resty's tests pass?

Yes: 2 of 2 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use resty?

Projects pinned below Go 1.23: the v3 README and module file require Go 1.23 or newer.

What are the alternatives to resty?

net/http, Req, go-retryablehttp. Our Resty run installed 6 packages, built in 27 seconds, and passed 2 of 2 Go test results, making it the easiest repository in this group to verify.

Setup5/57-second install and successful build and test commands
Docs4/5Wide v3 reference with a clear migration guide and examples
Community4/511,791 stars, September activity, and a small open queue
Maturity4/5Mature v2 line; feature-rich v3 remains a release candidate

Who it’s for

Go teams that call several JSON or form APIs and want one consistent client layer.
Services that need request-level retries, timeouts, middleware, tracing, or debug output.
v3 adopters who need circuit breakers, hedging, rate limits, load balancing, or SSE.
Maintainers willing to keep one long-lived client and close it during shutdown.

Who it’s NOT for

Projects pinned below Go 1.23: the v3 README and module file require Go 1.23 or newer.
Teams that accept only final releases: the default branch and current documentation cover v3, which is still a release candidate.
Clients depending on v3 SetFiles behavior matching v2: issue 1046 reports empty form data and an HTTP 412 response.
Monitoring code that assumes traced total time includes all retries: issue 1142 reports a 30-second retry path appearing as 363 ms.
Load-balancer users who need immediate failure feedback for connection errors: issue 1213 reports repeated selection of an unreachable host.
Small programs that need only a basic request: Go's standard net/http avoids another API layer and import.

Setup reality

Our sandbox installed 6 Go packages in 7 seconds. The build succeeded in 27 seconds, and go test reported 2 passed, 0 failed of 2 in 57 seconds. The checkout contained 56 files, about 26,758 source lines, and occupied 3.4 MB.

Resty needs no service, account, secret, or code generator. Version 3 uses the resty.dev/v3 module path and requires Go 1.23 or newer. Version 2 remains on github.com/go-resty/resty/v2, so migration changes both the import and parts of the API.

The current v3 line is a release candidate. Long-lived v3 clients should call Close during application shutdown because the client may own background resources such as certificate watchers and load balancers. Our scan found 3 CI workflows, no Dockerfile, and tests beside the source rather than in a tests directory.

Resty replaces repeated HTTP plumbing with one client API

Resty gives Go developers a fluent layer for building requests, encoding bodies, parsing responses, setting authentication, uploading files, tracing calls, and handling redirects. Client settings become defaults, while a request can override many of them. Middleware covers work before and after the round trip.

The repository stays compact despite that surface. Our checkout contained 56 files, about 26,758 source lines, and occupied 3.4 MB. Most tests live beside the implementation as Go convention encourages, so the absence of a tests directory is not a missing-test signal here.

Version 3 adds client-side resilience beyond retries

The v3 documentation covers retry conditions and delay strategies, request timeouts, circuit breakers, hedged requests, rate limiting, and load balancing. Round-robin and weighted round-robin algorithms are built in, including weighted SRV discovery, while a custom interface can choose another host-selection method.

Our install pulled only 6 packages in 7 seconds, a small cost for this feature set. Resty still sits above net/http, so transport settings and standard request behavior remain relevant.

What happened when we ran it

Our sandbox installed Resty in 7 seconds with 6 Go packages. The build then succeeded in 27 seconds. We used commit 51f294a in a fresh unprivileged golang:1.24-bookworm container with 3 CPUs, 8 GB of RAM, and no secrets. The 56-file checkout was 3.4 MB and contained roughly 26,758 lines of source.

The test command completed in 57 seconds, and go test reported 2 passed, 0 failed of 2. It also found no tests directory, while the repository tree places many _test.go files beside their source. These results confirm that the measured commit installed, compiled, and passed the available Go test invocation in our environment.

Version 3 is an RC while v2.17.2 is the stable release

Resty's default branch, README, module path, and current documentation focus on v3. The site labels v3 a release candidate, and the newest prerelease was v3.0.0-rc.4 on September 6, 2026. GitHub's latest stable endpoint instead returns v2.17.2, published February 14. Teams should make that choice explicitly because v3 changes the module path to resty.dev/v3 and includes breaking API changes documented in the upgrade guide.

Our lab used the 51f294a v3 commit and passed its 27-second build plus 57-second test step. That is good evidence for the candidate's repository health, but it does not turn an RC into a final release.

A v3 client should close once during application shutdown

Version 3 adds Client.Close because a client can own background resources, including certificate watchers and load balancers. The migration guide says not to close it after every request. Build one client for the intended scope, reuse it, and call Close during shutdown.

The 26,758-line codebase includes more stateful behavior than its 3.4 MB checkout suggests. Retry settings can exist at client and request level, response bodies may be streamed or saved, and resilience components keep their own timing and host state. A thin internal wrapper should expose context, shutdown, and the policies callers genuinely need.

Three open issues define specific v3 limits

Issue 1046 reports that a SetFiles request works on v2 but reaches an HTTP 412 response with empty form data on a v3 beta. Issue 1142 reports that TraceInfo().TotalTime showed 363 ms for an operation whose retry path consumed 30 seconds. Issue 1213 says a load balancer may select an unreachable host again because connection errors do not produce the expected feedback. Each report is narrow and remains open.

GitHub listed 19 open issues and pull requests when fetched, split into 9 issues and 10 pull requests in the API response. That is a manageable queue for an 11,791-star project, though volume alone says little about severity. For file uploads, tracing, or client-side balancing, turn the relevant report into a regression test before migration. The passing 2-of-2 lab result covers the repository command, not every application-specific combination.

The standard library wins when the request is simple

Go's net/http is the better default for a small client that sends a few requests and already has clear error handling. Resty earns its import when shared authentication, typed body handling, middleware, retries, tracing, or resilience policies would otherwise be rebuilt in each call site. Its fluent API can make ordinary work shorter, but it also gives a team another vocabulary and version boundary to maintain.

A 7-second install, 27-second build, and 57-second passing test step make comparison cheap. Req is the closest broad alternative, while go-retryablehttp is narrower when retry policy is the only missing piece. Heimdall also centers timeouts, retries, and circuit breaking. Pick by the smallest surface that covers the service's real needs, then test cancellation, body replay, redirects, and logging with the same transports used in production.

September activity supports v3, but migration still needs a gate

The last push was September 7, 2026, one day after v3.0.0-rc.4. That release fixed multipart shutdown, digest parsing, buffer ownership, SSE locking, hedging, and load-balancer concurrency, and it added tests and CI hardening. Combined with current issue replies and 10 open pull requests, the dates show active maintenance. They also show that v3 is still receiving fixes in code paths that production clients may exercise.

Our measured commit passed all 2 reported Go test results and built without special setup. Resty v2 is the conservative choice for teams that want a final tag, while v3 is a credible candidate for applications that need its broader resilience layer. Migration should include application tests for retries, uploads, traces, and shutdown. If those features are absent from your client, standard Go remains easier to explain and maintain.

Alternatives

ProjectWhat it isPick it when
net/httpGo's standard HTTP client gives full protocol control without an external dependency.pick this instead when requests are simple or your library should expose standard Go types directly.
ReqA fluent Go HTTP client with automatic handling for common request and response formats.pick this instead when its API and built-in development diagnostics fit your team better than Resty's v3 design.
go-retryablehttpA focused Go client that adds retry behavior around familiar HTTP requests.pick this instead when retries are the main missing feature and you do not need Resty's broader client toolkit.
HeimdallA Go HTTP client with timeout, retry, and circuit-breaker options.pick this instead when you want a smaller resilience-oriented surface and its maintenance profile suits your project.

What people are saying

  1. [github-trending] go-resty/resty

Sources

  1. Resty README
  2. Resty repository facts
  3. Resty v2.17.2 release
  4. Resty v3.0.0-rc.4 release
  5. Resty v3 upgrade guide
  6. v3 SetFiles issue 1046
  7. Trace total-time issue 1142
  8. Load-balancer feedback issue 1213

More dev tools reviews

CleanArchitecture · magika · PI-Desktop · chezmoi · iced · Files · the whole board →