Changelog History
Page 1
-
v0.16.2 Changes
May 08, 2026What's Changed
Feat
- 👍 feat(generic): support specifying IDL Service Name per call for Binary Generic by @DMwangnima in #1928
- feat(server): add in-process LocalCaller for unary calls by @xiaost in #1930
🛠 Fix
- 🛠 fix(ttstream): add server-side information in ttstream errBizHandlerReturnCancel exception by @DMwangnima in #1921
- 🛠 fix: remove streaming rpcstats Reset by @DMwangnima in #1922
- ✅ chore: change tests workflow on go 1.21-1.26 by @GuangmingLuo in #1923
- 🛠 fix(generic): panic when generic writing different elem types of container by @DMwangnima in #1926
- 🛠 fix(streaming): server-side old Stream wrapped in server MW should not be discarded by @DMwangnima in #1929
- 🛠 fix(timeout): close ticker in rpctimeout pool to prevent resource leak by @DMwangnima in #1931
- 🛠 fix(codec): frugalAvailable for void func result structs by @xiaost in #1938
- 🛠 fix(gRPC): connection pool leak when connection is closed and there are no more subsequent calls by @DMwangnima in #1945
- 🛠 fix(ttstream): ttstream should not recycle connection when Recv timeout with DisableCancelRemote=true by @DMwangnima in #1952
⚡️ Perf/Optimize
- perf: rpcinfo inline fields by @xiaost in #1935
- ⚡️ optimize(discovery): reduce object allocation in discovery event queue and support changing default capacity of queue by @DMwangnima in #1939
- perf(server): use inline RPCInfo fields in LocalCaller by @xiaost in #1940
- ⚡️ optimize(gRPC): support pooling HTTP2 framer write buffer to reduce idle connection memory by @DMwangnima in #1944
- perf(gRPC): reduce object allocations on the gRPC client side for unified cancel scenarios by @DMwangnima in #1950
🔨 Refactor
Chore
- 🗄 chore(mux): deprecate thrift mux transport by @DMwangnima in #1933
- 🌲 chore(codec): log data type before errDecodeMismatchMsgType by @xiaost in #1937
- chore: improve bug report issue template by @xiaost in #1941
- 🚚 chore(queue): remove unused field tailVersion of Queue by @DMwangnima in #1947
- ⚡️ chore: update dependencies and add ErrRPCFinish back for compatibility by @DMwangnima in #1953
- 🚀 chore: release version v0.16.2 by @DMwangnima in #1954
📄 Docs
Full Changelog : v0.16.1...v0.16.2
-
v0.16.1 Changes
April 05, 2026🔋 Features
gRPC - Reuse Write Buffer per Connection (#1918)
👍 gRPC (nphttp2) transport now supports reusing a write buffer for each connection, reducing per-frame allocations on the write path. New client and server options are exposed to enable this behavior.
- 🔨 Framer refactor in
pkg/remote/trans/nphttp2/grpc/framer.goto share a buffer across writes on the same connection. - 🆕 New options in
client/option.goandserver/option.goto opt into buffer reuse.
Optimizations
🚚 ttstream - Remove Connection Write Goroutine to Avoid Sender OOM (#1917)
✂ Removed the dedicated per-connection write goroutine from the ttstream transport. The previous design could accumulate unbounded buffered frames on the sender side when the peer was slow, leading to out-of-memory on the sender. Writes are now performed synchronously, applying natural back-pressure to producers.
- Refactored
pkg/remote/trans/ttstream/transport_client.goandtransport_server.goto drop the writer goroutine. - ➕ Added frame-level tests and expanded transport test coverage.
Commits
- 👍 d83a475 - feat: gRPC supports reusing write buffer for each connection (#1918)
- ⚡️ 850f33d - optimize: remove ttstream connection write goroutine to avoid Sender OOM (#1917)
- 🚀 f732553 - chore: release version v0.16.1 (#1919)
Full Changelog : v0.16.0...v0.16.1
- 🔨 Framer refactor in
-
v0.16.0 Changes
April 05, 2026🔋 Features
🌲 Streaming - Recv Timeout and gRPC Error/Log Adjustments (#1911)
➕ Added a new
Recvtimeout configuration for streaming RPCs, allowing users to control how long a singleRecvcall may block before returning an error. Also refined gRPC error propagation and logging behavior so streaming failures are reported more accurately.- 🆕 New call option in
client/callopt/streamcalland client option inclient/option_stream.gofor configuring Recv timeout. - Adjustments to
pkg/remote/trans/nphttp2codes andpkg/remote/trans/ttstreamexceptions for clearer error classification.
Streaming - Detailed Tracing Events (#1905)
Introduced fine-grained tracing events for streaming RPCs. A new
stream_tracerinpkg/rpcinfoenables observability into per-stream lifecycle events (send/recv/header/trailer), and both gRPC (nphttp2) and ttstream transports now emit these events.- 🆕 New
pkg/rpcinfo/stream_tracer.gowith extensive test coverage. - New stream option APIs on both client and server (
client/option_stream.go,server/option_stream.go).
🚚 Streaming - Remove RPCInfo Reuse for Streaming (#1909)
✂ Removed RPCInfo object reuse on the streaming server path for both nphttp2 and ttstream. This avoids cross-stream state leakage where a long-lived stream could observe stale data from a previously recycled RPCInfo.
Dependencies
⚡️ Updated Dependencies (#1912)
github.com/bytedance/sonicv1.14.2 → v1.15.0github.com/bytedance/sonic/loaderv0.4.0 → v0.5.0github.com/cloudwego/dynamicgov0.7.1 → v0.8.0github.com/cloudwego/frugalv0.3.0 → v0.3.1
Commits
- 🌲 25a04f9 - feat(streaming): add Recv timeout config and adjust gRPC error/log (#1911)
- ⚡️ 7f2cf83 - chore: update dependencies (#1912)
- 👍 f7b6362 - feat(streaming): support detailed tracing events (#1905)
- 🚚 5cf426c - feat(streaming): remove rpcinfo reuse for streaming (#1909)
- 🚀 910b399 - chore: release version v0.16.0 (#1913)
Full Changelog : v0.15.4...v0.16.0
- 🆕 New call option in
-
v0.15.4 Changes
December 26, 2025v0.15.4
🐛 Bug Fixes
Code Generation - DeepCopy for Binary Types (#1902)
🛠 1. Fixed: DeepCopy code generation now correctly handles Thrift binary types that are mapped to Go string types.
This ensures string-typed binary fields are handled with simple value assignment instead of byte slice allocation and copying.
Dependencies
⚡️ Updated: github.com/cloudwego/gopkg v0.1.6 → v0.1.8 (#1903)
🔄 Changes included from gopkg v0.1.7:
- 🐎 Optimized thrift span cache with lazy initialization (performance improvement)
- 🛠 Fixed protocol handling to ensure data length matches copied bytes for strings and binary data (correctness fix)
- ➕ Added connection state checker for gonet (stability improvement)
- Resolved file descriptor operator memory leak (memory safety)
🔄 Changes included from gopkg v0.1.8:
- Increased ttheader limit size from 64KB to 256KB
- 🛠 Fixed header length overflow issues
Impact: Improves protocol handling correctness, memory safety, and increases header size limits for TTHeader protocol users.
Commits
-
v0.15.3 Changes
December 19, 2025Highlights
🚀 This release includes important bug fixes for TTStream, mixed retry, and rpcinfo handling, along with new features for dynamicgo options and code generation improvements.
🔋 Feature
- 👌 Support passing dynamicgo's parsing options via WithDynamicGoOptions for ThriftIDLProvider (#1878)
- Code generation: Execute custom templates on each service when loop_service is set to true, even without combined service mode (#1893)
🛠 Fix
- 🛠 Fix kitex tool: Move git clone/checkout before protobuf processing to ensure dependencies are available (#1900)
- 🛠 Fix TTStream: Inject K_METHOD into server-side context to provide method name for downstream RPC calls (#1852)
- 🛠 Fix TTStream: Send Header Frame when exiting handler directly via CloseSend without sending messages (#1887)
- 🛠 Fix mixed retry: Avoid waiting for backoff when the first call is successful (#1879)
- 🛠 Fix rpcinfo: Prevent type conversion panic when calling FreezeRPCInfo consecutively (#1888)
Optimization
- 👌 Improve connection failure auto-retry log by adding destination service name for troubleshooting (#1880)
- Avoid grpc cleanupStream closure capturing Stream objects, reducing memory retention (#1886)
📚 Documentation
- 🛠 Fix grammar and clarity issues in README.md (#1896)
Dependency
- ⬆️ Upgraded github.com/cloudwego/localsession from v0.1.2 to v0.2.1
- ⬆️ Upgraded github.com/cloudwego/dynamicgo from v0.7.0 to v0.7.1
- ⬆️ Upgraded github.com/bytedance/sonic from v1.14.1 to v1.14.2
Full Changelog : v0.15.2...v0.15.3
-
v0.15.2 Changes
October 17, 2025What's Changed
- ci: add claude github workflows by @jayantxie in #1870
- ci: manually trigger the pr review workflow to fix the workflow error in the fork repository's PR by @jayantxie in #1874
- 🛠 fix(server): support unique method lookup when service name lookup fails by @jayantxie in #1873
- ⏪ feat: restore the definition of remote.Message().ProtocolInfo() interface to resolve compatibility issues by @jayantxie in #1876
- 🚀 chore: release version v0.15.2 by @jayantxie in #1877
Full Changelog : v0.15.1...v0.15.2
-
v0.15.1 Changes
September 26, 2025What's Changed
- 🛠 fix(ttstream): use consistent context of stream in ttstream.RecvMsg and fix nil message error of binary generic by @jayantxie in #1866
- 🛠 fix(gRPC): retrieve status or biz error for non-ServerStreaming by @DMwangnima in #1530
- ⚡️ chore: update version v0.15.1 by @jayantxie in #1867
Full Changelog : v0.15.0...v0.15.1
-
v0.15.0 Changes
September 23, 2025What's Changed
🔋 Feature
- 👍 feat(ttstream): support ctx cancel and detailed canceled error by @DMwangnima in #1821 | #1859 | #1856
特性:TTStream 支持上下文取消及详细的取消错误信息
- 👍 feat(generic): support new thrift binary generic call api, server streaming generic call and unknown service or method handler by @jayantxie in #1837 | #1857
特性:支持新的 thrift 二进制泛化调用 api,服务端流式泛化调用和 unknown service or method handler
- 👍 feat(grpc): support dump MaxConcurrentStreams of HTTP2 Client by @DMwangnima in #1820
特性:gRPC 支持导出 HTTP2 客户端的 MaxConcurrentStreams 配置
🛠 Fix
- 🛠 fix(retry): shallow copy response to avoid data race by @jayantxie in #1799 | #1814
修复:浅拷贝 response 以避免数据竞争
修复:负载均衡器缓存中创建新均衡器前检查存在性以防止泄漏
- 🛠 fix(generic): descriptor.HTTPRequest.GetParam nil pointer exception by @jayantxie in #1827
修复:描述符 HTTPRequest.GetParam 的空指针异常
- 🛠 fix(generic): fix generic write int range check by @HeyJavaBean in #1861
修复:泛化写入整数的范围检查
- 🛠 fix(rpcinfo): protect bizErr and extra field of ri.Invocation by lock by @jayantxie in #1850
修复:通过锁保护 ri.Invocation 的 bizErr 和 extra 字段
- 🛠 fix(timeout): remove timer pool to avoid timer race issue by @jayantxie in #1858
修复:移除计时器池以避免计时器竞争问题
- 🛠 fix(tool): disable fast api for protobuf by @DMwangnima in #1807
修复:工具中为 Protobuf 禁用 Fast API
修复:工具中为 -use 参数跳过 PB 代码生成
⚡️ Optimize
📇 > 优化:gRPC 访问 metadata.MD 时不转换为小写
- ⚡️ optimize(ttstream): lazy init cleaning task for ObjectPool to reduce the impact of lots of goroutines caused by creating too many Generic Client by @DMwangnima in #1842
优化:对象池延迟初始化清理任务,减少创建过多泛化客户端导致的大量 goroutine 影响
- ⚡️ optimize(tool): remove string deepcopy because the string type is read-only in Go by @jayantxie in #1832
优化:移除字符串深拷贝,因为 Go 中字符串类型是只读的
🔨 Refactor
- 🔨 refactor(ttstream): remove ttstream provider by @jayantxie in #1805
重构:移除 TTStream provider 接口
- 🔨 refactor(rpcinfo): move service/method info from message to rpcinfo, remove protocol info from message and update min go version to 1.20 by @jayantxie in #1818 | #1855
重构:将服务/方法信息从消息移至 rpcinfo,从消息中移除协议信息,并更新最低 Go 版本至 1.20
- 🔨 refactor(server): remove service middleware and SupportedTransportsFunc api by @jayantxie in #1839
👍 > 重构:移除服务中间件和 SupportedTransportsFunc API
- 🔨 refactor(server): remove useless TargetSvcInfo field by @jayantxie in #1840
重构:移除无用的 TargetSvcInfo 字段
Chore
- ⚡️ chore: update dependencies of kitex to support go 1.25 and new features by @jayantxie @AsterDY in #1848 | #1834 | #1862 | #1836
chore:更新 kitex 依赖项以支持 go1.25 和新特性
- ⚡️ chore: update version v0.15.0 by @jayantxie in #1864
chore:更新版本至 v0.15.0
- 📄 docs: fix broken link to blogs by @scientiacoder in #1813
chore:修复博客的损坏链接
特性:在合并编译场景中支持传递自定义上下文 key 到下游
🆕 New Contributors
- @scientiacoder made their first contribution in #1813
- @yangma0 made their first contribution in #1814
Full Changelog : v0.14.1...v0.15.0
-
v0.14.1 Changes
June 25, 2025⚡️ Optimize
⚡️ [#1798] optimize(tool): remove apache replace in go.mod because apache thrift is not used anymore
✅ Test
✅ [#1800] test: improve gRPC unit tests stability
Chore
⬆️ [#1797] chore: upgrade prutal
🚀 [#1802] chore: add release scripts
⚡️ [#1804] chore: update version v0.14.1Full Changelog : v0.14.0...v0.14.1
-
v0.14.0 Changes
June 16, 2025🔋 Feature
[#1759] feat(tool): add env for using prutal to marshal
[#1782] feat(ttstream): process MetaFrame and reflect to rpcinfo
[#1777] feat(client): report err when create Stream failed
👍 [#1763] feat: support ttheader streaming generic call
[#1771] feat(tool): add thriftgo patcher extension
[#1755] feat: add generic binary pb for streamx
👍 [#1752] feat(generic): support generic pb binary for streaming⚡️ Optimize
⚡️ [#1788] optimize: go net implementation
⚡️ [#1786] optimize(tool): remove tool fastpb generation
⚡️ [#1783] optimize(gRPC): parse PayloadCodec in server side
⚡️ [#1780] optimize(ttstream): log the error thrown by invoking handler
⚡️ [#1769] optimize: injection of options in ttstream🛠 Fix
[#1792] fix(gRPC): inject current method name to rpcinfo in server-side to fix FROM_METHOD missing
[#1787] fix(ttstream): metrics missing caused by server-side rpcinfo not set correctly
[#1778] fix: enabling json mode of map generic not work
[#1774] fix(server): trans server conn count race issue
[#1742] fix(generic): align dynamicgo's write base behavior with old generic (only for internal logic)🔨 Refactor
🔨 [#1770] refactor: refactor generic streaming
✅ Tests:
✅ [#1793] test: add go1.18 to scenario-test
🚚 [#1765] test: remove unnecessary server in json generic test📄 Docs
⚡️ [#1794] docs: update CONTRIBUTING.md to change PR base branch to main
Chore
⚡️ [#1795] chore: update dependency
🚚 [#1776] chore: remove testify dependency
⚡️ [#1757] chore: update prutal to v0.1.1
[#1753] ci: disable codecov annotations