Skip to content

v6.0.0

Latest

Choose a tag to compare

@chinmay-sawant chinmay-sawant released this 23 Jun 20:09
de17a81

GoPdfSuit v6.0.0 - Release Notes

Release date: June 2026
Tag: v6.0.0
Full changelog: v5.0.0...v6.0.0


Overview

v6.0.0 is a major performance and compliance release. It bumps the module to gopdfsuit/v6, requires Go 1.26.4, and optimizes the PDF engine, Gin HTTP layer, and PyPDFSuit bindings.

Headline: full PDF/A-4 + PDF/UA-2 compliance at ~9,600 ops/s mean on Zerodha workloads (+243% vs the compliant pre-opt baseline), with veraPDF passing on retail, active, and HFT outputs.

Scope: 93 commits, 637 files, +112,770 / -6,262 lines.


Performance at a Glance

Surface Baseline v6.0.0 Gain
Zerodha in-process (compliant) 573 ops/s (Go 1.24) 9,594 mean / 10,005 peak +243% vs 2,799 pre-opt
Gin HTTP (k6 weighted) ~674 req/s 1,223 req/s ~1.8x
Gin HTTP (retail-only) - 3,965 req/s -
PyPDFSuit (honest path) 221 ops/s 836 ops/s +278%
BenchmarkGoPdfSuit 26.0 ms/op 23.0 ms/op -11.6%
GoPDFKit parity 5/7 wins 7/7 wins up to +788%

All Zerodha tiers (retail, active, HFT) pass PDF/A-4 and PDF/UA-2. SlopGuard: 218/218 PERF findings fixed.


Breaking Changes

Module path: gopdfsuit/v5 -> gopdfsuit/v6. Update imports and run:

go get github.com/chinmay-sawant/gopdfsuit/v6@v6.0.0
go mod tidy
import "github.com/chinmay-sawant/gopdfsuit/v6/pkg/gopdflib"
Change Action
Go 1.26.4 required Upgrade toolchain and Docker images
pypdfsuit 6.0.0 pip install pypdfsuit==6.0.0
ECDSA P-256 default signing Verify signing integrations (80% retail workload)
veraPDF in make test PDF/A-4 + PDF/UA-2 gates now mandatory
GIN_FAST_API=1 Optional Gin fast path
Internal types changed ExtraObjects, StructElem.Kids, redact objMap (forks only)

What's New

PDF engine

  • Buffer pooling, direct zlib streaming, pre-sized page content streams, pooled compress/flate.Writer
  • Structure tree: maps → slices, iterative walks, lazy arena (arenaActivationThreshold=512), tdLeafFast, compliant HFT TR → TD hierarchy
  • Cached ICC profiles, static XMP shell, precomputed font hints
  • Bounded caches (subsetCache, imgCache, propsCache, sharedRowRenderCache) - fixes k6 OOM/hang regression
  • XFDF startxref repair for object streams
  • Document ID hash: crypto/md5crypto/sha256

HTTP layer (gopdfsuit)

  • Sonic JSON decode with pretouch
  • HFT decode fast path with row preallocation
  • Template pool and PEM/signer cache
  • Bounded sharedRowRenderCache (4,096 entries, 64 MB cap)

PyPDFSuit

  • Specialized serializers replacing to_dict() tree walks
  • Compact UTF-8 JSON encoding
  • Honest benchmark surface (JSON payload cache removed from published numbers)

Quality & compliance

  • 218/218 SlopGuard PERF findings remediated
  • veraPDF post-test gate wired into make test (36/36 PASS)
  • CONTRIBUTING.md and guides/release-prep.md added
  • PyPI auto-publish on v* tags

Go 1.26.4 modernization

  • go fix modernizer pass: min()/max() builtins, new(expr) pointer fields
  • Docker base: golang:1.24.11golang:1.26.4
  • New guide: guides/GO_1_26_4_FEATURE_GUIDE.md

Documentation & benchmarks

  • README reframed as "Three PDF Engines, One Repo" with runtime performance table
  • Expanded benchmark suite: data-table harnesses, 10×48-worker runs, GoPDFKit/Gotenberg comparisons
  • Redesigned Performance and Comparison pages on the docs site
  • Full optimization report corpus in guides/optimizations/

Infrastructure

  • Deslop CI workflow (.github/workflows/deslop.yml) - fails on code-quality findings
  • backend-test CI job running make test
  • .github/FUNDING.yml for GitHub Sponsors

What's Changed


Upgrade

# Go
go get github.com/chinmay-sawant/gopdfsuit/v6@v6.0.0 && go mod tidy

# Python
pip install --upgrade pypdfsuit==6.0.0

# Docker
docker pull chinmaysawant/gopdfsuit:6.0.0

# Verify
make test

Roadmap

Target Status
Zerodha 8,000 ops/s (compliant) Met at 9,594 ops/s
Gin weighted 1,500 req/s ~82% (1,232 req/s peak)
Zerodha 15,000 ops/s ~64%; Phases B/C planned
PyPDFSuit vs native Go 836 vs 11,721 ops/s; CGO boundary remains

Details: optimization executive summaries


Contributors

Thanks to @chinmay-sawant for all changes in this release.

image

Links

What's Changed

Full Changelog: v5.0.0...v6.0.0