So many metaphors in these answers :-D When you write your code for different projects, you try to avoid repeating the same thing again and again - so you write them once and reuse this code as a module. Or - if someone, somewhere already did it - you borrow another person's code and use it. That's what we call libraries: simple code for a group of typical exercises. There are libraries for mathematical calculations, for database operations and so on. So again: they are for specific programming tasks only code small usually they are for only one programming language When you make bigger and bigger projects, you would like to use not only well-written, specific code libraries but other tools too. You want the best libraries in a pack, a whole environment, maybe even use it by several different languages. A framework usually provide: a set of very good libraries a runtime environment a CLI (a command-line program) Sometimes it is even more: you can write code from different languages several programs running on your computer to help you it works deeply connected with an advanced code editor (IDE) to assist you Examples: Moment.js is a Javascript library to work with Date and Time. It can tell you current date, provide different date formats, and so on. Tiny, useful tool for a specific task .NET framework is Microsoft's monster framework to cover all your programming work in Microsoft environment. It provides a runtime, you can use it with many different programming languages, and so on. If you use C# or F#, you will use .NET and you will write it in the Visual Studio IDE. Controversies: Definition of 'framework' is not really strict. My examples were extreme, there are many in between. There are huge libraries which are called frameworks by professionals or their creators, because they are so big, they are to organize whole projects, or simply for marketing reasons. The best you can do is to handle them as libraries except if there is a very good reason to accept they are something more.