Sponge development vs Spigot/Bukkit development, coming from a newbe

So I’ve decided to get into Minecraft plugin/mod development and learn java, etc. Not new to programming or development in general, just Minecraft and java. I’ve got a few questions I can’t seem to find around the internet. I’ve worked with Spigot/Bukkit ( never made plugins, but used/configured them ) Now what I’m wondering is that, performance wise, is/will sponge run better/as good as Spigot on a large server ( when officially released )? Are the sponge forage and vanilla APIs the same? and from a new java developer perspective, which ( Spigot or Sponge ) would be easier to develop with?

Thanks for the input :slightly_smiling:

If you want to learn about Sponge, the SpongeDocs are always a good starting point.
There is a timings module built into Sponge, so you can (crudely) compare performance for yourself. The plan is that it should be at least as efficient as it’s predecessors - but there is a lot of scope in how “efficient” may be defined. Sponge implementations do include optional entity-range activation optimisations too.

The SpongeAPI is shared between both implementations - as is much of the code, in SpongeCommon. Plugins should work the same on either SpongeForge or SpongeVanilla.

It’s entirely a matter of opinion about which is easier to master, the Bukkit (Spigot) or Sponge API (IMHO). SpongeAPI still lacks some things, and is probably more complex in some places, but it can do things that Bukkit API cannot. However, Sponge is well and truly still in development, and much more is yet to come. Sponge is being developed in an active and open community, and input is always appreciated.


Minecraft has changed a lot since Bukkit’s creation. There are major pieces of Bukkit that aren’t very useful from the perspective of someone wanting to write modern plugins. Sponge doesn’t have these problems due to its age, and due to its design.

A few examples of things Sponge has that Bukkit lacked.:

  1. Proper system for handling the new material (item/block) system in vanilla.
  2. AI control.
  3. Causes! The ability to track the various contributors to an action through a simple interface.
  4. All message handling in the API is built around sending the new JSON formatted messages, with a beautiful API for handling, building, extending those messages.
  5. Ability to adjust messages received by individual users on the server for any message sent.
  6. [important for me as VanishNoPacket author] Ability to allow placing blocks where someone you can’t see happens to be standing.
  7. Rather neat data handling system for properties, rather than flooding interfaces with more and more methods.
  8. An economy service built right in for plugins to play with.
  9. A user profile data storage system for easy retrieval (and cleanup!) of name/uuid combos.
1 Like

I’ve developed for both, and Sponge is immeasurably better - however, it may present more of a learning curve for someone brand new to programming than bukkit did. As mentioned, bukkit had methods for properties like entity health (setHealth(int health) and getHealth()) and those are more immediately understandable to a fresh dev while the data/offer system Sponge uses is most likely something you’ve never seen before.

However, there are many ways in which Sponge is much easier to work with - command processing, events, etc. These are much more accessible and powerful than bukkit had and combined with the great features mbaxter listed, is why I’ve come to the platform.

Also, I’d suggest trying to focus on java 8 tutorials - not until recently have we been able to fully move to java 8 and it’s a quite a major step in the language. Sponge takes advantage of it, so keep in mind there may some concepts in use that aren’t in older materials.

Good luck!

1 Like