The Web Storage API is easy to use as everything can just simply be stored as key value pairs of the localSorage global on clients that support the Web Storage API. However depending on the nature of the project it might not always be the best choice. Cookie files will always give better backward compatibility when it comes to older browsers, and the indexed db option is a better choice when it comes to storage of large amounts of data on the clients computer. There is also the idea of using the File reader constructor to have it so the user can save and load files anywhere on there computers file system, which might be a great choice for handing the saving and loading of state, or other assets that way.
Still the Web Storage API is a good option for quickly getting the job done, and most modern browsers support the standard well.
So then here I have a basic example of the Web Storage API that just stores a single message that can be set in an test input element. I set some event handlers that will fire each time a keyboard key is released, or the value changes. Each time one of the events fire a set method will set the current value of the text input element to a mess property of the localStorage global. Each time the page loads a get method will fire that will set the value of the text element to the mess property of the localStorage global.
So there are a number of other options when it comes to finding a way to store some data for a user in a web application. Of course there is having a database sever side for example as a way of saving data for a user. However with many of the applications that I have made thus far I do not care to get into that sort of thing f it is the kind of project where I can avoid doing so.