I think it's fair to say that the current save/load functionality is not necessarily production level. It seems mostly for demonstration purposes, but a real production usage is likely to want to have more control over the save system, such as decoupling the saving of the player/inventory information from the world, and saving/loading sections of the world(in tandem with streaming, etc). So I propose a new save game API. Something like,
void SaveWorldTemplate(BinaryWriter writer, bool onlyModified = true); // saves any world specific information, like the voxel name index map, time of day, etc, so as not to bloat up the individual chunk/column based saves
void SaveWorld(BinaryWriter writer, bool onlyModified = true);
void SaveWorld(BinaryWriter writer, int chunkX, int chunkZ, bool onlyModified = true); // save the entire vertical column worth of chunks
void LoadWorld(BinaryReader reader); // chunk not provided since it's in the data?
I think this is enough of an API where someone can do incremental spatial based save/loads. These functions should not save player or inventory information.
Related to save/load, I would like to request an OnChunk* event(s) that are sent just before a chunk is unloaded and discarded, so that if the chunk is modified, it may be saved out for later retrieval when that chunk comes back in scope. This would take the place of the never discarding modified chunk functionality.
Edit: I just asked in the channel about how modified chunk persistence is currently treated and currently they are not discarded at all. Perhaps an easy step towards an optional persistence module is providing access to a list of chunks that are out of scope, but still resident, and with that list, a persistence layer can use the above API to save them out and then manually trigger a purge of them(return to pool or whatever). In this way, the persistence module is optional and the default can remain keeping them resident.
Also related to save/load/persistence, an event that can either be triggered via a return value of OnChunkBeforeCreate or a new event like OnChunkRequested so that the chunk may be instructed to wait for a potential asynchronous data load(from disk, from network, etc)
I'm willing to contribute a persistence API if we can come up with a decent way for users to make contributions(github, etc)