github.com/gatewayd-io/gatewayd
v0.11.1
#2759 most downloaded on Go modules
gatewayd-io/gatewayd
What this package is like to depend on
Last release 6 months ago
22 Feb 2026
Release timing varies
gaps range from 2 weeks to 6 months
Rarely documented
notes for 10 of 91 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
121 releases · first in 2022
2 releases in the last 12 months
see the full history below
Release timeline
121 releases · Oct 2022 to Feb 2026Releases
latest 60 of 121-
v0.11.122 Feb 2026Release notes
Open source →Patch release fixing a connection pool exhaustion bug that affects deployments using plugins with the
Terminateaction (e.g. gatewayd-plugin-cache).Bug Fix
Fix connection pool exhaustion in
PassThroughToClient(#731)When a plugin returned the
Terminateaction (e.g. cache hit), the client-to-server goroutine would set a backend read deadline and exit. The server-to-client goroutine then calledreceiveTrafficFromServer, which returnedreceived == 0with a deadline-exceeded error. However,PassThroughToClientsilently discarded the error whenreceived == 0and returnednil, causing the goroutine to spin in an infinite loop:Received data from database function=proxy.passthrough length=0Because the goroutine never exited,
OnTrafficnever returned,Disconnectnever ran, and the backend connection was permanently leaked. Under sustained traffic this exhausted the entire connection pool.Fix: Propagate the error when
received == 0 && err != nilso the goroutine exits cleanly and the connection is properly recycled.Other Changes
- Upgrade to Go 1.25 and Alpine 3.23
- Update direct dependencies
- Add extensive CI plugin tests for cache, auth, js, and sql-ids-ips plugins (#731)
Companion Release
- gatewayd-plugin-cache v0.5.1 — fixes a data race in
OnTrafficFromServerwhere thev1.Structresponse pointer was shared between gRPC serialization and theUpdateCachegoroutine, causing corrupted responses
Full Changelog: v0.11.0...v0.11.1
-
v0.11.016 Feb 2026Release notes
Open source →After more than 6 months since v0.10.3, we're excited to ship GatewayD v0.11.0, a significant releases in the project's history. The highlight is pre-authenticated backend pool connections, a foundational capability that transforms how GatewayD manages PostgreSQL connections and unlocks critical use cases like identity brokering via the auth plugin.
Highlights
Pre-Authenticate Backend Pool Connections (#721)
This is the most important change in v0.11.0. Previously, backend connections in the pool were raw TCP sockets. They had no PostgreSQL session state until a client connected and the startup handshake was forwarded through. With pre-auth, GatewayD now performs the full PostgreSQL startup handshake (including authentication) immediately after establishing each backend TCP connection, so pool connections are ready for queries before any client arrives.
Why pre-auth matters:
- Enables the auth plugin's identity broker model. The auth plugin can now authenticate frontend clients independently (via custom credentials and soon federated identity providers) and map them onto pre-authenticated backend connections. Without pre-auth, the auth plugin had no way to decouple frontend and backend authentication.
- DISCARD ALL-based connection recycling. When a client disconnects, GatewayD now sends
DISCARD ALLto reset the backend session state instead of tearing down and re-establishing the TCP connection. This is significantly faster and reduces load on the PostgreSQL server. - Full authentication method support. The startup handshake supports trust, cleartext, MD5, and SCRAM-SHA-256 authentication, covering all common PostgreSQL configurations.
Configure it via the new
startupParamsblock in the client config:clients: default: writes: startupParams: user: postgres database: postgres password: postgres
Improved Connection Lifecycle & Shutdown
The traffic handling model in
OnTraffichas been redesigned. Instead of using channels to coordinate the client-to-server and server-to-client goroutines, both goroutines now participate in async.WaitGroup.OnTrafficblocks until both goroutines have fully exited, guaranteeing the backend connection is idle before attempting session reset or recycling. This eliminates a class of race conditions whereDISCARD ALLcould collide with a still-active reader.Additionally, the shutdown sequence has been improved: the server status is now set to "stopped" before proxies are shut down, so
OnClosehooks can detect the shutdown-in-progress state and avoid spurious error logs. Expected shutdown errors (e.g.ErrClientNotFoundduring cleanup) are now logged at DEBUG level instead of ERROR.Unified Raft Log Adapter (#686)
A new
StandardLogWritercaptures Go stdliblogoutput (used internally by raft-boltdb) and redirects it through zerolog with proper formatting and the"component": "raftboltdb"tag. Raft TCP transport output is now discarded instead of writing to stderr. This ensures all log output flows through GatewayD's structured logging pipeline.hclog Format String Handling (#689)
Fixed a bug where
hclog.Formatvalues (used by hashicorp/go-plugin) were not rendered correctly in the hclog-to-zerolog adapter. Format strings are now properly interpolated viafmt.Sprintf.Other Changes
- Race condition fix in Client.Send/Receive: The connection is now snapshotted under a mutex to prevent races with concurrent
Close()calls. - New Proxy methods:
ExpireBackendReadDeadline()andClearBackendDeadline()allow precise control over backend connection deadlines during goroutine teardown. - New error codes:
ErrCodePgStartupFailedandErrCodePgResetSessionFailedfor pre-auth error handling. - Test improvements: Replaced
zerolog.Logger{}andzerolog.New(nil)withzerolog.Nop()across all test files for correctness. - Makefile: Added
test-postgres-upandtest-postgres-downtargets for running local PostgreSQL containers during development. - Renovate: Added Renovate configuration for automated dependency management.
- Documentation: Fixed markdown formatting across all CLI docs.
Dependency Updates
Major dependency bumps include:
Dependency Old New gatewayd-plugin-sdk v0.4.3 v0.4.4 OpenTelemetry v1.37.0 v1.40.0 gRPC v1.74.2 v1.79.1 jackc/pgx v5.7.5 v5.8.0 redis/go-redis v9.12.0 v9.18.0 hashicorp/go-plugin v1.6.3 v1.7.0 sentry-go v0.35.0 v0.42.0 protobuf v1.36.7 v1.36.11 testcontainers-go v0.38.0 v0.40.0 New dependency:
xdg-go/scramv1.2.0 for SCRAM-SHA-256 authentication support.Full Changelog: v0.10.3...v0.11.0
-
v0.10.307 Aug 2025Release notes
Open source → -
v0.10.218 May 2025Release notes
Open source →What's Changed
- Add Raft State Management for Load Balancers by @sinadarbouy in #641
- Add Raft Node Support for Health Checks and Metrics Collection by @sinadarbouy in #643
- Refactor commands by @mostafa in #644
- Refactor scheduler functions by @mostafa in #649
- Refactor compat policy by @mostafa in #650
- Update deps by @mostafa in #657
- Add Raft cluster peer management (GetPeers, AddPeer, RemovePeer) by @sinadarbouy in #663
- Update deps by @mostafa in #666
Full Changelog: v0.10.1...v0.10.2
-
v0.10.114 Dec 2024Release notes
Open source →This release introduces Raft-based state management for GatewayD to ensure efficient and consistent coordination between multiple instances. By leveraging HashiCorp’s Raft implementation, GatewayD now maintains a unified state for parameters like connection pools and load-balancer strategies across all instances in a cluster, ensuring high availability, consistency, scalability, and efficiency.
Key Features and Objectives:
-
High Availability: Ensures the system remains operational even if individual instances fail. Raft provides fault tolerance by replicating state across multiple nodes, enabling consistent state retrieval and updates during failover scenarios.
-
Consistency: Guarantees that all instances in the cluster share the same view of stateful parameters, such as connection pools and load-balancer strategies, maintaining synchronized operations across distributed instances.
-
Scalability: Simplifies state coordination in clusters, enabling seamless scaling of GatewayD instances without introducing inconsistencies or requiring manual intervention.
-
Efficiency: Propagates updates to stateful parameters in real-time, ensuring optimal load balancing and resource utilization across instances.
Implementation Details:
- Unified State Management: A single Raft cluster handles stateful parameters as key-value pairs, ensuring consistency across nodes without the need for complex databases.
- Real-time Updates: Changes in one instance are immediately propagated to others, maintaining consistency and optimal load balancing.
- Fault Tolerance and Recovery: Raft’s persistence via BoltDB ensures reliability, while in-memory runtime state management simplifies operations.
This update resolves inconsistencies in the previous per-instance state management approach, ensuring scalable and robust operation for GatewayD clusters. A huge thanks to @sinadarbouy for his excellent work on this implementation! 🎉
This release also includes several critical updates and fixes to enhance security, improve performance, and maintain compatibility:
Security Updates:
- OpenSSL Update: Upgraded to
3.3.2-r1to address CVE-2024-9143. - Crypto Library Fix: Resolved CVE-2024-45337 by updating
golang.org/x/cryptoto the latest version.
Dependency Updates:
- GitHub Actions: Updated
softprops/action-gh-releasetov2for enhanced functionality and compatibility. - Direct Dependencies: Updated direct dependencies to their latest stable versions.
Development Improvements:
- SDK Update: Updated the SDK to the latest version.
- Go Updates: Upgrade Go to the latest version.
- Protobuf Changes: Regenerated Protobuf message stubs with HTTP annotations for improved API compatibility.
Linter Fixes:
- Addressed all issues reported by linters to ensure cleaner and more maintainable code.
What's Changed
- Update deps by @mostafa in #631
- feat(raft): Implement Raft-based Consistent Hash State Management by @sinadarbouy in #636
- Update deps by @mostafa in #639
Full Changelog: v0.10.0...v0.10.1
-
-
v0.10.1-0.20241127092213-cb993b28038227 Nov 2024 pre-releaseNothing published for this version
-
v0.10.1-0.20241111115701-6184a83de26011 Nov 2024 pre-releaseNothing published for this version
-
v0.10.009 Nov 2024 -
v0.9.11-0.20241109120212-7f47dca74c2609 Nov 2024 pre-releaseNothing published for this version
-
v0.9.1012 Oct 2024Release notes
Open source →This release marks the culmination of the v0.9.x milestone, packed with significant new features, fixes, and enhancements that have made GatewayD more robust, stable, and scalable. Key highlights include the introduction of the policy engine, aka. the Act system, in v0.9.0, the plugin scaffold feature in v0.9.5, and the load balancing feature in v0.9.7, among many others.
Over the course of this milestone, we merged 89 squashed commits into the
mainbranch, resolved 30 issues, reviewed numerous PRs and published 11 releases — thanks to the perseverance and contributions of our amazing community. None of this would have been possible without their dedication.Looking ahead, there's even more in store, and we invite you to get involved. Whether you're a user or a tester, your participation is crucial. If you're ready to contribute, @mostafa is here to support you every step of the way.
Full Changelog: v0.9.9...v0.9.10
-
v0.9.10-0.20241012124159-37fec6114bac12 Oct 2024 pre-releaseNothing published for this version
-
v0.9.10-0.20241011115011-3090c585f07a11 Oct 2024 pre-releaseNothing published for this version
-
v0.9.911 Oct 2024Release notes
Open source →What's Changed
- Add metric labels by @mostafa in #612
- Add test for
plugin scaffoldcommand by @mostafa in #613 - Refactor
interface{}toanyby @mostafa in #614 - Refactor
proxy.shouldTerminatefunction and move the functionality toAct.Registryby @mostafa in #615 - Use the result of notification hooks by @mostafa in #616
- Update deps by @mostafa in #621
Full Changelog: v0.9.8...v0.9.9
-
v0.9.829 Sep 2024Release notes
Open source →This release introduces several key enhancements and fixes. A significant improvement is the integration of PostgreSQL test containers for seamless integration testing, replacing hardcoded addresses with dynamic test container addresses. This ensures a consistent test environment across various packages such as
api,cmd, andnetwork, and centralizes the setup in a reusable function. Additionally, dependency updates were made, including the latest GatewayD SDK, and thegomoddirectiveslinter was disabled to streamline development. The plugin configuration was updated to utilize the cache plugin version 0.4.0. A major bug has been fixed that improved handling of PostgreSQL'sCOPYcommand, as explained here, plus other bugfixes and improvements.This wouldn't be possible without @sinadarbouy's contributions. 🙏
What's Changed
- Add PostgreSQL Test Containers for Integration Testing by @sinadarbouy in #602
- Update deps by @mostafa in #609
- Fix bug in handling postgres
COPYcommand and a few others by @mostafa in #610
Full Changelog: v0.9.7...v0.9.8
-
v0.9.8-0.20240929182237-9ec6b54128ee29 Sep 2024 pre-releaseNothing published for this version
-
v0.9.709 Sep 2024Release notes
Open source →This release contain a major change, where each tenant can now connect to multiple databases, contrary to the previous one-tenant-one-database approach, and use server load balancing strategies to distribute the load among these databases. Random, round robin and weighted RR strategies with consistent hashing are supported, thanks to @sinadarbouy and @eabasir for their contributions.
What's Changed
- Changed the log level for plugin startup failures from debug to error by @sinadarbouy in #560
- Update deps by @mostafa in #561
- Remove the enforced value of the ARCH in docker-compose by @eabasir in #562
- Feature/integrate docker scout with git hub actions by @sinadarbouy in #564
- Bugfix/workflow vulnerability comparison by @sinadarbouy in #569
- add Tempo, Prometheus and Grafana to docker-compose by @eabasir in #571
- Update deps by @mostafa in #576
- Feature: enable multi pool client connections by @sinadarbouy in #577
- Fix casting of client connections upon enumeration by @mostafa in #584
- Update golangci lint and clean up code by @mostafa in #586
- Fix parameters camelCase support in loadEnvVars for environment variable parsing by @sinadarbouy in #588
- Fix/env vars expect lower case letters by @sinadarbouy in #587
- Add Multi-Proxy Support to Docker-Compose by @sinadarbouy in #589
- Add Random Load Balancing Strategy by @sinadarbouy in #590
- Add Weighted Round Robin Algorithm to Load Balancer by @sinadarbouy in #591
- Add Consistent Hashing Load Balancing Strategy by @sinadarbouy in #592
- Fix Consistent Hashing to Use Remote Address Instead of Local Address by @sinadarbouy in #599
- Update deps by @mostafa in #600
New Contributors
Full Changelog: v0.9.6...v0.9.7
-
v0.9.7-0.20240909170148-4510a511d2a509 Sep 2024 pre-releaseNothing published for this version
-
v0.9.7-0.20240819142554-54d0c695656f19 Aug 2024 pre-releaseNothing published for this version
-
v0.9.7-0.20240712114148-18ae198448b912 Jul 2024 pre-releaseNothing published for this version
-
v0.9.7-0.20240618204218-0119784ed77a18 Jun 2024 pre-releaseNothing published for this version
-
v0.9.631 May 2024Nothing published for this version
-
v0.9.6-0.20240526114654-21eb9677698e26 May 2024 pre-releaseNothing published for this version
-
v0.9.6-0.20240520221833-624abee018b820 May 2024 pre-releaseNothing published for this version
-
v0.9.517 May 2024Nothing published for this version
-
v0.9.5-0.20240517112349-29aa5571500017 May 2024 pre-releaseNothing published for this version
-
v0.9.410 Apr 2024Nothing published for this version
-
v0.9.4-0.20240318183622-ba2d12ac5fd518 Mar 2024 pre-releaseNothing published for this version
-
v0.9.315 Mar 2024Nothing published for this version
-
v0.9.3-0.20240315000046-e88df0ae204215 Mar 2024 pre-releaseNothing published for this version
-
v0.9.3-0.20240308113556-4d744d84b43508 Mar 2024 pre-releaseNothing published for this version
-
v0.9.207 Mar 2024Nothing published for this version
-
v0.9.2-0.20240306214531-ae6e06725d2606 Mar 2024 pre-releaseNothing published for this version
-
v0.9.105 Mar 2024Nothing published for this version
-
v0.9.1-0.20240305172229-f7608c24ba2305 Mar 2024 pre-releaseNothing published for this version
-
v0.9.003 Mar 2024Nothing published for this version
-
v0.8.1318 Feb 2024Nothing published for this version
-
v0.8.13-0.20240218122528-a37fa6333fe118 Feb 2024 pre-releaseNothing published for this version
-
v0.8.1213 Feb 2024Nothing published for this version
-
v0.8.12-0.20240213115340-b688bcb99da113 Feb 2024 pre-releaseNothing published for this version
-
v0.8.12-0.20240206105905-b4a201ff33bd06 Feb 2024 pre-releaseNothing published for this version
-
v0.8.1129 Jan 2024Nothing published for this version
-
v0.8.11-0.20240129194741-a319750fadd129 Jan 2024 pre-releaseNothing published for this version
-
v0.8.1002 Jan 2024Nothing published for this version
-
v0.8.927 Dec 2023Nothing published for this version
-
v0.8.818 Dec 2023Nothing published for this version
-
v0.8.704 Dec 2023Nothing published for this version
-
v0.8.7-0.20231121212719-fea549bd81f921 Nov 2023 pre-releaseNothing published for this version
-
v0.8.619 Nov 2023Nothing published for this version
-
v0.8.505 Nov 2023Nothing published for this version
-
v0.8.424 Oct 2023Nothing published for this version
-
v0.8.4-0.20231024184058-a7769850c1fd24 Oct 2023 pre-releaseNothing published for this version
-
v0.8.4-0.20231020224735-0cb307a5cec220 Oct 2023 pre-releaseNothing published for this version
-
v0.8.318 Oct 2023Nothing published for this version
-
v0.8.228 Sep 2023Nothing published for this version
-
v0.8.2-0.20230927212341-b51cdbf9268627 Sep 2023 pre-releaseNothing published for this version
-
v0.8.126 Sep 2023Nothing published for this version
-
v0.8.1-0.20230926213058-601d0030095b26 Sep 2023 pre-releaseNothing published for this version
-
v0.8.1-0.20230924213106-f4e6be26b3d124 Sep 2023 pre-releaseNothing published for this version
-
v0.8.024 Sep 2023Nothing published for this version
-
v0.7.1021 Sep 2023Nothing published for this version