Команда Python for Devs подготовила перевод ежегодного обзора экосистемы Flask от Miguel Grinberg. Автор подробно разбирает, каким оказался 2025 год для фреймворка: замедление разработки, минимум релизов, снижение активности сообщества и растущую конкуренцию со стороны FastAPI.
Активность проекта
Прежде чем переходить к цифрам, считаю нужным уточнить: при подготовке отчётов, которые вы увидите в этой статье, я не использовал большие языковые модели (LLM) или другие генеративные AI-инструменты. Соответственно, вероятность того, что я показываю вам «галлюцинированные» данные, равна нулю. При этом вероятность того, что я где-то ошибся, не равна нулю, так что, пожалуйста, проверяйте мои расчёты и, если заметите ошибки, сообщите мне — я их исправлю.
Итак, перейдём к делу. За весь 2025 год проект Flask выпускался всего два раза, и оба релиза были патч-релизами к версии 3.1.0, которая вышла в ноябре 2024 года. Коротко говоря, в 2025 году с Flask происходило очень немногое.
Чтобы поместить это в контекст, ниже приведена таблица с релизами, начиная с 2018 года — года выхода версии 1.0.0:
Год |
Major.Minor |
Количество патч-релизов |
Всего релизов |
|---|---|---|---|
2018 |
1.0 |
4 |
5 |
2019 |
1.1 |
3 |
4 |
2020 |
2 |
2 |
|
2021 |
2.0 |
4 |
5 |
2022 |
2.1, 2.2 |
6 |
8 |
2023 |
2.3, 3.0 |
6 |
8 |
2024 |
3.1 |
3 |
4 |
2025 |
2 |
2 |
Но, разумеется, релизы не рассказывают всей истории. Я также люблю смотреть на активность на GitHub, чтобы понять, как в целом обстоят дела с проектом. Ниже — таблица с количеством pull request’ов, которые были объединены по годам, также начиная с 2018 года:
Вероятно, в этой таблице не учтено небольшое количество коммитов, которые были сделаны напрямую, а не через pull request’ы, но при беглом просмотре истории коммитов не создаётся впечатления, что мейнтейнеры Flask часто так делают. Поэтому я считаю, что эта таблица достаточно точно отражает активность проекта и подтверждает нисходящий тренд, который я уже отмечал в прошлогоднем обзоре.
В этот раз я также решил посмотреть на pull request’ы, которые были закрыты без мерджа.
И это выглядит весьма любопытно. Исторически доля всех pull request’ов, которые в итоге закрывались без мерджа, держалась примерно на уровне 30%, но в 2025 году она подскочила до 72%. Одно из возможных объяснений такого резкого роста заключается в том, что мейнтейнеры Flask считают проект в целом завершённым и потому менее заинтересованы в принятии вкладов от сообщества.
Другое объяснение — в том, что в 2025 году многие разработчики начали использовать генеративные AI-инструменты для создания pull request’ов. Это новый тренд, который я заметил и в своих собственных проектах. Такие pull request’ы почти всегда оказываются плохими, а авторы, которые их присылают, не имеют ни интереса, ни знаний, чтобы довести их до приемлемого состояния. Один из примеров, подтверждающих эту гипотезу, — простая проблема в документации. Для неё сейчас существует один открытый pull request, ожидающий ревью от мейнтейнеров, но я насчитал семь закрытых PR от людей, которые присылали свои собственные варианты исправления, причём большинство из них были созданы уже после текущего, находящегося в работе, и ни один из них корректно не решал описанную проблему.
Что нового в Flask
Для Flask это был чрезвычайно медленный год, так что по-настоящему нового и интересного здесь почти нечего отметить. Есть исправление проблемы, из-за которой stream_with_context не работал в асинхронных маршрутах. Помимо этого, было сделано несколько правок, связанных с типизацией Python, а также изменён порядок, в котором пробуются ротируемые секретные ключи. Изменения, попавшие в Werkzeug в течение 2025 года, также были незначительными и столь же малоинтересными.
Я просмотрел список из 43 pull request’ов, которые были замёржены в 2025 году в проектах Flask и Werkzeug, чтобы понять, не найдётся ли там чего-нибудь достойного упоминания, что не отражено в списках изменений или, возможно, ещё не выпущено. И пару любопытных моментов всё-таки удалось найти.
В обзоре за 2024 год я писал о планах объединить контексты приложения и запроса в единый контекст. Это изменение уже реализовано и войдёт в релиз 3.2.0, дата которого пока не объявлена. В целом моё отношение к этому нововведению можно выразить тремя буквами: «meh». Это крупное внутреннее изменение, которое упрощает и перерабатывает логику работы с контекстами, но для пользователей Flask, по крайней мере на первый взгляд, оно не приносит каких-то ощутимых преимуществ. По крайней мере, я их не вижу.
У этого изменения есть и хорошие, и плохие новости. Хорошая новость в том, что для предстоящего релиза 3.2 запланированы лишь минимальные изменения во внешнем поведении. Функции контекста запроса были перенесены в контекст приложения, но в версии 3.2 контекст запроса всё ещё будет существовать, хотя и в статусе deprecated. Вы можете увидеть предупреждения о депрецировании в своём коде или в расширениях Flask, которые напрямую обращаются к контексту запроса, но в остальном, будем надеяться, всё продолжит работать как раньше.
Плохая новость заключается в том, что контекст запроса будет полностью удалён с выходом версии 4.0. В этот момент, как я ожидаю, некоторые приложения перестанут работать и потребуют изменений в коде или обновления зависимостей, прежде чем их можно будет перевести на последнюю версию Flask. При этом мне неясно, когда именно выйдет 4.0, что в неё войдёт помимо этого изменения и сколько времени и сколько минорных релизов будет между 3.2 и 4.0. При текущем темпе разработки вообще сложно найти веские основания для нового мажорного релиза, так что, возможно, эта проблема ещё долго не станет актуальной. Посмотрим, как мейнтейнеры Flask будут управлять этим переходом.
Ещё одно интересное изменение, которое не упоминается в списке изменений, состоит в том, что, начиная с релиза 3.1.1, Flask и Werkzeug перешли на менеджер пакетов uv для задач непрерывной интеграции и выпуска релизов в GitHub Actions.
А что насчёт Quart?
Как, я уверен, большинство из вас знает, Quart — это асинхронно-ориентированный порт Flask, созданный Филом Джонсом и также поддерживаемый core-командой Flask, в которую входит и сам Фил.
К сожалению, в 2025 году у Quart не было ни одного релиза. Последний релиз — версия 0.20.0 — вышел в декабре 2024 года.
Если посмотреть на репозиторий Quart на GitHub, то за весь 2025 год там было всего 14 коммитов, и все они касались мелочей вроде добавления нового логотипа, улучшения type hints или исправления опечаток в документации.
Расширения Flask
В этот раз я решил быстро взглянуть на наиболее часто используемые расширения для Flask и посмотреть, насколько активно они развивались.
Расширение |
Последний релиз |
Последний коммит |
|---|---|---|
October 2023 |
August 2025 |
|
November 2025 |
December 2025 |
|
Flask-HTTPAuth (*) |
August 2023 |
December 2025 |
September 2023 |
June 2025 |
|
Flask-Migrate (*) |
January 2025 |
December 2025 |
March 2024 |
April 2024 |
|
October 2024 |
December 2025 |
|
May 2024 |
June 2025 |
|
November 2025 |
December 2025 |
|
October 2023 |
June 2024 |
|
December 2025 |
December 2025 |
|
Flask-SocketIO (*) |
December 2025 |
December 2025 |
Flask-Moment (*) |
January 2025 |
December 2025 |
Я составил этот список по памяти, так что, пожалуйста, не обижайтесь, если я не упомянул какое-то из ваших любимых расширений. Кроме того, попадание в этот список не означает, что я их рекомендую. Более того, некоторые из этих расширений мне не нравятся, и я никогда не использую их в своих проектах. При этом я полностью поддерживаю те, что помечены (*), поскольку именно их я и сопровождаю.
Также важно отметить, что несколько из этих расширений в настоящее время поддерживаются организацией pallets-eco — группой волонтёров, которые занимаются обновлением расширений после того, как их первоначальные авторы или мейнтейнеры переключаются на другие задачи.
Flask по сравнению с другими веб-фреймворками
Давайте посмотрим, как Flask выглядит на фоне конкурирующих Python-веб-фреймворков.
Для начала сравним количество загрузок. Для этого я использую датасет PyPI BigQuery, который содержит статистику загрузок для всех пакетов PyPI.
Загрузки |
Flask |
Django |
FastAPI |
|---|---|---|---|
2023 |
1001M (73%) |
135M (10%) |
228M (17%) |
2024 |
1160M (58%) |
225M (11%) |
612M (31%) |
2025 |
1577M (46%) |
313M (9%) |
1523M (45%) |
Из этой таблицы видно, что все три ведущих фреймворка нарастили число загрузок, но FastAPI сделал это с поразительной скоростью. В практическом смысле Flask и FastAPI теперь делят первое место.
При этом показатели загрузок Django выглядят подозрительно низкими. Я обратил на это внимание ещё в прошлом году, но так и не смог найти объяснение, поэтому, если у вас есть какие-то идеи, дайте знать. Ниже приведены запросы, которые я использовал для получения статистики загрузок за 2025 год — на случай, если вы захотите проверить их и разобраться в этой разнице:
SELECT COUNT(*) FROM `bigquery-public-data.pypi.file_downloads` WHERE TIMESTAMP_TRUNC(timestamp, DAY) BETWEEN TIMESTAMP("2025-01-01") AND TIMESTAMP("2026-01-01") AND file.project = "flask"
SELECT COUNT(*) FROM `bigquery-public-data.pypi.file_downloads` WHERE TIMESTAMP_TRUNC(timestamp, DAY) BETWEEN TIMESTAMP("2025-01-01") AND TIMESTAMP("2026-01-01") AND file.project = "django"
SELECT COUNT(*) FROM `bigquery-public-data.pypi.file_downloads` WHERE TIMESTAMP_TRUNC(timestamp, DAY) BETWEEN TIMESTAMP("2025-01-01") AND TIMESTAMP("2026-01-01") AND file.project = "fastapi"
Также можно взглянуть на последний опрос Python-разработчиков, который проводился в IV квартале 2024 года, но на момент написания этого текста в декабре 2025 года остаётся самым свежим. Вот как распределились три ведущих веб-фреймворка среди разработчиков в двух последних опросах:
Опрос |
Flask |
Django |
FastAPI |
|---|---|---|---|
2023 |
33% |
33% |
29% |
2024 |
34% |
35% |
38% |
Здесь мы снова видим, что FastAPI сейчас практически не остановить. И, предвосхищая вопрос из комментариев, отвечаю сразу: нет, в данный момент я не планирую мега-туториал по FastAPI. Но я никогда не говорю «никогда»…
На этом я завершаю обзор проекта Flask за 2025 год. Надеюсь, этот анализ оказался для вас полезным. Счастливого 2026 года — и надеюсь увидеть вас снова через год на очередном обзоре Flask!
Русскоязычное Python сообщество

