All Versions
13
Latest Version
Avg Release Cycle
40 days
Latest Release
36 days ago

Changelog History
Page 1

  • v0.16.2 Changes

    May 08, 2026

    What'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

    • 🔨 refactor: use maphash instead of xxhash3 by @xiaost in #1924

    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.go to share a buffer across writes on the same connection.
    • 🆕 New options in client/option.go and server/option.go to 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.go and transport_server.go to 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

  • v0.16.0 Changes

    April 05, 2026

    🔋 Features

    🌲 Streaming - Recv Timeout and gRPC Error/Log Adjustments (#1911)

    ➕ Added a new Recv timeout configuration for streaming RPCs, allowing users to control how long a single Recv call 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/streamcall and client option in client/option_stream.go for configuring Recv timeout.
    • Adjustments to pkg/remote/trans/nphttp2 codes and pkg/remote/trans/ttstream exceptions for clearer error classification.

    Streaming - Detailed Tracing Events (#1905)

    Introduced fine-grained tracing events for streaming RPCs. A new stream_tracer in pkg/rpcinfo enables 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.go with 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/sonic v1.14.2 → v1.15.0
    • github.com/bytedance/sonic/loader v0.4.0 → v0.5.0
    • github.com/cloudwego/dynamicgo v0.7.1 → v0.8.0
    • github.com/cloudwego/frugal v0.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

  • v0.15.4 Changes

    December 26, 2025

    v0.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

    • ccdabb2 - fix(tool): DeepCopy assignment failed when map key type is binary (#1902)
    • ⚡️ 3f27dca - chore: update github.com/cloudwego/gopkg from v0.1.6 to v0.1.8 (#1903)
    • 🚀 4e64cc3 - chore: release version v0.15.4
  • v0.15.3 Changes

    December 19, 2025

    Highlights

    🚀 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, 2025

    What'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, 2025

    What'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, 2025

    What's Changed

    🔋 Feature

    特性: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

    修复:浅拷贝 response 以避免数据竞争

    • 🛠 fix(lbcache): check the existence before new Balancer to prevent leakage by @ppzqh in #1825

    修复:负载均衡器缓存中创建新均衡器前检查存在性以防止泄漏

    • 🛠 fix(generic): descriptor.HTTPRequest.GetParam nil pointer exception by @jayantxie in #1827

    修复:描述符 HTTPRequest.GetParam 的空指针异常

    修复:泛化写入整数的范围检查

    • 🛠 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

    修复:移除计时器池以避免计时器竞争问题

    修复:工具中为 Protobuf 禁用 Fast API

    • 🛠 fix(tool): skip pb code gen for arg -use by @xiaost in #1819

    修复:工具中为 -use 参数跳过 PB 代码生成

    ⚡️ Optimize

    • 📇 optimize(grpc): access metadata.MD without ToLower by @xiaost in #1806

    📇 > 优化: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

    重构:移除 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:更新 kitex 依赖项以支持 go1.25 和新特性

    chore:更新版本至 v0.15.0

    chore:修复博客的损坏链接

    • 👍 chore: support custom ctx key to pass to downstream in Service-Inline by @Duslia in #1709

    特性:在合并编译场景中支持传递自定义上下文 key 到下游

    🆕 New Contributors

    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.1

    Full 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