Flask is, in the words of its own documentation, “a lightweight WSGI web application framework” that “is designed to make getting started quick and easy, with the ability to scale up to complex applications.” It was created by Armin Ronacher and first released in 2010, and is now maintained by the Pallets project. Where Django offers a comprehensive batteries-included stack, Flask takes the opposite stance as a microframework: it ships a small, focused core and lets developers add the pieces they need.
Crucially, Flask is not built from scratch. The documentation states plainly that “Flask depends on the Werkzeug WSGI toolkit, the Jinja template engine, and the Click CLI toolkit.” Werkzeug handles the low-level WSGI plumbing such as request and response objects, routing, and the development server, while Jinja renders HTML templates. Flask is the glue that ties these libraries together into a coherent application object with sensible defaults.
The “micro” in microframework does not mean Flask is limited to toy applications. As the project’s design notes explain, micro means the core is kept simple and extensible rather than feature-poor: Flask makes no decisions for you about which database, form-validation library, or other components to use, but provides clean extension points so that a community of extensions can add functionality. A minimal Flask application can fit in a handful of lines in a single file, yet larger projects organize code with blueprints, application factories, and packages.
Flask popularized a decorator-based routing style in Python, where a URL rule is attached to a view function with a simple decorator, making the mapping between routes and handler functions immediately readable. It also provides request and application contexts, message flashing, sessions, and first-class support for hooking in arbitrary WSGI middleware, reflecting its role as a thin, transparent layer over the WSGI standard.
Released under a BSD-3-Clause license and developed in the open at github.com/pallets/flask, Flask became one of the most widely used Python web frameworks alongside Django. Its minimalist, explicit philosophy made it a common choice for APIs, prototypes, and microservices, and it served as conceptual groundwork for the later wave of typed, async-first frameworks such as FastAPI.