GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — ci(release): v11 by dargmuesli · Pull Request #484 · spotify-web-api-java/spotify-web-api-java

Conversation

@dargmuesli

@dargmuesli dargmuesli commented Nov 3, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

⚠️ Breaking changes

  • refactor(requests)!: serialize body parameters by value type, not by parameter name #483
  • feat(codegen)!: generate the data requests and their SpotifyApi methods from the spec #487
  • refactor(models)!: remove the deprecated JsonUtil classes #493
  • refactor(module)!: require Gson without re-exporting it #494
  • fix(codegen)!: send a parameter offered in both query and body in the body #500

What 11 means

For its first ten major versions this library was a hand-maintained mirror of the Spotify Web API. Someone read the online reference, wrote the request class, and kept it in step as the API moved. It worked, but the mirror and the original could drift, and every bit of drift had to be found and corrected by hand, exactly the way it was made.

Version 11 changes the relationship. The data request API is now generated from Spotify's OpenAPI specification, so the library is no longer a mirror that someone tends; it is a projection that is derived. The work flips from keeping two things in sync to making it so they cannot disagree. When the spec changes, the library follows by re-running the generator, and CI fails if the committed classes ever drift from what the spec says. Keeping the library correct stops depending on diligence and starts depending on structure.

The same impulse strips out what 10.x only deprecated: the JsonUtil helpers, the Gson overloads, the re-exported Gson dependency. All of it is gone because the spec does not ask for it and nothing in the library calls it anymore. What is left is exactly the API and nothing more, which is a smaller place for the two to disagree and one that is checked rather than assumed.

For users the payoff is predictability: the surface reads exactly as Spotify documents it, the values the spec rejects are rejected here too, with assertions, before a request is sent, and MIGRATION.md maps every removed or renamed call to its replacement. For contributors it is a lower floor and a higher ceiling: a new endpoint is one line in codegen/requests.yaml plus a run of the generator, and the checks catch what a person scanning the diff might miss.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
dargmuesli added 3 commits November 3, 2026 10:12
@dargmuesli
refactor(requests)!: serialize body parameters by value type, not by …
aaaea21
…parameter name
@dargmuesli
docs(examples): remove playlist items by a list of URIs
8249484
@dargmuesli
Merge pull request #483 from spotify-web-api-java/refactor/requests/t…
2289ca1
…ype-based-serialization

refactor(requests)!: serialize body parameters by value type, not by parameter name
@codecov

codecov Bot commented Nov 3, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 37.10%. Comparing base (5d0e069) to head (ab0821d).

Additional details and impacted files
@@              Coverage Diff              @@
##               main     #484       +/-   ##
=============================================
- Coverage     47.23%   37.10%   -10.13%     
+ Complexity      721      509      -212     
=============================================
  Files           212      106      -106     
  Lines          6195     4282     -1913     
  Branches        574      196      -378     
=============================================
- Hits           2926     1589     -1337     
+ Misses         2890     2603      -287     
+ Partials        379       90      -289     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@dargmuesli
11.0.0-RC1
dcfc911
github-advanced-security[bot]
github-advanced-security Bot found potential problems Nov 3, 2026
View reviewed changes
Comment thread apidocs/script-files/search.js Dismissed

Uh oh!

There was an error while loading. Please reload this page.

