FSO.js
FSO.js is a JavaScript library for temporary and permanent client-side file storage. Intended to mock a traditional FileSystemObject, FSO.js lets you write to and read from a sandboxed file system. Empower yourself, build better apps. The goal of FSO.js is to provide HTML5 application and game developers with an easy-to-use tool to deliver high-performance, low-latency resource manipulation without touching a server. Like the project?
All support is appreciated!
View on GitHub
Examples
This is a simple application that creates and writes to a file, reads from it, and then outputs a directory listing.
Code Output
// Request 100MB of Temporary Storage
var fso = new FSO(1024 * 1024 * 100, false);
// shorthand for FSO Utilities
var fsu = FSOUtil;

fso
	.createQueue() // Create FSOQueue object
		.write('base.txt', '')
		.mkdir('test')
		.write('test/hi.txt', 'Hello World')
		.insert('test/hi.txt', 'Doge!', 6)
		.append('test/hi.txt', ' ... and world.')
		.read('test/hi.txt', function(data) {
			console.log(data);
		})
		.list('/', null, function(dirList) {
			console.log(fsu.prettyDirectory(dirList));
		})
		.rmdir('/')
	.execute(function() { console.log('done!'); });
> Hello Doge! ... and world.
> [/]
   - base.txt (0B)
   [test]
     - hi.txt (26B)
> done.
A simple file uploader (or rather, transloader)...
Code Output
HTML
<input type="file" id="file-select" multiple>
<pre id="output"></pre>
JavaScript
var fso = new FSO(1024 * 1024 * 1024, false);
var fsu = FSOUtil;

document
	.getElementById('file-select')
	.addEventListener('change', function(e) {
	
		var fsq = fso.createQueue();
	
		var files = this.files;
		for(var i = 0, len = files.length; i < len; i++) {
			fsq.put(files[i], '/');
		}
		
		fsq.list(
			'/',
			0,
			function(list) {
				document
					.getElementById('output')
					.innerHTML = fsu.prettyDirectory(list);
			}
		);
		fsq.execute();
		
	});

		
You can check out more examples if you're interested!
Why FSO.js?
The native asynchronous FileSystem API in JavaScript works well, but requires a lot of boilerplate and, like many async APIs, is prone to producing spaghetti code. FSO.js combines queues with method-chaining to allow for painless sequential processing. This simplifies things and allows you to write less while performing file storage operations. Additionally, FSO.js includes a number of "upgrades" to the native API. These include (but are not limited to) buffering for faster, more efficient file I/O, recursive directory reading, and straightforward error tracing.
Support
As of March 2014, FSO.js is supported by Google Chrome FSO.js is not currently supported by IE, Mozilla, or Safari. Stay tuned as the W3C FileSystem specification reaches completion!