feat(http): make Gun the default HTTP client

Hackney 4 reads every response completely before Pleroma can check its
size, so max_body no longer limits downloads or memory there; Gun stops
at the limit. Document the Hackney limitation for those who switch back.
This commit is contained in:
Lain Soykaf 2026-10-22 16:31:44 +04:00
commit b2e4580a81
No known key found for this signature in database
4 changed files with 26 additions and 1 deletions

View file

@ -0,0 +1 @@
Gun is now the default HTTP client instead of Hackney

View file

@ -161,7 +161,7 @@ config :mime, :types, %{
"image/apng" => ["apng"]
}
config :tesla, adapter: Tesla.Adapter.Hackney
config :tesla, adapter: Tesla.Adapter.Gun
# Hackney 4 shares one HTTP/2 connection per host, and closing one response
# (as the media proxy does) stops it for every other stream on it.

View file

@ -541,6 +541,15 @@ Available caches:
## HTTP client
Pleroma uses [Gun](https://github.com/ninenines/gun) for outgoing HTTP requests. To use Hackney instead:
```elixir
config :tesla, adapter: Tesla.Adapter.Hackney
```
!!! note
With Hackney, size limits for fetched responses (for example for link previews) are checked only after Hackney has read the whole response. They limit what Pleroma keeps, not how much it downloads or holds in memory. Gun stops reading at the limit.
### :http
* `proxy_url`: an upstream proxy to fetch posts and/or media with, (default: `nil`)
@ -550,6 +559,8 @@ Available caches:
### :hackney_pools
*For `hackney` adapter*
Advanced. Tweaks Hackney (http client) connections pools.
There's three pools used:

View file

@ -0,0 +1,13 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.HTTP.DefaultAdapterTest do
use ExUnit.Case, async: true
# The test environment uses Tesla.Mock, and config.exs imports the config
# of the current Mix env, so check the shipped default in the file itself.
test "Gun is the default HTTP client" do
assert File.read!("config/config.exs") =~ ~r/^config :tesla, adapter: Tesla.Adapter.Gun$/m
end
end