Skip to content

Releases

v0.11.0 (2026-10-14)

Choose a tag to compare

@emmansun emmansun released this 14 Oct 00:31

Notable Changes

  • Unified SIMD dispatch across all architectures
    Runtime dispatch now lives in a single base64_dispatch.go driver that invokes encodeSimd/decodeSimd hooks implemented by each SIMD architecture (amd64, arm64, loong64, ppc64x, riscv64, s390x). The former base64_asm.go was split into base64_amd64.go and base64_s390x.go, and the amd64 assembly merged decodeStdAsm/decodeUrlAsm into a single decodeAsm(dst, src, url bool) entry point. No exported API changes.

  • RISCV64: custom-alphabet encodes now use the RVV path
    Previously this case always fell back to the generic encoder. Since the RVV encoder performs its lookup directly on the raw 64-byte alphabet table, that restriction was no longer needed, so custom alphabets now take the same SIMD path (output unchanged).

  • LoongArch64: replaced raw WORD encodings with real assembler mnemonics
    Now that the Go 1.26 assembler supports VSHUFB/XVSHUFB, VSLTBU/XVSLTBU, VSSUBBU/XVSSUBBU, VMADDWODHBU/XVMADDWODHBU, VMADDWODWHU/XVMADDWODWHU and XVPERMIQ, the hand-coded WORD $0x... instructions in base64_loong64.s are replaced with readable mnemonics. Generated machine code is byte-identical (verified via objdump).

  • Minimum Go version raised to 1.26
    go.mod now requires Go 1.26+. If you are unable to upgrade your Go version, please continue using v0.10.0.

CI / Tooling

  • Applied StepSecurity security best practices (#46): workflows run with least-privilege permissions and harden-runner, actions are pinned, and CodeQL code scanning + OpenSSF Scorecards workflows were added.
  • CI upgraded to Go 1.26 across all workflows; Dependabot now also tracks GitHub Actions dependencies daily.
  • Added repo agent guidelines (.github/copilot-instructions.md) and updated the SIMD skill docs to match the new dispatch layout.

Dependencies

  • Bumped golang.org/x/sys from v0.46.0 to v0.49.0.
  • Bumped GitHub Actions: actions/checkout 4.4.0 → 7.0.1 (#48), actions/setup-go 6.4.0 → 7.0.0 (#47), actions/cache 4.3.0 → 6.1.0 (#51), docker/setup-qemu-action 3.7.0 → 4.4.0 (#49), codecov/codecov-action 4.6.0 → 7.1.1 (#50), step-security/harden-runner 2.16.1 → 2.22.1 (#52).

Full Changelog: v0.10.0...v0.11.0

v0.10.0 (2026-6-23)

Choose a tag to compare

@emmansun emmansun released this 23 Jun 06:02
24e9d2a

New Features

  • WHATWG Forgiving Base64 Decoding (#43)
    Added Forgiving() method on Encoding to support the WHATWG forgiving base64 decoding approach. In this mode, the decoder transparently ignores ASCII whitespace characters — space (' '), tab ('\t'), form feed ('\f'), line feed ('\n'), and carriage return ('\r') — in the input.
    decoded, err := base64.StdEncoding.Forgiving().DecodeString("SGVs bG8g V29y bGQ=")

Performance Improvements

  • AMD64: AVX-512 VBMI encode/decode paths
    Added dedicated AVX-512 VBMI encode and decode implementations. The encode path uses the multishift technique for maximum throughput on wide SIMD hardware. Falls back to AVX2 for tail bytes when input is not aligned to the AVX-512 block size.
  • LoongArch64: LASX (256-bit SIMD) encode/decode
    Added full LASX encode/decode paths using xvpermi.q for Q-lane operations, processing 24 bytes → 32 bytes per encode iteration and 32 bytes → 24 bytes per decode iteration. Falls back to LSX for remaining tail bytes.
  • ARM64: Direct VTBX opcode usage
    Switched to the VTBX opcode directly, eliminating unnecessary intermediate instructions.
  • PowerPC64x: SIMD optimizations
    Refined and debugged the PPC64x assembly paths for better performance and correctness.
  • s390x: SIMD optimizations
    Optimized the s390x vector implementation for improved throughput.

CI / Tooling

  • Added Intel SDE workflow for AVX-512 VBMI testing on GitHub Actions, with automated SDE download, ptrace configuration, and SHA256 verification.
  • Added base64 benchmark GitHub Action for automated performance regression tracking.

Dependencies

  • Bumped golang.org/x/sys from v0.41.0 → v0.46.0.

RISCV64 RVV Support

Choose a tag to compare

@emmansun emmansun released this 04 Mar 02:59

Notable Changes:

  • Added RISCV64 RVV support for both Base64 encode and decode fast paths, with automatic fallback to generic logic when needed.
  • Introduced adaptive vector-length processing to improve portability and throughput across different RVV-capable CPUs.
  • Added RISCV64-specific asm tests and generic-vs-RVV benchmarks for correctness and performance validation.
  • Added a new riscv64-qemu GitHub Actions workflow and updated README/README-CN CI badges and architecture lists.
  • CI now covers RISCV64 QEMU testing end-to-end, and the new RVV path is verified passing.

v0.8.0

Choose a tag to compare

@emmansun emmansun released this 13 Nov 00:58
b758a3b

Notable Changes

  • Loong64 LSX optimization support.

Since v0.8.0+, the minimum required version of Go has been changed to v1.25+. If you are unable to upgrade your Go version, please continue using the older version.

v0.7.0

Choose a tag to compare

@emmansun emmansun released this 11 Mar 02:27
5e4aec8

Notable Changes:

  • upgrade go to at least 1.23.0

By now Go 1.24.0 has been released, and Go 1.22 is no longer supported
per the Go Release Policy (https://go.dev/doc/devel/release#policy).

v0.6.2

Choose a tag to compare

@emmansun emmansun released this 19 Dec 02:50
4182855

Notable Changes:

  • s390x: reduce one VN call
  • add doc details to DecodeString and AppendDecode
  • Upgrade dependency

v0.6.1

Choose a tag to compare

@emmansun emmansun released this 08 Nov 09:32
f9322d2

Notable Changes:

  • arm64: decode minor optimization #21

v0.6.0

Choose a tag to compare

@emmansun emmansun released this 24 Oct 00:18
05ec2d3

Notable Changes:

  • Supports encoding length in [16,48) with ARM64 NEON instructions #20
  • Supports decoding length in [24,64) with ARM64 NEON instructions #20

v0.5.0

Choose a tag to compare

@emmansun emmansun released this 17 Oct 05:40
57c73e8

Notable Changes:

  • s390x optimization #19

v0.4.0

Choose a tag to compare

@emmansun emmansun released this 16 Oct 02:14
19f3729

Notable Changes:

  • ppc64x optimization #18