I have just released an update to libess. What is libess? Its a C++ library that reads an ess file and stores all the information in a bunch of classes so you can do stuff with that information.
The download is here
http://www.cncmods.net/files/libess.zip
Its purpose is to provide a way to read, parse and save the oblivion ess, esm and esp files in exactly the same way the game code does. Its purpose is also to provide a better reference for the format of the ess, esm and esp files than the Wyre Bash source, CBash source, tes4edit source and wiki. (all 4 of which I have used as references for this work, along with exhaustive reverse engineering of the game and construction set code)
It can now read, parse and write all parts of esp, esm and ess files except for the following: (all of which are read in and written as opaque blobs)
Texture hash data associated with models i.e. MODT chunk and similar (because I haven't yet found any information on the format of these chunks or how they are calculated)
REFR, ACRE and ACHR change record data in the save file (because I haven't yet figured out how all this stuff is stored, especially the data for ActiveEffect objects)
Compiled script bytes (because I haven't yet written a parser for them and don't particularly want to try and reverse engineer it all, especially given that OBSE and its plugins can change the format)
in REFR/ACRE/ACHR chunks, XRGD chunk data i.e. Rag Doll Data (as it hasn't been decoded yet)
RACE, SKILL, GRAS and TREE form data (some of these are complex, some I haven't figured out 100% yet and some I just haven't gotten to yet)
Facegen data in NPC_ forms (again, no-one has reverse engineered it yet)
PGAG chunks in PGRD forms (again, no reverse engineering of this data)
It does have full support for the special cases and obsolete/old chunks in oblivion.esm as well as all known OBME 1.x chunk data (since OBME 2.x was never released and now appears to be dead, I doubt any files actually exist that contain OBME 2.x chunks therefore supporting them is un-necessary)
Certain fields are still marked "unknown" or "unused" or "pad" or "reserved" (indicating that I haven't found any indication on what they are for at this point or that they are unused or extra data that the game doesn't actually read/use)
As for where to next, I will continue to work out the unknown data and the unknown chunks but if I cant figure the data out, I may not be able to make any more progress with libess and this may be the last version. Its still the most comprehensive reference on the oblivion esm, esp and ess files that exists outside of Bethesda and still the easiest way to manipulate such files through code (if you are programming in C++ that is)
Libess wouldn't have been possible without help from the following people:
All those who created or contributed to OBSE
Kyoma and shademe
The creator(s) of OBME (including whoever created the aborted OBME 2.x codebase)
All the contributors to the UESP wiki mod pages (including the excellent descriptions of the mod file format and save file format)
The creator(s) of tes4edt
The creator(s) of cbash
Others who have written tools for (or code/OBSE plugins/etc for) Oblivion
And of course Bethesda for creating such an awesome game