Команда 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 года:

Замёрженные PR

Flask

Werkzeug

Всего

2018

111

93

204

2019

142

103

245

2020

120

162

282

2021

178

175

353

2022

134

92

226

2023

111

133

244

2024

58

73

131

2025

26

17

43

Вероятно, в этой таблице не учтено небольшое количество коммитов, которые были сделаны напрямую, а не через pull request’ы, но при беглом просмотре истории коммитов не создаётся впечатления, что мейнтейнеры Flask часто так делают. Поэтому я считаю, что эта таблица достаточно точно отражает активность проекта и подтверждает нисходящий тренд, который я уже отмечал в прошлогоднем обзоре.

В этот раз я также решил посмотреть на pull request’ы, которые были закрыты без мерджа.

Незамёрженные PR

Flask

Werkzeug

Всего

%

2018

64

52

116

36%

2019

68

19

87

26%

2020

76

35

111

28%

2021

109

50

159

31%

2022

90

36

126

36%

2023

81

34

115

32%

2024

53

24

77

37%

2025

99

14

113

72%

И это выглядит весьма любопытно. Исторически доля всех 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 и посмотреть, насколько активно они развивались.

Расширение

Последний релиз

Последний коммит

Flask-Login

October 2023

August 2025

Flask-Security

November 2025

December 2025

Flask-HTTPAuth (*)

August 2023

December 2025

Flask-SQLAlchemy

September 2023

June 2025

Flask-Migrate (*)

January 2025

December 2025

Flask-Session

March 2024

April 2024

Flask-WTF

October 2024

December 2025

Flask-Mail

May 2024

June 2025

Flask-Admin

November 2025

December 2025

Flask-Babel

October 2023

June 2024

Flask-CORS

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)


  1. Linka_F
    23.01.2026 15:23

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


  1. CyrK
    23.01.2026 15:23

    Чем FastAPI лучше Flask? Он проще?


    1. bbc_69
      23.01.2026 15:23

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

      Но вообще да, они как будто одну нишу занимают.


      1. CyrK
        23.01.2026 15:23

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


        1. 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 выше. Можно сделать сериализацию руками, но ошибки всё равно пробрасыать. А в первом варианте всё из коробки.

          Вот и сравнивай. Как я и сказал, Фласку я люблю, но ФастАПИ на сегодня актуальней.


      1. 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)

        И наверное найти фронтендеров и бэкендеров проще, чем фулстэкеров, т.к. курсы готовят именно их)


        1. CyrK
          23.01.2026 15:23

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


    1. sfirestar
      23.01.2026 15:23

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


  1. bbc_69
    23.01.2026 15:23

    Эх, нравится мне Flask. Не то, чтобы часто использую, FastAPI актуальней, но всё равно.