13 hours ago
bigcache

v3.2.0

Changes

  • Fix panic in peek() when stale index points to corrupt uvarint data @janisz (#427)
  • Bump Go to 1.22, migrate to math/rand/v2, fix staticcheck SA1006 @janisz (#428)
  • Fixed go test -race -bench=. . when running in parallel systems to prevent data races @Aniruddhraam (#429)
  • Optimize map capacity allocation during shard initialization. #419 @xiaobai12011 (#420)
  • Revert change to how expiration timings to calculated. @gurudesu (#403)
  • Improve error handling in BytesQueue.Push function in queue.go @alonohana627 (#405)
  • Fixing grammar in docs @SaschaPeukert (#393)
  • Only print if Verbose is true @xyproto (#392)
  • fix typo @chenyahui (#385)
  • Avoid redundant key parsing from the wrappedEntry. @chenyahui (#388)
  • check LifeWindow when CleanWindow is set @chenyahui (#386)
  • fix typo @chenyahui (#384)
  • changed to uint64 keys @raeidish (#377)
  • Use errors.New instead of fmt.Errorf @chenyahui (#370)
  • rename resetKeyFromEntry to resetHashFromEntry @yangtaoran (#361)
  • Update used go versions @janisz (#352)

🚀 Features

  • Bump toolmantim/release-drafter from 6.0.0 to 6.1.0 @dependabot[bot] (#406)
  • Bump golangci/golangci-lint-action from 9.1.0 to 9.3.0 @dependabot[bot] (#430)
  • Bump actions/checkout from 6 to 7 @dependabot[bot] (#424)
  • Bump actions/setup-go from 6 to 7 @dependabot[bot] (#425)
  • Go defaults to "0"" so in case we want to return @jgheewala (#181)
  • Bump actions/setup-go from 5 to 6 @dependabot[bot] (#413)
  • Bump actions/checkout from 4 to 6 @dependabot[bot] (#417)
  • Bump golangci/golangci-lint-action from 7 to 9 @dependabot[bot] (#416)
  • Bump golangci/golangci-lint-action from 6 to 7 @dependabot[bot] (#408)
  • Bump golangci/golangci-lint-action from 5 to 6 @dependabot[bot] (#395)
  • Bump golangci/golangci-lint-action from 4 to 5 @dependabot[bot] (#394)
  • Bump golangci/golangci-lint-action from 3 to 4 @dependabot[bot] (#391)
  • Bump toolmantim/release-drafter from 5.25.0 to 6.0.0 @dependabot[bot] (#390)
  • Bump actions/setup-go from 4 to 5 @dependabot[bot] (#387)
  • Bump toolmantim/release-drafter from 5.24.0 to 5.25.0 @dependabot[bot] (#381)
  • Bump actions/checkout from 3 to 4 @dependabot[bot] (#373)
  • Bump toolmantim/release-drafter from 5.23.0 to 5.24.0 @dependabot[bot] (#367)
  • Added extra endpoint for clear cache @agoalofalife (#366)
  • Bump actions/setup-go from 3 to 4 @dependabot[bot] (#359)
  • Bump toolmantim/release-drafter from 5.22.0 to 5.23.0 @dependabot[bot] (#358)
  • Bump toolmantim/release-drafter from 5.21.1 to 5.22.0 @dependabot[bot] (#351)

🐛 Bug Fixes

  • fix readme: missing import dependency library @chusyclub (#415)
1 days ago
logrus

v1.10.0

Logrus v1.10.0

This release focuses on substantial performance improvements, concurrency correctness, and better interoperability with modern Go logging APIs.

🚀 Performance

Major improvements across TextFormatter, entry handling, and common logger paths:

  • ~17% lower geomean runtime across the benchmark suite
  • ~27% higher geomean formatter throughput
  • Common enabled logging paths are ~30–44% faster
  • WithError is ~40% faster
  • Chained fields are ~46% faster
  • TextFormatter paths are up to ~40% faster
  • Allocation counts are reduced by ~25–74% across measured TextFormatter cases, with the largest reductions in colored output

The improvements also show up in complete logger paths:

  • Logger + TextFormatter is ~31% faster, with ~24% fewer allocations
  • Logger + JSONFormatter is ~21% faster, with ~10% fewer allocations

JSONFormatter itself remains largely unchanged in runtime performance, with small allocation reductions.

🔄 log/slog interoperability

v1.10 adds bidirectional interoperability between Logrus and Go's log/slog:

  • A Logrus slog hook can forward existing Logrus entries to an slog logger.
  • hooks/slog.NewHandler implements slog.Handler, allowing log/slog records to use an existing Logrus logger and its hooks, formatter, and output.
  • The handler preserves levels, fields, groups, context, record timestamps, and optionally caller information.
  • Caller reporting is configured per handler, without requiring Logrus's logger-wide ReportCaller option.
  • Custom slog levels can be mapped to Logrus levels.
  • The hook and handler can be combined, providing a practical path for incrementally migrating from Logrus to log/slog without requiring an all-at-once transition.

This allows applications to migrate their logging API and logging backend independently: existing Logrus call sites can start using an slog backend, while new slog code can continue using an established Logrus setup.

🔒 Concurrency & Correctness

  • Fix reentrant logging deadlocks, including logging from within MarshalJSON or formatter code.
  • Fix generic Log, Logf, Logln, and LogFn methods unexpectedly panicking when called with PanicLevel, contrary to their documented behavior.
  • Eliminate race conditions in entry and formatter paths.
  • Improve locking boundaries around formatters and hooks.

➕ Added

  • TextFormatter now automatically enables colors on Windows terminals with ANSI support, matching behavior on other platforms.
  • Entry.Caller can now be set explicitly and is preserved across derived entries. When caller reporting is enabled, Logrus only detects and populates caller information when none was provided, allowing custom caller detection and wrapper-aware logging without adding additional caller configuration APIs.
  • Add minimal, composable logging interfaces for each log level, allowing consumers to depend on narrower interfaces and making logging implementations easier to substitute or adapt.
  • Expand CI verification to include TinyGo and every cross-compile target reported by go tool dist list, improving coverage across alternative toolchains and platforms.

⚠️ Behavioral Changes

  • Minimum supported Go version is now 1.23.
  • TextFormatter now renders []byte as raw/quoted strings instead of numeric slices. If you relied on the previous slice-of-ints output, convert explicitly before logging.
  • TextFormatter now uses dim cyan for debug output and dim white for trace output in colorized TTY output.
  • Entry.HasCaller is now deprecated in favor of checking Entry.Caller directly. A //go:fix inline directive was added so existing uses can be updated automatically.
  • MutexWrap, which was unintentionally exposed as public API, is deprecated. It remains available as an alias for compatibility but should not be used directly.

v1.10 is primarily a performance, correctness, and interoperability release with no intentional breaking public API changes.

Benchmarks (sampled at 457e372460c7a80ca7c800b51ebeee5362aaa180)
goos: darwin
goarch: arm64
pkg: github.com/sirupsen/logrus/benches
cpu: Apple M3 Pro
                                     │  v1.9.4.txt   │             v1.10.0.txt              │
                                     │    sec/op     │    sec/op     vs base                │
Entry_WithError                         228.8n ±  4%   137.4n ±  5%  -39.95% (p=0.000 n=10)
Entry_WithField_Chain                  1346.5n ±  2%   733.5n ±  3%  -45.53% (p=0.000 n=10)
Entry_WithFields/valid_fields_only      236.2n ±  6%   255.4n ±  1%   +8.11% (p=0.001 n=10)
Entry_WithFields/contains_func          293.1n ±  3%   285.1n ±  3%   -2.76% (p=0.043 n=10)
Entry_WithFields/contains_func_ptr      296.5n ±  3%   300.1n ±  5%        ~ (p=0.529 n=10)
Entry_WithFields/mixed_valid_invalid    339.7n ±  4%   336.7n ±  2%        ~ (p=0.315 n=10)
Entry_WithFields/larger_map             635.9n ±  4%   693.8n ±  2%   +9.11% (p=0.000 n=10)
Entry_ReportCaller_NoCaller             933.4n ±  3%   924.0n ±  2%        ~ (p=0.105 n=10)
Entry_ReportCaller_WithCaller           2.693µ ±  2%   3.050µ ±  3%  +13.28% (p=0.000 n=10)
Entry_ReportCaller_NoCaller_Depth4      914.3n ±  2%   905.5n ±  3%        ~ (p=0.481 n=10)
Entry_ReportCaller_WithCaller_Depth4    2.736µ ±  8%   3.048µ ±  5%  +11.36% (p=0.000 n=10)
ZeroTextFormatter                       457.6n ±  1%   369.3n ±  2%  -19.31% (p=0.000 n=10)
OneStringTextFormatter                  637.0n ±  1%   549.4n ±  2%  -13.75% (p=0.000 n=10)
OneNumericTextFormatter                 682.7n ±  1%   550.2n ±  1%  -19.42% (p=0.000 n=10)
OneBoolTextFormatter                    669.7n ±  1%   550.0n ±  1%  -17.87% (p=0.000 n=10)
NumericTextFormatter                    1.685µ ±  3%   1.261µ ±  2%  -25.17% (p=0.000 n=10)
BoolTextFormatter                       1.450µ ±  1%   1.082µ ±  3%  -25.39% (p=0.000 n=10)
StringerTextFormatter                   2.066µ ±  1%   1.323µ ±  1%  -35.95% (p=0.000 n=10)
ErrorTextFormatter                      924.7n ±  5%   686.7n ±  1%  -25.74% (p=0.000 n=10)
SmallTextFormatter                      944.4n ±  1%   862.6n ±  1%   -8.66% (p=0.000 n=10)
LargeTextFormatter                      5.527µ ±  5%   4.750µ ±  2%  -14.07% (p=0.000 n=10)
SmallColoredTextFormatter              1337.0n ±  3%   838.6n ±  1%  -37.28% (p=0.000 n=10)
LargeColoredTextFormatter               7.955µ ±  5%   4.749µ ±  3%  -40.30% (p=0.000 n=10)
SmallJSONFormatter                      1.627µ ±  1%   1.637µ ±  6%        ~ (p=0.670 n=10)
LargeJSONFormatter                      8.335µ ±  3%   8.172µ ±  1%   -1.96% (p=0.000 n=10)
DummyLogger                             1.843µ ±  3%   1.551µ ±  2%  -15.82% (p=0.000 n=10)
DummyLoggerNoLock                       1.840µ ±  3%   1.558µ ±  3%  -15.30% (p=0.000 n=10)
LoggerLog/disabled_level                1.248n ± 11%   1.192n ± 11%   -4.49% (p=0.011 n=10)
LoggerLog/enabled_log                   223.9n ±  3%   157.7n ±  5%  -29.57% (p=0.000 n=10)
LoggerLog/enabled_logln                 284.2n ±  1%   158.9n ±  2%  -44.09% (p=0.000 n=10)
LoggerJSONFormatter                     2.177µ ±  1%   1.712µ ±  1%  -21.34% (p=0.000 n=10)
LoggerTextFormatter                     1.860µ ±  5%   1.282µ ±  3%  -31.05% (p=0.000 n=10)
geomean                                 843.9n         698.9n        -17.18%

                                     │   v1.9.4.txt   │              v1.10.0.txt               │
                                     │      B/op      │     B/op      vs base                  │
Entry_WithError                          448.0 ± 0%       448.0 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithField_Chain                  2.188Ki ± 0%     2.188Ki ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/valid_fields_only       448.0 ± 0%       448.0 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/contains_func           488.0 ± 0%       488.0 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/contains_func_ptr       488.0 ± 0%       488.0 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/mixed_valid_invalid     488.0 ± 0%       488.0 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/larger_map            1.320Ki ± 0%     1.320Ki ± 0%        ~ (p=1.000 n=10) ¹
Entry_ReportCaller_NoCaller              821.0 ± 0%       800.0 ± 0%   -2.56% (p=0.000 n=10)
Entry_ReportCaller_WithCaller          1.614Ki ± 0%     1.581Ki ± 0%   -2.06% (p=0.000 n=10)
Entry_ReportCaller_NoCaller_Depth4       821.0 ± 0%       800.0 ± 0%   -2.56% (p=0.000 n=10)
Entry_ReportCaller_WithCaller_Depth4   1.614Ki ± 0%     1.581Ki ± 0%   -2.06% (p=0.000 n=10)
ZeroTextFormatter                        272.0 ± 0%       232.0 ± 0%  -14.71% (p=0.000 n=10)
OneStringTextFormatter                   304.0 ± 0%       264.0 ± 0%  -13.16% (p=0.000 n=10)
OneNumericTextFormatter                  308.0 ± 0%       264.0 ± 0%  -14.29% (p=0.000 n=10)
OneBoolTextFormatter                     308.0 ± 0%       264.0 ± 0%  -14.29% (p=0.000 n=10)
NumericTextFormatter                     920.0 ± 0%       808.0 ± 0%  -12.17% (p=0.000 n=10)
BoolTextFormatter                        626.0 ± 0%       552.0 ± 0%  -11.82% (p=0.000 n=10)
StringerTextFormatter                    968.0 ± 0%       808.0 ± 0%  -16.53% (p=0.000 n=10)
ErrorTextFormatter                       472.0 ± 0%       424.0 ± 0%  -10.17% (p=0.000 n=10)
SmallTextFormatter                       528.0 ± 0%       488.0 ± 0%   -7.58% (p=0.000 n=10)
LargeTextFormatter                     3.773Ki ± 0%     3.156Ki ± 0%  -16.36% (p=0.000 n=10)
SmallColoredTextFormatter                600.0 ± 0%       392.0 ± 0%  -34.67% (p=0.000 n=10)
LargeColoredTextFormatter              4.406Ki ± 0%     2.859Ki ± 0%  -35.11% (p=0.000 n=10)
SmallJSONFormatter                     1.078Ki ± 0%     1.070Ki ± 0%   -0.72% (p=0.000 n=10)
LargeJSONFormatter                     5.086Ki ± 0%     5.078Ki ± 0%   -0.15% (p=0.000 n=10)
DummyLogger                              748.0 ± 0%       704.0 ± 0%   -5.88% (p=0.000 n=10)
DummyLoggerNoLock                        748.0 ± 0%       704.0 ± 0%   -5.88% (p=0.000 n=10)
LoggerLog/disabled_level                 0.000 ± 0%       0.000 ± 0%        ~ (p=1.000 n=10) ¹
LoggerLog/enabled_log                    212.0 ± 0%       208.0 ± 0%   -1.89% (p=0.000 n=10)
LoggerLog/enabled_logln                  240.0 ± 0%       208.0 ± 0%  -13.33% (p=0.000 n=10)
LoggerJSONFormatter                    2.156Ki ± 0%     2.125Ki ± 0%   -1.45% (p=0.000 n=10)
LoggerTextFormatter                    1.625Ki ± 0%     1.547Ki ± 0%   -4.81% (p=0.000 n=10)
geomean                                             ²                  -8.14%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                     │  v1.9.4.txt   │             v1.10.0.txt              │
                                     │   allocs/op   │ allocs/op   vs base                  │
Entry_WithError                         3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithField_Chain                   15.00 ± 0%     15.00 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/valid_fields_only      3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/contains_func          5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/contains_func_ptr      5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/mixed_valid_invalid    5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
Entry_WithFields/larger_map             5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
Entry_ReportCaller_NoCaller             18.00 ± 0%     15.00 ± 0%  -16.67% (p=0.000 n=10)
Entry_ReportCaller_WithCaller           29.00 ± 0%     26.00 ± 0%  -10.34% (p=0.000 n=10)
Entry_ReportCaller_NoCaller_Depth4      18.00 ± 0%     15.00 ± 0%  -16.67% (p=0.000 n=10)
Entry_ReportCaller_WithCaller_Depth4    29.00 ± 0%     26.00 ± 0%  -10.34% (p=0.000 n=10)
ZeroTextFormatter                      10.000 ± 0%     7.000 ± 0%  -30.00% (p=0.000 n=10)
OneStringTextFormatter                 11.000 ± 0%     8.000 ± 0%  -27.27% (p=0.000 n=10)
OneNumericTextFormatter                12.000 ± 0%     8.000 ± 0%  -33.33% (p=0.000 n=10)
OneBoolTextFormatter                   12.000 ± 0%     8.000 ± 0%  -33.33% (p=0.000 n=10)
NumericTextFormatter                    19.00 ± 0%     10.00 ± 0%  -47.37% (p=0.000 n=10)
BoolTextFormatter                      18.000 ± 0%     9.000 ± 0%  -50.00% (p=0.000 n=10)
StringerTextFormatter                   22.00 ± 0%     10.00 ± 0%  -54.55% (p=0.000 n=10)
ErrorTextFormatter                     14.000 ± 0%     9.000 ± 0%  -35.71% (p=0.000 n=10)
SmallTextFormatter                     12.000 ± 0%     9.000 ± 0%  -25.00% (p=0.000 n=10)
LargeTextFormatter                      19.00 ± 0%     14.00 ± 0%  -26.32% (p=0.000 n=10)
SmallColoredTextFormatter              15.000 ± 0%     7.000 ± 0%  -53.33% (p=0.000 n=10)
LargeColoredTextFormatter               46.00 ± 0%     12.00 ± 0%  -73.91% (p=0.000 n=10)
SmallJSONFormatter                      25.00 ± 0%     23.00 ± 0%   -8.00% (p=0.000 n=10)
LargeJSONFormatter                      75.00 ± 0%     73.00 ± 0%   -2.67% (p=0.000 n=10)
DummyLogger                            13.000 ± 0%     9.000 ± 0%  -30.77% (p=0.000 n=10)
DummyLoggerNoLock                      13.000 ± 0%     9.000 ± 0%  -30.77% (p=0.000 n=10)
LoggerLog/disabled_level                0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=10) ¹
LoggerLog/enabled_log                   4.000 ± 0%     3.000 ± 0%  -25.00% (p=0.000 n=10)
LoggerLog/enabled_logln                 6.000 ± 0%     3.000 ± 0%  -50.00% (p=0.000 n=10)
LoggerJSONFormatter                     30.00 ± 0%     27.00 ± 0%  -10.00% (p=0.000 n=10)
LoggerTextFormatter                     21.00 ± 0%     16.00 ± 0%  -23.81% (p=0.000 n=10)
geomean                                            ²               -25.77%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                          │  v1.9.4.txt  │              v1.10.0.txt              │
                          │     B/s      │      B/s       vs base                │
ZeroTextFormatter           106.3Mi ± 1%    131.7Mi ± 2%  +23.90% (p=0.000 n=10)
OneStringTextFormatter      88.34Mi ± 1%   102.42Mi ± 2%  +15.95% (p=0.000 n=10)
OneNumericTextFormatter     78.23Mi ± 1%    97.08Mi ± 1%  +24.09% (p=0.000 n=10)
OneBoolTextFormatter        82.59Mi ± 1%   100.57Mi ± 1%  +21.77% (p=0.000 n=10)
NumericTextFormatter        74.74Mi ± 3%    99.85Mi ± 2%  +33.60% (p=0.000 n=10)
BoolTextFormatter           65.15Mi ± 1%    87.32Mi ± 3%  +34.04% (p=0.000 n=10)
StringerTextFormatter       64.64Mi ± 1%   100.90Mi ± 1%  +56.10% (p=0.000 n=10)
ErrorTextFormatter          69.10Mi ± 5%    93.05Mi ± 1%  +34.66% (p=0.000 n=10)
SmallTextFormatter          86.85Mi ± 1%    95.08Mi ± 1%   +9.48% (p=0.000 n=10)
LargeTextFormatter          49.35Mi ± 5%    57.43Mi ± 2%  +16.38% (p=0.000 n=10)
SmallColoredTextFormatter   102.7Mi ± 3%    163.8Mi ± 1%  +59.42% (p=0.000 n=10)
LargeColoredTextFormatter   67.14Mi ± 5%   112.45Mi ± 3%  +67.48% (p=0.000 n=10)
SmallJSONFormatter          66.84Mi ± 1%    66.44Mi ± 6%        ~ (p=0.684 n=10)
LargeJSONFormatter          46.91Mi ± 3%    47.85Mi ± 1%   +2.00% (p=0.000 n=10)
geomean                     73.01Mi         92.67Mi       +26.93%

Full Changelog: https://github.com/sirupsen/logrus/compare/v1.9.4...v1.10.0

1 days ago
unioffice

v2.13.0

Release notes - UniOffice v2.13.0

This release contains new features, improvements and bug fixes.

New Features

  • US-1643 Print and page setup API for the spreadsheet package
  • US-1642 Animation API for the presentation package (on-click entrance effects: Appear, Fade, Fly In)
  • US-1639 Speaker notes API for the presentation package
  • US-1659 Word section formatting API (columns, page borders, line numbering, page-number format, title page)
  • US-1709 Support for tables inside a Structured Document Tag (SDT)
  • US-1707 Support for threaded comment replies and comment metadata getters
  • US-1708 Support for custom text highlight colors through the run shading API

Improvements

  • US-1393 DOCX to PDF rendering of table rows taller than a page improvement
  • US-1671 DOCX to PDF rendering of vertically merged table cells taller than a page improvement
  • US-1697 DOCX to PDF XObject deduplication, reducing output file size
  • US-1689 UniPDF dependency update to v5
  • US-1678 CI/CD pipeline publishing the latest SBOM files with each release

Bug Fixes

  • US-1617 Negative chart axis IDs (c:axId / c:crossAx) failing to read fix
  • US-1690 Table of contents not rendering until a manual field refresh fix

Breaking Changes

  • presentation.New() now emits a <p:sldSz> element with the standard 16:9 slide size, which previously was omitted. This changes the serialized bytes of every deck created by New(), so byte-for-byte or golden-file comparisons against output from earlier versions need to be regenerated. See US-1642.
2 days ago
fiber

v3.5.0

🚀 New

  • Harden proxy middleware (#4405) New proxy.SecurityPolicy with secure defaults: private/loopback upstreams, non-http(s) schemes and HTTPS-to-HTTP redirect downgrades are rejected and hop-by-hop headers stripped.
    proxy.WithSecurityPolicy(proxy.SecurityPolicy{
        AllowPrivateIPs: true, // internal upstreams are blocked by default
    })
    https://docs.gofiber.io/middleware/proxy#security
  • Add support for custom binding precedence (#4544) New binding_source struct tag overrides the Bind().All() source order per struct; the resolved order is cached per reflect.Type.
    type SearchReq struct {
        Name string `binding_source:"query,header,cookie,body,uri" query:"name" header:"x-name" json:"name"`
    }
    https://docs.gofiber.io/api/bind#custom-precedence
  • Add SkipUnmatchedRoutes with two-tier 404/405 fast path (#4486) New fiber.Config option that answers unregistered paths with 404/405 before the middleware chain runs (CORS preflight exempt, off by default).
    app := fiber.New(fiber.Config{
        SkipUnmatchedRoutes: true, // default: false
    })
    https://docs.gofiber.io/api/fiber#skipunmatchedroutes

🧹 Updates

  • Speed up route matching with a flat tree index, leading-byte candidate rejection and a specialized /const/:param matcher (#4558)
  • Quick-reject routes on precomputed slash-count bounds (#4517)
  • Restore Route inlining lost in the RFC 9110 changes (#4501)
  • Skip the Accept join allocation in the Format emptiness check (#4503)
  • Skip the ip.String() allocation in IsProxyTrusted for CIDR-only trust configs (#4500)
  • Adopt SWAR-accelerated utils helpers in hot-path scanners (#4536)
  • Adopt gofiber/utils v2.2.0 helpers across hot paths (#4542)
  • Adopt gofiber/utils v2.4.0 helpers and optimize adaptor/proxy hot paths (#4557)
  • adaptor: Cut allocations on the net/http bridge (#4559)
  • cache: Optimize key generation and allocation (#4608)
  • cors: Fold preflight Vary calls into one header scan (#4502)
  • csrf: Optimize trusted subdomain matching (#4543)
  • proxy: Optimize balancer round-robin (#4549)
  • session: Use make() to preallocate relevantExtractors (#4562)
  • De-flake the clock-sensitive tests (#4575)

🐛 Fixes

  • Fix open redirects in composed route URLs and redirect rules (#4584)
  • Preserve published route buckets during rebuilds (#4579)
  • URL-encode query values in Redirect.Route (#4529)
  • Accept the full float64 range in the float route constraint (#4528)
  • Match HTTP field names the way a recipient must (#4585)
  • Honor Accept weights followed by whitespace before the comma (#4550)
  • Compare Accept media types case-insensitively (#4493)
  • Honor q=0 rejections in content negotiation (#4508)
  • Honor duplicate Content-Encoding after empty values (#4514)
  • Improve RFC 9110 compliance across req/res/ctx, helpers and middleware (#4494)
  • Avoid reading omitted request bodies in Bind.All (#4565)
  • Combine repeated proxy headers for client IP extraction (#4568)
  • Close the listener on Listen error paths to avoid FD leaks (#4532)
  • Fire OnPostShutdown once with the real shutdown error (#4531)
  • Keep all NewErrorf args when the first isn't a format string (#4530)
  • adaptor: Preserve Connection tokens (#4606)
  • cache: Honor only-if-cached for non-shareable entries (#4589)
  • cache: Stop charging its own latency as response age (#4578)
  • healthcheck: Answer HEAD probes with the GET status (#4577)
  • limiter: Floor sub-second expiration in the sliding window (#4564)
  • proxy: Classify IPv6 transition addresses correctly in upstream validation (#4553)
  • proxy: Guard runtime helpers against DNS rebinding (#4518)
  • proxy: Preserve empty-query URL semantics (#4513)
  • redirect: Rank wildcards behind character classes in rule ordering (#4607)
  • static: Fix leading-slash normalization for fs.FS root paths (#4507)
  • Fix client redirect handling, TLS diagnostics and the JSONP callback (#4586)
  • Fix correctness issues across log injection, cookie jar, routing and Content-Type handling (#4570)

🛠️ Maintenance

22 changes
  • bump github.com/klauspost/compress from 1.19.1 to 1.19.2 (#4602)
  • bump DavidAnson/markdownlint-cli2-action from 24.1.0 to 24.2.0 (#4583)
  • bump release-drafter/release-drafter from 7.6.0 to 7.7.0 (#4566)
  • bump github.com/gofiber/utils/v2 from 2.4.0 to 2.4.1 (#4567)
  • bump github.com/valyala/fasthttp from 1.72.0 to 1.73.0 in the fasthttp-modules group (#4561)
  • bump github.com/mattn/go-isatty from 0.0.23 to 0.0.24 (#4556)
  • bump actions/checkout from 7.0.0 to 7.0.1 (#4551)
  • bump github.com/klauspost/compress from 1.19.0 to 1.19.1 (#4548)
  • bump github.com/gofiber/schema from 1.8.2 to 1.8.3 (#4547)
  • bump release-drafter/release-drafter from 7.5.1 to 7.6.0 (#4546)
  • bump DavidAnson/markdownlint-cli2-action from 24.0.0 to 24.1.0 (#4545)
  • bump actions/setup-go from 6.5.0 to 7.0.0 (#4541)
  • bump github.com/mattn/go-isatty from 0.0.22 to 0.0.23 (#4540)
  • bump github.com/shamaton/msgpack/v3 from 3.1.2 to 3.2.0 (#4538)
  • bump actions/setup-node from 6.4.0 to 7.0.0 (#4537)
  • bump github.com/gofiber/schema from 1.8.1 to 1.8.2 (#4535)
  • bump github.com/gofiber/utils/v2 from 2.1.1 to 2.1.2 (#4520)
  • bump the golang-modules group with 3 updates (#4515)
  • bump DavidAnson/markdownlint-cli2-action from 23.2.0 to 24.0.0 (#4506)
  • bump golang.org/x/sys from 0.46.0 to 0.47.0 in the golang-modules group (#4511)
  • bump golang.org/x/text from 0.38.0 to 0.39.0 in the golang-modules group (#4509)
  • bump github.com/gofiber/schema from 1.8.0 to 1.8.1 (#4510)

📚 Documentation

  • Explain adjacent multi-param capture rules (#4597)
  • Document Ctx as a never-cancelable context (#4560)
  • Move README.md to the repo root so pkg.go.dev renders it (#4505)
  • logger: Explain when the error tag is populated (#4592)

📒 Documentation: https://docs.gofiber.io/

💬 Discord: https://gofiber.io/discord

Full Changelog: https://github.com/gofiber/fiber/compare/v3.4.0...v3.5.0

Thank you @0xghost42, @ATKasem, @Rachit-Gandhi, @ReneWerner87, @RubenPari, @SivaPA08, @aryan-finbox, @aryan262, @gaby, @james-yusuke, @nikolauspschuetz, @sueun-dev and @sunghyun1999 for making this release possible.

2 days ago
fiber

v2.52.15

🐛 Bug Fixes

  • idempotency: release MemoryLock keys on unlock #4569

Full Changelog: https://github.com/gofiber/fiber/compare/v2.52.14...v2.52.15

2 days ago
wails

Wails v3.0.0-beta.8

Wails v3 Beta Release - v3.0.0-beta.8

Added

  • Add documentation URL generation to automatic changelog entries in PR by @taliesin-ai
  • Add Streams: bidirectional byte streams between Go and JavaScript with the WebSocket programming model and no listening socket. Declare a stream in Go with app.HandleStream(name, handler) and connect from the frontend with Stream(name), which returns a WebSocket-shaped object. Go→JS is carried by one held poll per window over the asset server, JS→Go by a normal POST; nothing binds a TCP port and nothing goes through evaluateJavaScript. In server builds (-tags server) the same handler is served over a real WebSocket instead, so application code is identical across builds. by @leaanthony
  • Move mailbox changelog entry to Unreleased in PR by @leaanthony

Changed

  • Update docs sidebar autogeneration and blog author type derivation in PR by @leaanthony

Fixed

  • WebView2 initialization uses a deadline and message pump in PR by @leaanthony
  • WebView2 cookie test skips in CI unless opt-in and locks execution to current OS thread in PR by @leaanthony
  • Windows menu builders restore command IDs for submenu parent items in PR by @gilad-ch
  • Align the official cross-compilation image with the GTK 4.14+ Linux support baseline (#5928)
  • Configure iOS Xcode project to retain inherited linker flags and add -ObjC in PR by @mortenolsrud
  • Fix excessive TCP connection churn in the wails3 dev asset proxy on large frontends, which could exhaust the host's ephemeral ports and make unrelated processes fail with EADDRNOTAVAIL
  • Queue per-window event JavaScript for ordered dispatch and backpressure in PR by @leaanthony

Removed

  • Remove the desktop binary release pipeline: v3 releases are tag-only and the wails3 CLI is installed with go install. Deletes release-v3.yml and the nightly step that dispatched it in PR by @leaanthony

🤖 This is an automated nightly release generated from the latest changes on master.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.8

⚠️ Beta Warning: This is pre-release software. The API is stable, but you may still encounter issues before the final 3.0 release.

3 days ago
pdfcpu

v0.15.0

pdfcpu v0.15.0

This release is a focused follow-up to v0.14.0 improving diagnostics and observability for validating large PDF corpora. It also includes PDF processing hardening, CJK text wrapping for watermarks, and clearer signature-validation behavior.

v0.15.0 follows v0.14.0 by only one week because post-release corpus testing made an existing operational gap clear: large wildcard-driven validation runs delayed failure diagnostics until the full input set completed and provided no quiet-mode indication of the file currently being processed.

The changes are targeted and immediately useful to corpus testers, so holding them for a later feature release would unnecessarily delay feedback. The short interval is intentional and does not establish a weekly release routine.

Corpus validation diagnostics

Multi-file CLI validation now reports each failed input as soon as the failure is detected, continues with the remaining inputs, and exits nonzero with a compact summary:

validation failed: 66 of 463 files invalid

The new --progress flag identifies the active input during quiet validation runs. This is useful when a long-running corpus job stalls on a particular file:

pdfcpu validate -q --progress "**/*.pdf"

The quotes are intentional. They pass the recursive pattern to pdfcpu for internal expansion instead of asking the shell to expand thousands of paths into one command line, which may exceed the operating system's argument-size limit.

With -q --progress, progress and validation failures are written to standard error while standard output remains clean:

validating(mode=relaxed) path/to/input.pdf ...
validate path/to/input.pdf: validation error: ...

Corpus testing and issue reports

There is a new Corpus Validation guide documenting quick assessment, progress monitoring, logging, validation modes, result interpretation, and focused issue reporting.

A failed corpus run is diagnostic input, not an issue backlog. Public reports must isolate one manually verified and independently reproduced problem with the smallest shareable PDF. Include the relevant error and final summary, and attach large logs as compressed files instead of pasting them into an issue.

AI-generated, bulk-generated, or mechanically reformatted corpus reports will be closed immediately without investigation. Corpus-wide analysis, failure classification, confidential-file investigation, and scheduled remediation are separate engineering work and may require a paid engagement.

Limited corpus investigation and remediation work may be available by arrangement.

PDF validation and processing hardening

Malformed and inconsistent PDF structures now produce more contextual errors across reading, dereferencing, validation, optimization, fonts, forms, and XObjects. Integer conversion and encryption handling have been tightened, and additional guards reduce the risk of panics while processing damaged input.

This work is backed by expanded malformed-input, error-path, and optimization regression coverage.

CJK watermark text wrapping

Text watermarks now support automatic wrapping for CJK text, including long runs without spaces. Oversized text is wrapped to the configured width instead of forcing unintended font-size reduction. This resolves issue #1427 and includes expanded CJK wrapping and layout coverage.

Digital signatures

Signature validation output is clearer for legacy and unsupported cases. Evidence handling, PKCS#1 and PKCS#7 processing, and related error classification have also been tightened.

Compatibility notes

The pkg/api multi-file validation contract is unchanged: API callers continue to receive joined errors after processing. The CLI now streams individual multi-file validation failures and returns a final summary, so scripts that compare complete stderr strings should be updated to rely on exit status and stable error classification instead.

Existing non-quiet validation already reports the active input. --progress extends that visibility to quiet corpus runs without duplicating normal progress output.

Changelog

  • f2686555086a2e76dc19f602ea1897f6e3baae4d bump version
  • dcc168d28225f7f3266836668483a3cdaced729a update issue reporting guidelines
  • f5f3edf37f9642c4403300db88109521085006f2 harden PDF validation and add progress reporting
  • afc357e23773c32d61b8c18601f77aa8ffcb6dab clarify signature validation output and legacy handling
  • c9c07d0fcd19439f967cfff96203ebe41a1e8327 harden crypto integer conversions
  • 198382701afee53f783aaf425cc240ee26170ae4 upgrade gh workflows
  • 4e5f3aba056aebb721d7334032b378aeba1708b8 harden crypto integer conversions
  • b57300b5f79f9139a7a6534fce7cbc96633ae025 clean up for #1427
  • a2c33719c6aa55593d0316e50247388a3763b5f2 add CJK auto-wrap support for text watermarks (#1427)
3 days ago
wails

Wails v3.0.0-beta.7

Wails v3 Beta Release - v3.0.0-beta.7

Added

  • Add macOS autoplay preference to disable user action requirement for media playback in PR by @Eyalm321
  • Move mailbox changelog entry to Unreleased in PR by @leaanthony

Changed

  • macOS zoom animation uses CADisplayLink or NSTimer for smoother performance in PR by @savely-krasovsky

Fixed

  • Configure iOS Xcode project to retain inherited linker flags and add -ObjC in PR by @mortenolsrud
  • Fix excessive TCP connection churn in the wails3 dev asset proxy on large frontends, which could exhaust the host's ephemeral ports and make unrelated processes fail with EADDRNOTAVAIL
  • Queue per-window event JavaScript for ordered dispatch and backpressure in PR by @leaanthony

🤖 This is an automated nightly release generated from the latest changes on master.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.7

⚠️ Beta Warning: This is pre-release software. The API is stable, but you may still encounter issues before the final 3.0 release.

4 days ago
wails

Wails v2.14.0

Installation

go install github.com/wailsapp/wails/v2/cmd/wails@v2.14.0

Changes

Fixed

  • Fixed nil pointer crash and swallowed network error when downloading the WebView2 bootstrapper, which made the app exit instead of showing the installation error dialog by @jannskiee
5 days ago
wails

Wails v3.0.0-beta.6

Wails v3 Beta Release - v3.0.0-beta.6

Added

  • Implement bounded host-side storage for oversized events and ordered JavaScript delivery in PR by @leaanthony
  • Implement macOS Dock bounce for window flashing in PR by @julianstorer

Fixed

  • Asset server preserves content-type sniffer errors and unwritten prefixes during flushing in PR by @leaanthony
  • Prevent macOS applications from crashing when replacing the application menu from a Wails callback
  • Fix unreadable native menus on Windows 10 1809 / Windows Server 2019 (build 17763). The dark-mode uxtheme exports were gated on build 18334, so the app-level dark-mode opt-in never ran on those hosts: the menu background was painted dark but Windows kept drawing menu text in the light theme, leaving dark text on a dark background. The ordinals exist from 17763, so the gate now matches.
  • Fix w32.GetStockObject calling GetDeviceCaps instead of GetStockObject, which made it return 0 for every stock object.
  • Improve WebView2 bootstrapper download error handling and reporting in PR by @jannskiee

🤖 This is an automated nightly release generated from the latest changes on master.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.6

⚠️ Beta Warning: This is pre-release software. The API is stable, but you may still encounter issues before the final 3.0 release.