21 hours ago
zap

v1.27.1

Enhancements:

  • #1501: prevent Object from panicking on nils
  • #1511: Fix a race condition in WithLazy.

Thanks to @rabbbit, @alshopov, @jquirke, @arukiidou for their contributions to this release.

1 days ago
redis

9.17.0

🚀 Highlights

Redis 8.4 Support

Added support for Redis 8.4, including new commands and features (#3572)

Typed Errors

Introduced typed errors for better error handling using errors.As instead of string checks. Errors can now be wrapped and set to commands in hooks without breaking library functionality (#3602)

New Commands

  • CAS/CAD Commands: Added support for Compare-And-Set/Compare-And-Delete operations with conditional matching (IFEQ, IFNE, IFDEQ, IFDNE) (#3583, #3595)
  • MSETEX: Atomically set multiple key-value pairs with expiration options and conditional modes (#3580)
  • XReadGroup CLAIM: Consume both incoming and idle pending entries from streams in a single call (#3578)
  • ACL Commands: Added ACLGenPass, ACLUsers, and ACLWhoAmI (#3576)
  • SLOWLOG Commands: Added SLOWLOG LEN and SLOWLOG RESET (#3585)
  • LATENCY Commands: Added LATENCY LATEST and LATENCY RESET (#3584)

Search & Vector Improvements

  • Hybrid Search: Added EXPERIMENTAL support for the new FT.HYBRID command (#3573)
  • Vector Range: Added VRANGE command for vector sets (#3543)
  • FT.INFO Enhancements: Added vector-specific attributes in FT.INFO response (#3596)

Connection Pool Improvements

  • Improved Connection Success Rate: Implemented FIFO queue-based fairness and context pattern for connection creation to prevent premature cancellation under high concurrency (#3518)
  • Connection State Machine: Resolved race conditions and improved pool performance with proper state tracking (#3559)
  • Pool Performance: Significant performance improvements with faster semaphores, lockless hook manager, and reduced allocations (47-67% faster Get/Put operations) (#3565)

Metrics & Observability

  • Canceled Metric Attribute: Added 'canceled' metrics attribute to distinguish context cancellation errors from other errors (#3566)

✨ New Features

🐛 Bug Fixes

⚡ Performance

  • Connection state machine with race condition fixes (#3559) by @ndyakov
  • Pool performance improvements: 47-67% faster Get/Put, 33% less memory, 50% fewer allocations (#3565) by @ndyakov

🧪 Testing & Infrastructure

👥 Contributors

We'd like to thank all the contributors who worked on this release!

@12ya, @ajax16384, @cxljs, @cyningsun, @destinyoooo, @dragneelfps, @htemelski-redis, @manisharma, @ndyakov, @ofekshenawa, @pvragov


Full Changelog: https://github.com/redis/go-redis/compare/v9.16.0...v9.17.0

1 days ago
go-redis

9.17.0

🚀 Highlights

Redis 8.4 Support

Added support for Redis 8.4, including new commands and features (#3572)

Typed Errors

Introduced typed errors for better error handling using errors.As instead of string checks. Errors can now be wrapped and set to commands in hooks without breaking library functionality (#3602)

New Commands

  • CAS/CAD Commands: Added support for Compare-And-Set/Compare-And-Delete operations with conditional matching (IFEQ, IFNE, IFDEQ, IFDNE) (#3583, #3595)
  • MSETEX: Atomically set multiple key-value pairs with expiration options and conditional modes (#3580)
  • XReadGroup CLAIM: Consume both incoming and idle pending entries from streams in a single call (#3578)
  • ACL Commands: Added ACLGenPass, ACLUsers, and ACLWhoAmI (#3576)
  • SLOWLOG Commands: Added SLOWLOG LEN and SLOWLOG RESET (#3585)
  • LATENCY Commands: Added LATENCY LATEST and LATENCY RESET (#3584)

Search & Vector Improvements

  • Hybrid Search: Added EXPERIMENTAL support for the new FT.HYBRID command (#3573)
  • Vector Range: Added VRANGE command for vector sets (#3543)
  • FT.INFO Enhancements: Added vector-specific attributes in FT.INFO response (#3596)

Connection Pool Improvements

  • Improved Connection Success Rate: Implemented FIFO queue-based fairness and context pattern for connection creation to prevent premature cancellation under high concurrency (#3518)
  • Connection State Machine: Resolved race conditions and improved pool performance with proper state tracking (#3559)
  • Pool Performance: Significant performance improvements with faster semaphores, lockless hook manager, and reduced allocations (47-67% faster Get/Put operations) (#3565)

Metrics & Observability

  • Canceled Metric Attribute: Added 'canceled' metrics attribute to distinguish context cancellation errors from other errors (#3566)

✨ New Features

🐛 Bug Fixes

⚡ Performance

  • Connection state machine with race condition fixes (#3559) by @ndyakov
  • Pool performance improvements: 47-67% faster Get/Put, 33% less memory, 50% fewer allocations (#3565) by @ndyakov

🧪 Testing & Infrastructure

👥 Contributors

We'd like to thank all the contributors who worked on this release!

@12ya, @ajax16384, @cxljs, @cyningsun, @destinyoooo, @dragneelfps, @htemelski-redis, @manisharma, @ndyakov, @ofekshenawa, @pvragov


Full Changelog: https://github.com/redis/go-redis/compare/v9.16.0...v9.17.0

1 days ago
fiber

v3.0.0-rc.3

🚀 New Features

🧹 Updates

🐛 Bug Fixes

🛠️ Maintenance

📚 Documentation

New Contributors

A fully-detailed view of all new features and the migration guide is available in our https://docs.gofiber.io/next/whats_new

Full Changelog: https://github.com/gofiber/fiber/compare/v3.0.0-rc.2...v3.0.0-rc.3

1 days ago
fiber

v2.52.10

🐛 Bug Fixes

📚 Documentation

New Contributors

Full Changelog: https://github.com/gofiber/fiber/compare/v2.52.9...v2.52.10

2 days ago
grpc-go

Release 1.77.0

API Changes

  • mem: Replace the Reader interface with a struct for better performance and maintainability. (#8669)

Behavior Changes

  • balancer/pickfirst: Remove support for the old pick_first LB policy via the environment variable GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST=false. The new pick_first has been the default since v1.71.0. (#8672)

Bug Fixes

  • xdsclient: Fix a race condition in the ADS stream implementation that could result in resource-not-found errors, causing the gRPC client channel to move to TransientFailure. (#8605)
  • client: Ignore HTTP status header for gRPC streams. (#8548)
  • client: Set a read deadline when closing a transport to prevent it from blocking indefinitely on a broken connection. (#8534)
    • Special Thanks: @jgold2-stripe
  • client: Fix a bug where default port 443 was not automatically added to addresses without a specified port when sent to a proxy.
    • Setting environment variable GRPC_EXPERIMENTAL_ENABLE_DEFAULT_PORT_FOR_PROXY_TARGET=false disables this change; please file a bug if any problems are encountered as we will remove this option soon. (#8613)
  • balancer/pickfirst: Fix a bug where duplicate addresses were not being ignored as intended. (#8611)
  • server: Fix a bug that caused overcounting of channelz metrics for successful and failed streams. (#8573)
    • Special Thanks: @hugehoo
  • balancer/pickfirst: When configured, shuffle addresses in resolver updates that lack endpoints. Since gRPC automatically adds endpoints to resolver updates, this bug only affects custom LB policies that delegate to pick_first but don't set endpoints. (#8610)
  • mem: Clear large buffers before re-using. (#8670)

Performance Improvements

  • transport: Reduce heap allocations to reduce time spent in garbage collection. (#8624, #8630, #8639, #8668)
  • transport: Avoid copies when reading and writing Data frames. (#8657, #8667)
  • mem: Avoid clearing newly allocated buffers. (#8670)

New Features

  • outlierdetection: Add metrics specified in gRFC A91. (#8644)
    • Special Thanks: @davinci26, @PardhuKonakanchi
  • stats/opentelemetry: Add support for optional label grpc.lb.backend_service in per-call metrics (#8637)
  • xds: Add support for JWT Call Credentials as specified in gRFC A97. Set environment variable GRPC_EXPERIMENTAL_XDS_BOOTSTRAP_CALL_CREDS=true to enable this feature. (#8536)
    • Special Thanks: @dimpavloff
  • experimental/stats: Add support for up/down counters. (#8581)
3 days ago
unipdf

v4.5.0

Release notes - UniPDF v4.5.0

This release contains new features, improvements and bug fix.

New Features

  • US-1151 Add API integration with Tesseract OCR
  • US-1197 Add support for rendering text using OTF font
  • US-1178 Add PDF/A validation scripts for PDF/A-4 and it’s variants (PDF/A-4e and PDF/A-4f)

Improvements

  • US-1173 Add `PieceInfo` in Document catalog
  • US-201 Support unicode segmentations before encoding the rune into charcodes
  • US-1208 PDF/A-4 add testdata for 4F and 4E profiles into unipdf-testdata
  • US-1209 PDF/A-4 add pdfaid rev support in PDF metadata

Bug Fix

  • US-1214 High memory usage when rendering PDF with large font size to image fix
4 days ago
goquery

v1.11.0

Note that Go1.24 is now required (use goquery < 1.11.0 if you can't use go1.24+).

4 days ago
go-zero

v1.9.3

We are excited to announce the release of go-zero v1.9.3! This release brings several important enhancements and bug fixes that improve the framework's reliability, performance, and alignment with industry best practices.

🎉 Highlights

  • Consistent Hash Load Balancing: New gRPC load balancer for session affinity
  • gRPC Best Practices: Changed NonBlock default to align with gRPC recommendations
  • Improved Distributed Tracing: Fixed gateway trace header propagation
  • ORM Improvements: Fixed zero value scanning for pointer destinations

✨ New Features

Consistent Hash Balancer Support (#5246)

Contributor: @zhoushuguang

A new consistent hash load balancer has been added to the zRPC package, enabling session affinity for gRPC services.

Key Features:

  • Hash-based request routing to maintain session affinity
  • Distributes requests based on a hash key from context
  • Minimal request redistribution on node changes
  • Built on go-zero's existing core/hash/ConsistentHash implementation

Usage Example:

// Set hash key in context
ctx := zrpc.SetHashKey(ctx, "user_123")

// Requests with the same key will be routed to the same backend
resp, err := client.SomeMethod(ctx, req)

Configuration:

c := zrpc.RpcClientConf{
    Endpoints: []string{"localhost:8080", "localhost:8081"},
    BalancerName: "consistent_hash",  // Use consistent hash balancer
}

Benefits:

  • Enables stateful service interactions
  • Improves cache hit rates on backend services
  • Reduces session data synchronization overhead
  • Maintains load distribution while supporting affinity

🐛 Bug Fixes

Fixed Gateway Trace Headers (#5256, #5248)

Contributor: @kevwan

Fixed an issue where OpenTelemetry trace propagation headers were not being properly forwarded through the gateway to upstream gRPC services, breaking distributed tracing.

Problem: The gateway was not forwarding critical W3C Trace Context headers (traceparent, tracestate, baggage) to gRPC metadata, causing trace context to be lost at the gateway boundary.

Solution:

  • Enhanced ProcessHeaders function to forward trace propagation headers
  • Headers are now properly converted to lowercase per gRPC metadata conventions
  • Maintains distributed tracing across HTTP → gRPC boundaries

Impact:

  • End-to-end tracing now works correctly through the gateway
  • Improved observability for microservice architectures
  • Better debugging and performance analysis capabilities

Technical Details:

// Trace headers now properly forwarded
var traceHeaders = map[string]bool{
    "traceparent": true,  // W3C Trace Context
    "tracestate":  true,  // Additional trace state
    "baggage":     true,  // W3C Baggage propagation
}

Fixed Multiple Trace Initialization (#5244)

Contributor: @kevwan

Problem: When running multiple services (e.g., REST + RPC) in the same process, the trace agent could be initialized multiple times, potentially causing resource leaks or unexpected behavior.

Solution:

  • Used sync.Once to ensure trace agent is initialized only once
  • Aligned with similar patterns used in prometheus.StartAgent and logx.SetUp
  • Added sync.OnceFunc for shutdown to prevent double cleanup

Code Changes:

var (
    once           sync.Once
    shutdownOnceFn = sync.OnceFunc(func() {
        if tp != nil {
            _ = tp.Shutdown(context.Background())
        }
    })
)

func StartAgent(c Config) {
    if c.Disabled {
        return
    }

    once.Do(func() {
        if err := startAgent(c); err != nil {
            logx.Error(err)
        }
    })
}

Benefits:

  • Prevents resource conflicts in multi-server processes
  • Ensures single global tracer provider instance
  • Safer concurrent initialization
  • Proper cleanup on shutdown

Fixed ORM Zero Value Scanning for Pointer Destinations (#5270)

Contributor: @lerity-yao (first contribution! 🎊)

Problem: When scanning database results into struct fields with pointer types, zero values (0, false, empty string) were not being properly distinguished from NULL values. This caused nil pointers to be set to zero values incorrectly.

Solution: Enhanced the getValueInterface function to properly initialize nil pointers before scanning, ensuring the SQL driver can correctly populate them with zero or non-zero values.

Code Changes:

func getValueInterface(value reflect.Value) (any, error) {
    if !value.CanAddr() || !value.Addr().CanInterface() {
        return nil, ErrNotReadableValue
    }

    // Initialize nil pointer before scanning
    if value.Kind() == reflect.Pointer && value.IsNil() {
        baseValueType := mapping.Deref(value.Type())
        value.Set(reflect.New(baseValueType))
    }

    return value.Addr().Interface(), nil
}

Impact:

type User struct {
    Name    string   `db:"name"`      // Always set
    Age     *int     `db:"age"`       // Can distinguish NULL vs 0
    Active  *bool    `db:"active"`    // Can distinguish NULL vs false
}

// Before: age=0 and age=NULL both resulted in nil pointer
// After:  age=0 → *int(0), age=NULL → nil pointer ✓

Benefits:

  • Correct handling of NULL vs zero values
  • Better semantic representation of optional fields
  • Prevents unexpected nil pointer dereferences
  • Aligns with Go's SQL scanning best practices

🔄 Breaking Changes (With Backward Compatibility)

Changed NonBlock Default to True (#5259)

Contributor: @kevwan

Motivation: Aligned with gRPC official best practices which discourage blocking dials.

Change:

// zrpc/config.go
type RpcClientConf struct {
    // Before: NonBlock bool `json:",optional"`
    // After:
    NonBlock bool `json:",default=true"`  // Now defaults to true
}

Why This Matters:

  1. Blocking dials are deprecated: grpc.WithBlock() is an anti-pattern
  2. Connection state is dynamic: Being connected at dial time doesn't guarantee future connectivity
  3. RPCs handle waiting: All RPCs automatically wait until connection or deadline
  4. Simpler code: No need to check "ready" state before making calls

Migration Guide:

For most users, no action required - the new default is the recommended behavior.

If you explicitly need blocking behavior (not recommended):

// Option 1: Configuration
c := zrpc.RpcClientConf{
    NonBlock: false,  // Explicit blocking
}

// Option 2: Client option (deprecated)
client := zrpc.MustNewClient(c, zrpc.WithBlock())

Backward Compatibility:

  • Existing configs with NonBlock: false continue to work
  • New WithBlock() option available (marked deprecated)
  • No changes needed for services already using NonBlock: true

Documentation: See GRPC_NONBLOCK_CHANGE.md for detailed migration guide and rationale.


👥 New Contributors

We're thrilled to welcome new contributors to the go-zero community! 🎉

  • @JackGod001 - Made their first contribution in #4343
  • @stemlaud - Made their first contribution in #5245
  • @gfischer7 - Made their first contribution in #5254
  • @lerity-yao - Made their first contribution in #5270 (ORM fix)

Thank you for your contributions! We look forward to your continued involvement in the project.


📦 Installation & Upgrade

Install

go get -u github.com/zeromicro/go-zero@v1.9.3

Update

# Update go.mod
go get -u github.com/zeromicro/go-zero@v1.9.3
go mod tidy

🔗 Links


📝 Detailed Changes

Core Enhancements

Load Balancing

  • Added consistent hash balancer for gRPC (zrpc/internal/balancer/consistenthash)
  • Context-based hash key API: SetHashKey() and GetHashKey()
  • Configurable replica count and hash function
  • Comprehensive test coverage

Distributed Tracing

  • Fixed trace header propagation in gateway
  • Proper handling of W3C Trace Context headers
  • Case-insensitive header matching per gRPC conventions
  • Single initialization with sync.Once pattern

ORM/Database

  • Fixed pointer field scanning for zero values
  • Proper NULL vs zero value distinction
  • Enhanced getValueInterface() with nil pointer initialization
  • Support for sql.Null* types

gRPC Client

  • Changed NonBlock default to true
  • Added deprecated WithBlock() option for compatibility
  • Explicit handling of both blocking and non-blocking modes
  • Updated client initialization logic

Testing & Quality

  • Added comprehensive test coverage for all changes
  • Edge case handling in ORM tests
  • Gateway trace header test cases
  • Consistent hash balancer benchmarks

🙏 Acknowledgments

Special thanks to all contributors, issue reporters, and community members who made this release possible. Your feedback and contributions continue to make go-zero better!


💬 Feedback

If you encounter any issues or have suggestions for future releases, please:

Happy coding with go-zero! 🚀

7 days ago
wails

Wails v3.0.0-alpha.40

Wails v3 Alpha Release - v3.0.0-alpha.40

Fixed

  • Fix Windows systray icon not defaulting to application icon when no custom icon is provided (#4704)

🤖 This is an automated nightly release generated from the latest changes in the v3-alpha branch.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha.40

⚠️ Alpha Warning: This is pre-release software and may contain bugs or incomplete features.