I posted on the Ars Technica forums not too long ago looking to do something along these lines myself. > Typically, we tend to think of program state in terms of Lists, Vectors, Hashmaps, ... other data structures + algorithms to manipulate them To be realistic, you probably can't escape the basic data structures of whatever underlying language manipulates them. I think the best you can hope for is a database persistence layer for native types/objects that is as transparent as possible. This is probably most easy to do with scripting languages, and I'm currently favoring Lua for my project because its most advanced data type out of the box is *already* a table. > have state/truth be a collection of tables (instead of multi level nested data structures) Given the relational nature of a database, they are functionally equivalent. I'd say the biggest benefit to a database as a "source of truth" is that it is (or at least *can* be) *independent* of the algorithms implemented to manipulate it. > I was thinking of even lower latency requirements -- say something like a notepad editor, a vim/emacs, a window manager, ... Well, you still have to architect how that all works from a database perspective. If a single keystroke results in a query that selects a 5MB (or whatever) document, alters the data appropriately, and then updates the table with the new value, I think you're going to find a lot more latency than you want for modifying those 8 bits. You'd probably do better with a message queue as middleware to write data in sufficiently large/meaningful chunks. > Anyway, any advice in this generation direction is welcome. I'm very interested in how far "table/sql is all you need" can take one in modern software. Break it down and start eliminating all the non-DB features of your programs. For example, I started by getting rid of the filesystem read/write calls in favor of putting that data in either structured tables (configuration, logging, etc.) or stored in `sqlar` (making it easy to "externalize"). Where does the *real* friction come from for the software you're writing? 75f49e94a5784e32537fa3b3a0796357814f87a02e949df7043382657b24ee8d