Why are SpongeAPI and Sponge separate repos?

The current way means that Sponge’s version of SpongeAPI will always lag behind, that there is a lot of duplication between the two repositories for build tooling, and that it’s impossible to submit a pull request that contains both an API change and an implementation of said API change.

IMO, the Sponge implementation should be a subproject (or sibling) of SpongeAPI, so that plugins (or forks/reimplementations) can still pull in SpongeAPI as a source dependency if needed without touching SpongeImpl, while making it obvious to keep everything in sync.

Sponge API = API
Sponge = Implementation

Like bukkit, you wouldn’t have bukkit and CraftBukkit in the same repos. If you want an API change and a implementation change just make two pull requests. And they will not lag behind, just update both…

I know that they are separate in that the dependency should be one-way, but that doesn’t mean having to version them separately.

But they are intrinsically linked together. Updating SpongeAPI but not Sponge will mean that Sponge doesn’t implement the interfaces fully (breaking the build). Updating interfaces in Sponge but not SpongeAPI either means it doesn’t implement the interfaces fully anymore (breaking the build) or is effectively useless, since plugins can’t access it anyway.

Look for yourself, if you try building from Sponge right now you’re using a SpongeAPI version from 4 days ago.

To be honest that could mean less at this moment in time. At this stage in the project the team is mostly planning and laying out the framework. I would expect that they are focusing on the framework more than the versions at this time, since the versions are not even for public release.

whats a api??? is it for the plugins or what?

Pretty much.
The API (strictly speaking I think this is actally an interface though I am not 100% certin on the diffrences) describes the public access that plugins have to Sponge underneth.

This issue is going to stay until it is fixed. The current state of things complicates it for everyone for no good reason.

The API tells plugins how they can interact with Sponge.

Simple: First of all, if you want to write a plugin, you only need the SpongeAPI.jar, not the SpongeServer,jar (like Bukkit and CraftBukkit).

Also, the SpongeServer mod is only one implementation. You could make another one that runs without Mojang’s code (like the Glowstone project). In that case you also only need the API.

I’m not asking as a plugin developer, I’m asking as a prospective core contributor.

It is, however, the reference implementation that should always be kept up-to-date with the current spec. Besides, I already explained why this wouldn’t adversely affect third-party implementations.