Managing state on the client has been a pain point for developers since the early days of AJAX-driven applications. pushState (part of the HTML 5 History API) provides a near-complete set of built-in tools for managing state in the browser. And the browser support for pushState makes it easier than ever to speed up in-site navigation using Progressive AJAX (PJAX) without having to redesign your frontend architecture around client-side rendering. Of course, like all DOM APIs, the History API is also imperfect. But then, what's a talk about DOM APIs without mentioning shortcomings and workarounds?