By creating this pull request, I grant the project maintainers an unlimited,
perpetual license to use, modify, and redistribute these contributions under any terms they
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
represent that I have the right to grant this license for all contributed content.
Pangolin previously only supported injecting custom headers into requests forwarded to downstream targets (customRequestHeaders). This PR adds responseHeaders and renames the existing headers field to requestHeaders throughout the stack for clarity. This was already possible in Treafik, so it was simply adding responseHeaders to the code where (request) headers appeared.
The blueprint code is also updated to still be backwards compatible. headers in pangolin.yml works as alias for requestHeaders. Both requestHeaders and responseHeaders are now accepted and if both headers and requestHeaders are specified, they are merged.
I also let Claude do the translations, I am unsure if they are correct. But the languages I speak are good.
How to test?
Set request and response headers on a resource via the UI, save, and confirm the Traefik dynamic config reflects both customRequestHeaders and customResponseHeaders
curl -v through Traefik confirms response headers appear on the HTTP response and request headers arrive at the upstream target
Existing resources with headers set in a blueprint continue to work after migration
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/fosrl/pangolin/pull/3171
**Author:** [@Gulianrdgd](https://github.com/Gulianrdgd)
**Created:** 5/27/2026
**Status:** ❌ Closed
**Base:** `main` ← **Head:** `main`
---
### 📝 Commits (8)
- [`9a942e7`](https://github.com/fosrl/pangolin/commit/9a942e713f7845cb80bf2bc42df2660d71f031a5) Ready for testing
- [`24d0c1a`](https://github.com/fosrl/pangolin/commit/24d0c1ae111d90b7602ef78fe46b6d73acd75985) tested and translated!
- [`64339ee`](https://github.com/fosrl/pangolin/commit/64339ee35fdd4c9cc4b6b7f28da71cf4fbd9e0c8) Reverted package-lock.json
- [`f811c9b`](https://github.com/fosrl/pangolin/commit/f811c9b9ffb270b231d16bd3cb467578c7833cc3) Forgot about blueprints
- [`c98dc1f`](https://github.com/fosrl/pangolin/commit/c98dc1fc6b4fb4bde16ded256cbabf8342304f86) Fixed copilot issue.
- [`4051064`](https://github.com/fosrl/pangolin/commit/4051064cb9c11bb9172f697f469d6f44e4dd1124) Fixed copilot issue.
- [`8ccfa9c`](https://github.com/fosrl/pangolin/commit/8ccfa9cccb884f48d480b0f41c7ef096f58ce981) Fixed copilot issue.
- [`ec07f42`](https://github.com/fosrl/pangolin/commit/ec07f42d401d31eedda40fcb3ec304780f814bf9) Removed migrations
### 📊 Changes
**27 files changed** (+271 additions, -121 deletions)
<details>
<summary>View changed files</summary>
📝 `messages/bg-BG.json` (+4 -2)
📝 `messages/cs-CZ.json` (+4 -2)
📝 `messages/de-DE.json` (+4 -2)
📝 `messages/en-US.json` (+4 -2)
📝 `messages/es-ES.json` (+4 -2)
📝 `messages/fr-FR.json` (+4 -2)
📝 `messages/it-IT.json` (+4 -2)
📝 `messages/ko-KR.json` (+4 -2)
📝 `messages/nb-NO.json` (+4 -2)
📝 `messages/nl-NL.json` (+4 -2)
📝 `messages/pl-PL.json` (+4 -2)
📝 `messages/pt-PT.json` (+4 -2)
📝 `messages/ru-RU.json` (+4 -2)
📝 `messages/tr-TR.json` (+4 -2)
📝 `messages/zh-CN.json` (+4 -2)
📝 `messages/zh-TW.json` (+4 -2)
📝 `server/db/pg/schema/schema.ts` (+2 -1)
📝 `server/db/sqlite/schema/schema.ts` (+2 -1)
📝 `server/lib/blueprints/proxyResources.ts` (+15 -6)
📝 `server/lib/blueprints/types.ts` (+3 -1)
_...and 7 more files_
</details>
### 📄 Description
## Community Contribution License Agreement
By creating this pull request, I grant the project maintainers an unlimited,
perpetual license to use, modify, and redistribute these contributions under any terms they
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
represent that I have the right to grant this license for all contributed content.
## Description
Closes #2789 and feature request: #1939
Pangolin previously only supported injecting custom headers into requests forwarded to downstream targets (`customRequestHeaders`). This PR adds `responseHeaders` and renames the existing `headers` field to `requestHeaders` throughout the stack for clarity. This was already possible in Treafik, so it was simply adding responseHeaders to the code where (request) headers appeared.
The blueprint code is also updated to still be backwards compatible. `headers` in `pangolin.yml` works as alias for `requestHeaders`. Both `requestHeaders` and `responseHeaders` are now accepted and if both `headers` and `requestHeaders` are specified, they are merged.
I also let Claude do the translations, I am unsure if they are correct. But the languages I speak are good.
## How to test?
- Set request and response headers on a resource via the UI, save, and confirm the Traefik dynamic config reflects both `customRequestHeaders` and `customResponseHeaders`
- `curl -v` through Traefik confirms response headers appear on the HTTP response and request headers arrive at the upstream target
- Existing resources with `headers` set in a blueprint continue to work after migration
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/fosrl/pangolin/pull/3171
Author: @Gulianrdgd
Created: 5/27/2026
Status: ❌ Closed
Base:
main← Head:main📝 Commits (8)
9a942e7Ready for testing24d0c1atested and translated!64339eeReverted package-lock.jsonf811c9bForgot about blueprintsc98dc1fFixed copilot issue.4051064Fixed copilot issue.8ccfa9cFixed copilot issue.ec07f42Removed migrations📊 Changes
27 files changed (+271 additions, -121 deletions)
View changed files
📝
messages/bg-BG.json(+4 -2)📝
messages/cs-CZ.json(+4 -2)📝
messages/de-DE.json(+4 -2)📝
messages/en-US.json(+4 -2)📝
messages/es-ES.json(+4 -2)📝
messages/fr-FR.json(+4 -2)📝
messages/it-IT.json(+4 -2)📝
messages/ko-KR.json(+4 -2)📝
messages/nb-NO.json(+4 -2)📝
messages/nl-NL.json(+4 -2)📝
messages/pl-PL.json(+4 -2)📝
messages/pt-PT.json(+4 -2)📝
messages/ru-RU.json(+4 -2)📝
messages/tr-TR.json(+4 -2)📝
messages/zh-CN.json(+4 -2)📝
messages/zh-TW.json(+4 -2)📝
server/db/pg/schema/schema.ts(+2 -1)📝
server/db/sqlite/schema/schema.ts(+2 -1)📝
server/lib/blueprints/proxyResources.ts(+15 -6)📝
server/lib/blueprints/types.ts(+3 -1)...and 7 more files
📄 Description
Community Contribution License Agreement
By creating this pull request, I grant the project maintainers an unlimited,
perpetual license to use, modify, and redistribute these contributions under any terms they
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
represent that I have the right to grant this license for all contributed content.
Description
Closes #2789 and feature request: #1939
Pangolin previously only supported injecting custom headers into requests forwarded to downstream targets (
customRequestHeaders). This PR addsresponseHeadersand renames the existingheadersfield torequestHeadersthroughout the stack for clarity. This was already possible in Treafik, so it was simply adding responseHeaders to the code where (request) headers appeared.The blueprint code is also updated to still be backwards compatible.
headersinpangolin.ymlworks as alias forrequestHeaders. BothrequestHeadersandresponseHeadersare now accepted and if bothheadersandrequestHeadersare specified, they are merged.I also let Claude do the translations, I am unsure if they are correct. But the languages I speak are good.
How to test?
customRequestHeadersandcustomResponseHeaderscurl -vthrough Traefik confirms response headers appear on the HTTP response and request headers arrive at the upstream targetheadersset in a blueprint continue to work after migration🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.