Skip to content

feat!: remove easyjson from go-jsonstream#39

Merged
aaron-zeisler merged 2 commits into
v4from
aaronz/SDK-2116/remove-easyjson
May 27, 2026
Merged

feat!: remove easyjson from go-jsonstream#39
aaron-zeisler merged 2 commits into
v4from
aaronz/SDK-2116/remove-easyjson

Conversation

@aaron-zeisler
Copy link
Copy Markdown

@aaron-zeisler aaron-zeisler commented Apr 29, 2026

Summary

This is the v4 major-version bump for go-jsonstream. Two commits:

  1. chore: remove easyjson implementation — drops the optional easyjson backend (gated behind //go:build launchdarkly_easyjson), strips the !launchdarkly_easyjson build constraints from default-implementation files, and removes github.com/mailru/easyjson from go.mod. The build tag becomes a silent no-op for any consumer that still sets it.
  2. feat!: bump module path to v4 — bumps the module path /v3/v4, rewrites internal imports, updates release-please-manifest.json to 4.0.0, drops bump-minor-pre-major. Workflow file changes (release-please.yml, ci.yml, check-go-versions.yml) for v4 land separately in #40.

The conventional-commit prefix change (chore:feat!:) addresses Matthew's review feedback that removing the public EasyJSONBuffer was a major breaking change. The retarget to a v4 branch is the resolution.

SDK-2119: EasyJSON Removal — Dependency Chain (v4 strategy)

go-jsonstream/v4 (this PR)              <- feat!:
└─ go-sdk-common/v4 (#50)               <- feat!:
   ├─ go-server-sdk-evaluation/v4 (#51) <- feat!:
   ├─ go-sdk-events/v3 (#43)            <- chore:
   └─ go-server-sdk/v7 (#380)           <- chore:
      └─ ld-relay (#666)                <- chore:
         └─ internal services (6 PRs)   <- chore:

The three library PRs (#39, #50, #51) are now feat!: major bumps (/v3/v4). Consumer PRs stay chore: because the consumers themselves don't break public APIs — they just upgrade their dependencies.

Stage layout

Stage Purpose PRs
1 Configure v4 branch's CI workflows #40, #52, #53
3 v4 major bumps + EasyJSON removal (libraries) #39, #50, #51
4 Cascade /v3 → /v4 through 10 downstream PRs (dev pseudo-versions) #43, #380, #666, #8924, 6 services
5 After v4.0.0 tags land, flip downstream go.mod from pseudo-versions to real (post-merge)

Context

Part of SDK-2113 (epic). Tracks SDK-2116. First PR in the dep-chain stack — go-sdk-common (#50) pins this PR's HEAD via dev pseudo-version, and go-server-sdk-evaluation (#51) pins both.

Test plan

  • go test ./... passes (v4 module path)
  • go vet ./... clean
  • go build -tags launchdarkly_easyjson ./... still succeeds (tag is now a no-op)
  • go mod graph | grep easyjson returns empty
  • grep -r mailru/easyjson . returns no source hits

via LD Research 🤖

Drops the optional easyjson backend and its build-tag gate. The stdlib
encoding/json implementation is now the only path. The
launchdarkly_easyjson build tag becomes a silent no-op for any
consumer that still sets it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
// efficiently as possible within other data structures that are being unmarshaled with easyjson.
// Directly using the same Lexer that is already being used is more efficient than asking Lexer to
// scan the next object, return it as a byte slice, and then pass that byte slice to NewReader.
func NewReaderFromEasyJSONLexer(lexer *jlexer.Lexer) Reader {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The removal of this function makes this particular library change a major breaking change. So instead of chore:, this should be feat!:.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@keelerm84 Thanks for these comments 👍 I'll review all the open pull requests for similar issues. I've been assuming that the only library where we want to explicitly avoid breaking changes would be go-server-sdk. But should we also avoid breaking changes on the go-server-sdk's dependencies? These include go-jsonstream, go-sdk-common, and go-server-sdk-evaluation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Discussed directly. It's fine to make major breaking changes for internal libraries like this.

// efficiently as possible within other data structures that are being marshaled with easyjson.
// Directly using the same Writer that is already being used is more efficient than producing an
// intermediate byte slice and then passing that data to the Writer.
func NewWriterFromEasyJSONWriter(writer *ejwriter.Writer) Writer {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This removal is also a breaking change.

@keelerm84 keelerm84 changed the title chore: remove easyjson from go-jsonstream feat!: remove easyjson from go-jsonstream May 26, 2026
Transitions go-jsonstream to its v4 major version per Go's semantic
import versioning. With easyjson removed in the prior commit, this is
the natural moment to take the major bump.

Changes in this commit:
- go.mod: module path /v3 -> /v4
- All .go files: import paths /v3/internal/commontest -> /v4/internal/commontest
- README.md: badge and pkg.go.dev link refs from /v3 -> /v4
- .release-please-manifest.json: 3.1.1 -> 4.0.0
- release-please-config.json: drop bump-minor-pre-major (v4 is post-1.0)

Workflow file (release-please.yml, ci.yml, check-go-versions.yml)
changes for v4 are landing in #40 separately.

Part of the SDK-2113 EasyJSON removal project, shipping these libraries
as v4 majors per the v3 -> v4 strategy.

Co-authored-by: Cursor <cursoragent@cursor.com>
@aaron-zeisler aaron-zeisler changed the base branch from v3 to v4 May 26, 2026 22:46
@aaron-zeisler aaron-zeisler merged commit 5872e14 into v4 May 27, 2026
22 of 23 checks passed
@aaron-zeisler aaron-zeisler deleted the aaronz/SDK-2116/remove-easyjson branch May 27, 2026 22:20
@github-actions github-actions Bot mentioned this pull request May 27, 2026
aaron-zeisler pushed a commit that referenced this pull request May 28, 2026
🤖 I have created a release *beep* *boop*
---


##
[4.0.0](v3.1.1...v4.0.0)
(2026-05-28)


### ⚠ BREAKING CHANGES

* remove easyjson from go-jsonstream
([#39](#39))

### Features

* remove easyjson from go-jsonstream
([#39](#39))
([5872e14](5872e14))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Only version manifest and changelog metadata change in this diff;
runtime risk is for downstream consumers upgrading to v4, not for this
PR’s edits themselves.
> 
> **Overview**
> Bumps the **Release Please** manifest from **3.1.1** to **4.0.0** and
adds the matching **CHANGELOG** entry for v4.0.0.
> 
> The release documents a **breaking change**: removal of **easyjson**
from `go-jsonstream`
([#39](#39)).
Consumers on v3 must expect a major version upgrade and any API or
build-tag behavior tied to easyjson to be gone in v4.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
498613f. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants