the main reasons are, for documents you wrote to:

* it needs to cache outgoing changes anyway until they are pushed out
* if you wrote to a document then probably you want to be informed if it's changed remotely, this is a good default

and for documents you retrieved:

* you are likely to need them again if the user refreshes the page, and IndexedDB has enough storage space - caching them is a good default
* you probably want to know if they changed after you retrieved them

this is only the default behavior, if you worry about disk space, you can call BaseClient#flush(path) to flush a whole subtree from the cache. but the only benefit of flushing is saving disk space, and disk space is cheap. if we ever get around to writing the browser plugin, then you wouldn't have to flush at all anymore, your device would just have a full (and only one) copy of all your data