Друзья! Эту статью подготовила команда Python for Devs — канала, где каждый день выходят самые свежие и полезные материалы о Python и его экосистеме. Подписывайтесь, чтобы ничего не пропустить!
Комментарии (9)

CyrK
23.01.2026 15:23Чем FastAPI лучше Flask? Он проще?

bbc_69
23.01.2026 15:23Нет, скорее современней. Пишешь тип переменной и фреймворк сам парсит запрос и приводит его к нужному виду. Плюс довольно хорошая спецификация (которая сваггер - опен-чего-то-там) из коробки. Плюс легкий и быстрый.
Но вообще да, они как будто одну нишу занимают.

CyrK
23.01.2026 15:23А если нужно простое приложение написать с web-интерфейсом? Во Flask же уже всё есть.

bbc_69
23.01.2026 15:23Как я и сказал, они в одной нише находятся.
Вот тебе типовой пример на FastAPI:
Скрытый текст
# main.py from fastapi import FastAPI from pydantic import BaseModel from typing import Literal app = FastAPI() # Обычно классы вывдодят в отдельный модуль models.py # Тут в одном месте для простоты class User(BaseModel): name: str age: int gender: Literal["мужской", "женский"] @app.post("/check_adult/") def check_adult(user: User): if user.age >= 18: return {"message": f"{user.name}, поздравляю — ты взрослый"} else: return {"message": "Извини, тебе сюда нельзя"}Где аннотация типов, там и mypy или аналоги
Вот тоже самое на Flask:
Скрытый текст
# app.py from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/check_adult/', methods=['POST']) def check_adult(): data = request.get_json() name = data['name'] age = data['age'] if age >= 18: return jsonify({"message": f"{name}, поздравляю — ты взрослый"}) else: return jsonify({"message": "Извини, тебе сюда нельзя"})Обрати внимание, сериализация не сделана. требования к age выше. Можно сделать сериализацию руками, но ошибки всё равно пробрасыать. А в первом варианте всё из коробки.
Вот и сравнивай. Как я и сказал, Фласку я люблю, но ФастАПИ на сегодня актуальней.

