A simple, effective, free library for storing application data locally without the need for a cumbersome database.

Project no longer actively maintained

FlatStore is no longer being actively maintained or developed as of yet as other commitments require my time; the project had promise, so it may be brought forward again in the future as my needs may require such a library - in the mean time, feel free to pillage pieces of the project as you see fit, you could likely combine pieces from here with the previous project (FlatDB) to get a working storage solution - Clint 14/01/2013

A hint of what's to come

  • Flat file format (hence the name)
  • Ability to store any type so-long as it can be serialised (and even if it can't - more on that below)
  • Custom data formats - Store your data, how you want it - Implemented via a construction and destruction system on an interface, now you can write out the data you want and need from an object, without needing serialisation / deserialisation
IFlatFormat format = new XmlSerFormat();
string objAsXml = format.Decompose<Customer>(someCustomer);

format = new BinarySerFormat();
string objAsBinary = format.Decompose<Customer>(someCustomer);
  • Lazy (a good thing) - Deserialising an entire database is time-consuming an unnecessary, data is retrieved but only instantiated as and when needed
  • Indexes - Want to look for a particular entry without deserialising a whole bunch of items? Fields that don't change (or change infrequently), can be used as indexes, find the data you need fast, and then construct the objects you need
  • Integrity - Hashes allow data to be verified for integrity
  • Security - Encryption allows data to be stored safely, either individually, or the entire database
  • Redundancy - Certain types or entries can be marked for "back-up", each save also records a copy of the data in multiple formats (of your choosing), so should something happen, it can be recovered
  • Versioning - Need to roll-back a change? Want an easy way to store data and get a versioning system for free (text-editor etc), let FlatStore record delta's of each save (for certain types, records etc), so versioning can be achieved with minimal space requirements
  • Free lunch - Already use INotifyPropertyChanged? So does FlatStore, let it handle tracking changes for you

^ The above are the features I would ultimately love to see this library have, the core ones it will have are: Flat File, Any type, Custom formats, Lazy loading, Indexes and free lunch, I think you'll agree the others would be the awesome icing on the cake.


Your support means a lot, your feedback a lot more so; I'd be eternally grateful for any feedback, be it praise, criticism (please keep it constructive) or questions, please let it be known, use the discussions tab up yonder (^).


  • 16/04/2011 11:31 PM BST - Don't worry, not dead! (nor is the project), I've had work and well, Portal 2 is out soon :p
  • 19/03/2011 04:55 PM GMT +0 - Chaotic code as it's mid-idea, but infrastructure for writing values out is being added, including the ability for data modifications to be handled (you even get it for free if you use INotifyPropertyChanged)
  • 14/03/2011 05:18 PM GMT +0 - Engine and file format now taking shape, code can now give an idea of how files are structured.
  • 16/02/2011 03:17 AM GMT +0 - Storage providers system fleshed out and initial work on Cryptography providers has been implemented (hashing at current, encryption may come later)
  • 16/01/2011 07:18 PM GMT +0 - First download noticed! (unfortunately that person got an empty project ;p) - I will post here each time a significant change is available :) - otherwise refer to the commit notes to see what's available =]
  • 09/01/2011 08:50 PM GMT +0 - Project has been created and development is now underway :)


FlatStore is the second iteration of FlatDB (here on codeplex), a new project was created as it is radically different.

Last edited Jan 14, 2013 at 9:49 PM by cpearson1990, version 21