When referring to computer software, a framework is a foundation with a specified level of complexity (based on user level) that a programmer may extend using their own code. It might include a set of software libraries, compilers, interpreters, or an API. In general, it provides an environment that facilitates a specific type of programming for a software development project.
Most software frameworks are characterized by a design philosophy called Inversion of Control (IoC). Normally, computer programs define a program's flow of control and make calls to libraries for individual functions. When using a framework, however, the relationship is inverted: the framework manages the overall control flow and makes calls to the user's code when needed. A frameworks allows the developer to focus on details specific to the project and bypass the more general requirements.