Ahoy Spongie enthusiasts! We’re well and truly into the new year and with it another Status Update!
As discussed at State of Sponge, Mojang’s changes to how they handle major and point releases have had a significant impact on how we are approaching development for leading-edge versions.
Snapshots and prereleases were published as Mojang worked towards a future major release (1.X) and contained the major code changes. As such breaks were mostly confined to new major versions, upon which point releases were issued as incremental fixes upon a mostly-frozen codebase.
As such, SpongeAPIs could be released relatively early in the major version’s lifetime with little expectation of breaking changes (but with some feature updates throughout).
Point releases may contain major code rewrites and additions under the hood (which were previously restricted to snapshots), while user-facing content changes are locked behind an “Experimental Settings” option.
As such, we have no guarantee that the codebase will remain consistent during the active lifetime of a major version (i.e. while point releases are still issued). As such we cannot publish a frozen API until the final point release/the next major version is issued.
As an example: Breaking changes occurred between 1.19.2 and 1.19.3, requiring API breaks in the still-developing API10. Upon completion of the 1.19.x releases (Mojang releasing 1.20) we will be able to freeze API 10 and work towards release builds of our 1.19.x implementations.
This is not all downside however, as we will keep up to date with the technical changes as Mojang issues each point release, meaning that we will already be somewhat prepared for the update to the new Major release.
This means that going forward the current major release (N) will be considered as experimental/in-development and subject to potential API breaks, while the last major release (N-1) will have its API frozen.
- Mojang Publishes a new Major Minecraft Version / Sponge issues a new API version (e.g. Minecraft 1.20/API11) and freezes the last API version (1.19.x/API10)
- Minecraft 1.20/API11 is defined as the Current (N) Version and 1.19.x/API 10 is defined as Prior (N-1) Version
- With the API version frozen, work continues on ironing out bugs and implementation details in the Prior Version so that a Release Build can be issued, at which point active development stops (Transitions to maintenance).
- Concurrently with (3), work on the 1.20.x/API11 Experimental Versions.
- New Major Minecraft Version is issued, repeat from (1).
Guidance for Plugin Developers:
- Develop stable versions of your plugins against the Prior (N-1) version with a frozen API.
- Port a build of your plugin forward to the Current (N) version with the in-development API.
- Be prepared for breaks to occur in the Current (N) version, especially around point releases. These may either be API breaks (you need to update) or implementation breaks (we need to fix it). If you notice an issue please reach out and either our team or other developers may be able to help identify which it is!
Guidance for Server Admins:
If you are using the Current (N) version:
- Use the latest Experimental Builds of SpongeVanilla/SpongeForge in tandem with a backup policy as you perform each update.
- Latest builds contain the most up-to-date fixes.
- Regressions are rare, but do occur occasionally. We recommend reaching out to developers so that we can fix the issue and point you to a known good build in the interim if a problem does occur.
- API breaks may occur between point releases, so be prepared for the potential for plugins to break. We recommend contacting the Plugin Developer about the issue first, so that they can determine the cause and then either update in the case of an API break or pass it on to a Sponge Developer if it is an implementation issue.
If you are using the Prior (N-1 version):
- We will be actively working towards a Release Build, but in the meantime use the latest Experimental Builds with backups as in the case with Current (N) versions.
- Once a Release Build has been issued, we recommend you update and use it.
- Active development will cease at this point, any further experimental builds will typically be to patch minor issues.
- New RBs may be issued if we are confident about the stability of the accumulated patches.
Currently we are treating 1.16.5/API8 as our Prior version and 1.19.x/API10 as our Current version under this model. We are aiming to get 1.16.5 Release Builds out soon so we can properly adopt the new cadence when 1.20 is released.
SpongeAPI 8 remains highly stable, with no changes since December. As such it provides a rock solid foundation for building plugins and we encourage developers to do so! Further, as API9 and 10 build on the same foundation, porting forward from API 8 should be relatively easy.
While the API is effectively frozen at this point, we have had occasional issues that crop up in the implementations which we’re hoping to clear out before publishing a RB. If you’ve noticed any issues, please report them at: Issues · SpongePowered/Sponge · GitHub
We’ve been making steady progress on merging open PRs for both SpongeVanilla and SpongeForge. As of publication we currently have 18 common issues open and 8 SpongeForge-specific issues that we, would appreciate feedback on.
As some of you may have seen, Mojang has released the first 1.19.4 pre-release, so we will be working towards having SpongeVanilla 1.19.4 experimental builds soon after the full release.
As noted previously, both API- and Implementation-breaking changes may occur with this point release, so if you intend to run experimental builds on your server please make sure you have world and configuration backups in case of any issues arising and remember to Report them here.
As we work towards finalising API 8, we’d like to ensure the Docs are updated to match. If you’re interested in contributing, we have a guide here.
The priority at the moment in ensuring that any code snippets referencing API 7 are replaced with API 8-appropriate code to match, but we welcome any assistance you can provide!
Translators are also very welcome as part of the effort, you can make an account and get translating here!
As always, you’re welcome to drop into the #docs channel on our Discord as well if you have any questions or would like to talk to the team.
Farewell to dualspiral
Unfortunately dualspiral, one of our Leads and a major contributor to all aspects of Sponge has had to retire as of the end of last year as he’s moved on with his career and can’t dedicate the time he once did to Minecraft modding.
He was an enormous asset to our organisation and has gone above and beyond numerous times over the past several years and indeed his impact will continue to be felt in terms of our direction as a development project, and directly in the codebase and API themselves! All of us wish duaspiral the best going forward.
New Team Members
Those of you at State of Sponge will have already heard the exciting news, we have a couple of new Spongineers aboard our team! You may already be quite familiar with both of them as they’ve been active in our community for quite some time and we’ve felt they would make a great addition to our team.
Joni (@isokissa3) has joined our team as a Developer, mainly focussing on our Implementations as well as a few other areas.
Evan (@ejm) is our latest Staff member and has been helping out with our Discord revamp in addition to helping out in the channels.
Following on with the theme of change, some of you may have noticed the Leader category disappearing from the Discord user list.
We’ve recently overhauled how we make decisions as an organisation, and so we’re moving towards a more flat structure where team members can take the initiative and drive different parts of the project as they are able to.
Many of us have been involved with both Sponge and the Modding community for some time now and as is often the case, life can get in the way at times. Being volunteers, we can’t expect anyone to contribute when they have other priorities so we’re taking this approach to allow greater flexibility and hopefully take some of the burden off others when they are busy.
The Staff Page on the Docs will be updated in due course and we’ll likely have a bit more to say on the new structure in the next Status Update.