AngularJS is a JavaScript framework for building complex client-side web applications. It provides modules, controllers, directives, services and other core features out of the box. Modules allow separating an application into logical domains and define dependencies. Controllers contain business logic and retrieve data from services. Directives extend HTML attributes and elements. Services provide reusable behavior across the application. AngularJS uses dependency injection for testability and supports unit and end-to-end testing.