Backbone.js is a lightweight JavaScript library created by Jeremy Ashkenas and released in 2010. It gave structure to web applications that were increasingly running logic in the browser, at a time when client-side code often grew into tangled webs of jQuery callbacks that manipulated the DOM and tracked state without any clear organization. Backbone offered a minimal set of primitives, loosely modeled on the Model-View-Controller pattern, to bring order to that code.
Its core abstractions are models, views, and collections. A Backbone.Model, in the documentation’s words, “orchestrates data and business logic,” loads and saves data from the server, and “emits events when data changes.” A Backbone.View “listens for changes and renders UI,” handles user input, and sends that input back to the model. A Backbone.Collection is an ordered set of models that manages groups of records and provides aggregation, filtering, and sorting.
The crucial pattern Backbone encouraged was the separation of business logic from presentation. Models held data and emitted change events independently of any interface, and views subscribed to those events and re-rendered when the data changed. This event-driven binding replaced the brittle approach of manually keeping the DOM in sync after every operation, and it made client-side code far easier to reason about and maintain.
Backbone was intentionally minimal, depending only on Underscore.js and optionally jQuery, and it imposed no required project structure beyond its handful of building blocks. That restraint made it a popular foundation for the first generation of single-page applications and influenced the heavier, more opinionated frameworks that followed. The library is maintained at github.com/jashkenas/backbone, and its full annotated source remains published as part of its documentation.