dargmuesli added 7 commits November 4, 2026 15:15
@dargmuesli
Merge branch 'main' into beta
8bb5196
@dargmuesli
feat(codegen)!: generate the data requests and their SpotifyApi metho…
903664a
…ds from the spec (#487)
@dargmuesli
refactor(build): move the generated request classes to src/generated/…
606969b
…java

The 106 generated data request classes keep their package, so nothing
changes for callers: src/generated/java now holds them, src/main/java
keeps the hand-written request infrastructure, and pom.xml adds the root
via build-helper-maven-plugin, which the compiler and the Javadoc pick
up from the compile sources.

codegen/generate.py writes to the new root, ci/check-docs.py scans both
roots, and AGENTS.md, CONTRIBUTING.md and README.md note the two-root
layout.
@dargmuesli
chore(coverage): exclude the generated request classes from codecov
21f14fd
The generated request classes are pinned by codegen/generate.py --check,
and their optional setter boilerplate is exercised only where a fixture
uses the parameter, so counting it toward coverage reports a gap the
tests cannot close without covering every setter.
@dargmuesli
refactor(models)!: remove the deprecated JsonUtil classes
6c5a6f4
Every model's nested JsonUtil, AbstractModelObject.JsonUtil and
IModelObject.IJsonUtil were deprecated in 10.x in favour of ModelObjects and
no longer used by the library. PlaylistItemFactory goes with them: its only
method took a Gson JsonObject, and the reader now lives in the internal
ModelObjectGson, so the model_objects.utils package is no longer exported.

MIGRATION.md maps each removed call to its ModelObjects replacement.

Refs #461
@dargmuesli
Merge pull request #492 from spotify-web-api-java/refactor/build/gene…
ecacb1d
…rated-source-root

refactor(build): move the generated request classes to src/generated/java
@dargmuesli
Merge pull request #493 from spotify-web-api-java/refactor/models/rem…
ee9c365
…ove-json-util

refactor(models)!: remove the deprecated JsonUtil classes
@dargmuesli dargmuesli mentioned this pull request Nov 5, 2026
refactor: reduce boilerplate code #461
Closed
dargmuesli added 5 commits November 5, 2026 14:19
@dargmuesli
refactor(module)!: require Gson without re-exporting it
dcc5dd8
With the JsonUtil classes removed and request bodies taking List and Map, no
public signature takes or returns a Gson type anymore, so callers no longer
need to read Gson through this module. Gson stays a regular Maven
dependency; only a module that uses Gson itself without requiring it has to
add its own requires.

Refs #461
@dargmuesli
Merge pull request #494 from spotify-web-api-java/refactor/module/gso…
7483d88
…n-requires

refactor(module)!: require Gson without re-exporting it
@dargmuesli
Merge branch 'main' into beta
b285ee8
# Conflicts:
#	README.md
@dargmuesli
docs(contributing): describe the generated request classes
b3ca6a3
The code overview moved from the README on main, where requests are still
written by hand. On beta they are generated, so the overview now says where
the generated classes and SpotifyApi methods live and which two requests
stay hand-written, and the development setup lists the Python and PyYAML
the generator needs, with its commands.
@dargmuesli
Merge pull request #496 from spotify-web-api-java/docs/contributing-c…
7c24de7
…odegen

docs(contributing): describe the generated request classes
@dargmuesli
dargmuesli requested a review from Selbi182 November 5, 2026 13:47
dargmuesli added 7 commits November 5, 2026 14:50
@dargmuesli
11.0.0-RC2
33344f9
@dargmuesli
docs(contributing): move the vendored spec convention into CONTRIBUTI…
2658d43
…NG.md
@dargmuesli
Merge pull request #498 from spotify-web-api-java/docs/contributing/v…
5a8aa7b
…endored-spec

docs(contributing): move the vendored spec convention into CONTRIBUTING.md
@dargmuesli
fix(codegen)!: send a parameter offered in both query and body in the…
68bd9be
… body
@dargmuesli
Merge pull request #500 from spotify-web-api-java/fix/codegen/body-pa…
29a5105
…rams

fix(codegen)!: send a parameter offered in both query and body in the body
@dargmuesli
Merge branch 'main' into beta
d32f5c4
# Conflicts:
#	AGENTS.md
#	CONTRIBUTING.md
@dargmuesli
11.0.0-RC3
ab0821d

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@Selbi182 Selbi182 Awaiting requested review from Selbi182
1 more reviewer
@github-advanced-security github-advanced-security[bot] github-advanced-security[bot] left review comments
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@dargmuesli @github-advanced-security
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.