feat!: remove easyjson from go-jsonstream#39
Conversation
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 { |
There was a problem hiding this comment.
The removal of this function makes this particular library change a major breaking change. So instead of chore:, this should be feat!:.
There was a problem hiding this comment.
@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.
There was a problem hiding this comment.
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 { |
There was a problem hiding this comment.
This removal is also a breaking change.
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>
🤖 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>
Summary
This is the v4 major-version bump for
go-jsonstream. Two commits:chore: remove easyjson implementation— drops the optional easyjson backend (gated behind//go:build launchdarkly_easyjson), strips the!launchdarkly_easyjsonbuild constraints from default-implementation files, and removesgithub.com/mailru/easyjsonfromgo.mod. The build tag becomes a silent no-op for any consumer that still sets it.feat!: bump module path to v4— bumps the module path/v3→/v4, rewrites internal imports, updatesrelease-please-manifest.jsonto4.0.0, dropsbump-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 publicEasyJSONBufferwas a major breaking change. The retarget to av4branch is the resolution.SDK-2119: EasyJSON Removal — Dependency Chain (v4 strategy)
The three library PRs (#39, #50, #51) are now
feat!:major bumps (/v3→/v4). Consumer PRs staychore:because the consumers themselves don't break public APIs — they just upgrade their dependencies.Stage layout
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, andgo-server-sdk-evaluation(#51) pins both.Test plan
go test ./...passes (v4 module path)go vet ./...cleango build -tags launchdarkly_easyjson ./...still succeeds (tag is now a no-op)go mod graph | grep easyjsonreturns emptygrep -r mailru/easyjson .returns no source hitsvia LD Research 🤖