Val321
23.01.2026 15:23они как будто одну нишу занимают
Вынося за скобки sync vs async, Flask - это больше про full-stack, а FastAPI - собственно про API, и если говорить про разработку именно апишки на Flask, то вот это https://habr.com/ru/companies/ivi/articles/542204/ выглядит очень больно по сравнению с FastAPI (описание апи-спеков в докстринге - прям зубная боль).
А если в целом, то я думаю бизнес просто перешел/переходит на SPA + Backend API, т.к. такая модель более гибкая в плане разработки:
в части распараллеливания фронтенд/бэкенд - можно нанять 3 фронтендеров + 1 бэкендера или наоборот
каждый занимается своим делом и совершенствуется в своей области
фронт связан с бэком только через апишку - можно полностью заменить одно, не трогая другое (переписать бэк на Go, перейти с Angular на React)
И наверное найти фронтендеров и бэкендеров проще, чем фулстэкеров, т.к. курсы готовят именно их)

CyrK
23.01.2026 15:23А если нужно локальное приложение, не API сделать. Просто интерфейс для простоты web. Например, надо приложение которое по расписанию воспроизводит аудиофайлы. И доступ нужен для одного чела, только чтобы отредактировать это расписание, но с другого компа.

sfirestar
23.01.2026 15:23FastAPI асинхронный, Flask работает на threads, плюс есть встроенный валидатор Pydantic и генерация сваггера из коробки.

bbc_69
23.01.2026 15:23Эх, нравится мне Flask. Не то, чтобы часто использую, FastAPI актуальней, но всё равно.
Linka_F
Помню, что я всего лишь однажды использовал Flask лишь в одной лабораторке для обработки запросов GET и POST своего локального сервера во втором семестре. А так, по моим ощущениям, FastAPI больше уже подходит для более крупных и серьёзных проектов (лично я использую его для создания своей локальной модели).