Привет, хабр!

Каждый день я использую qBittorrent. Это отличный торрент-клиент, стабильный и кроссплатформенный. Наверное, работает лучше чем любой другой торрент клиент. Но интерфейс у него на Qt Widgets, и на Windows 11 он выглядит не нативно(+ лично для меня не хватает некоторых вещей, о которых расскажу позже)

Я долго искал в интернете что-то подобное, но найти подходящее так и не смог, поэтому взялся пилить своё собственное решение. Переписывать движок с нуля было бы откровенной дуростью: qBittorrent пилят и тестируют годами, повторить это в одиночку за разумное время нереально. Значит, задача сузилась: оставить движок как есть, а вокруг него построить красивый интерфейс и внедрить новые функции.

Так, день за днём, через месяц получился WinBitTorrent

Сравнение интерфейса приложений
Сравнение интерфейса приложений

Что это вообще такое

WinBitTorrent не форк и не переписывание qBittorrent. Внутри работает qbittorrent-nox, тот же движок, что и в оригинальном приложении, версия 5.2.3 с libtorrent 2.0.13. Только вместо привычного веб-интерфейса или Qt Widgets поверх него стоит нативное приложение на WinUI 3 и Windows App SDK 2.2, написанное на .NET 8 по MVVM.

Программа управляет движком через его же Web API, тот, что обычно используют для доступа к qBittorrent через браузер. Только тут это API дёргает не браузер, а полноценное десктопное приложение с вкладками, деталями по каждой раздаче и графиками скорости.

Как оно работает

При первом запуске приложение поднимает qbittorrent-nox.exe как дочерний процесс с отдельным профилем, привязывает его веб-интерфейс к 127.0.0.1 на случайном свободном порту и запускает в headless-режиме. Движок при старте выдаёт временный пароль администратора, и WinBitTorrent сразу меняет его на постоянный API-ключ, который уходит в хранилище учётных данных Windows (Credential Vault). Сам пароль на диск не попадает и вычищается из логов.

Дочерний процесс висит в Windows Job object, поэтому физически не может пережить родительское приложение: если WinBitTorrent упадёт или его убьют из диспетчера задач, движок закроется вместе с ним. Если движок неожиданно завершится сам, приложение попробует поднять его заново, но не будет переусердствовать.

Кроме локального движка есть режим подключения к удалённому qBittorrent: домашнему серверу, NAS или сидбоксу, по логину с паролем или по API-ключу. Интерфейс один и тот же для обоих случаев, разница только в паре функций вроде открытия папки с файлом в проводнике, которая физически возможна только для локального движка.

Новые фишечки

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

Во-первых, поиск раздач прямо в приложении: уже сейчас встроены провайдеры RuTracker и The Pirate Bay. Для RuTracker есть отдельная авторизация по логину и паролю и опциональная поддержка прокси, на случай если трекер режут у провайдера.

Во-вторых, каталог фильмов через TMDB. Идея была в том, чтобы сделать упрощённый аналог Lampa, только для торрентов и без стриминга. Наверное, это уже лишнее. Но это функция которая нужна была лично мне, а из публичной версии я решил её не вырезать, на случай если кому-то ещё она придётся по душе. Тыкаешь на любой фильм, нажимаешь "Скачать", выбираешь трекер и тебя сразу перекидывает на выдачу файлов по этому трекеру

Ещё одна маленькая, но лично мне нужная вещь: редактор контекстного меню. Изначально в контекстном меню(правый клик по любому торренту в списке) очень много пунктов, и большинство пользователей половиной из них никогда не пользовались. Я добавил возможность оставить в этом контекстном меню только то что нужно именно вам

А что, собственно, дальше?

В приложение уже встроена система автообновлений, так что про новые версии вы узнаете при следующем запуске.

Из ближайшего: разбор багов, которые всплывут после первых установок, и доводка мелочей в интерфейсе, до которых за месяц просто не дошли руки.

Программа полностью бесплатная и опенсорсная. Вся информации, ссылки на исходный код и скачивание доступны на сайте: https://winbittorrent.github.io/

Если найдёте баг или дыру в логике, добро пожаловать в issues на GitHub. А если просто есть мнение по интерфейсу, тоже пишите, любой обратной связи буду рад.

Спасибо за внимание :)

Комментарии (35)


  1. playboy_progrmmer
    27.07.2026 07:35

    5 минут полёт нормальный, вроде работает. UI хороший


  1. backfield9818
    27.07.2026 07:35

    При изменении и сохранении настроек ругается, что не может, причём ругается даже на те, что не менял. А так вроде приятная прога :)


    1. kvch Автор
      27.07.2026 07:35

      Упс, забыл про этот баг. Поправлю в ближайшей обнове, спасибо)


      1. backfield9818
        27.07.2026 07:35

        И, встроенные обновления хорошо, но ещё бы через winget )


  1. Kasyan666
    27.07.2026 07:35

    Лично мне в qBittorrent очень не хватает фичи из BitTorrent/μTorrent: связки .torrent-файла и раздачи, чтобы их можно было удалить одновременно, не лазая руками в папку с .torrent-файлами. Но, видимо, для этого нужна дополнительная БД...


    1. igrblkv
      27.07.2026 07:35

      Transmission пробовали?

      Речь про нижний пункт?


    1. zelenin
      27.07.2026 07:35

      там галочка всегда была при удалении


      1. Kasyan666
        27.07.2026 07:35

        Transmission пробовали?

        там галочка всегда была при удалении

        Спасибо, но всё это касается только удаления раздачи и файлов самой раздачи, но не относящегося к ней исходного .torrent-файла. Я их не удаляю, а храню для восстановления сета раздач в случае сбоя или переноса их на новую ОС. Дело в том, что у меня сотни терабайт активных раздач, на многих из них (особенно, на редких) я стою уже полтора десятка лет.


    1. hurtavy
      27.07.2026 07:35

      вот да, очень не хватает. Пусть бы хоть скидывал .torrent-файлы скачанных раздач в отдельную папку


      1. igrblkv
        27.07.2026 07:35

        Transmission на Debian'е так и работал через web-интерфейс, там было два пункта: "удалить файл", который удалял только раздачу и "удалить файл и торрент", который удалял раздачу и торрент-файл, который где-то на системном диске хранился и не удалялся по-умолчанию (Из-за этого на Дебиане системный диск заполнялся и становилось 0 свободного места). Также или иначе это в Винде работает - не знаю.


        1. hurtavy
          27.07.2026 07:35

          рад за Transmission. Оно и в μTorrent работает, как я описал. Но речь же про qBittorrent


          1. igrblkv
            27.07.2026 07:35

            так можно перейти, если есть нужные функции? или что-то мешает?


            1. Kasyan666
              27.07.2026 07:35

              Можно, спасибо, я подумаю. Как он ведёт себя под постоянной нагрузкой ~250 МБ/сек up 24/7? Ну, и небольшая проблемка: когда я последний раз мигрировал, перехэш всех раздач занял пару недель, сервер "колом" стоял.))) Но, это — мелочи.


      1. Kasyan666
        27.07.2026 07:35

        qBittorrent — скидывает загруженные по папкам.

        Проблема в том, что если я, по тем или иным причинам, хочу раздачу полностью удалить, то BitTorrent/μTorrent может удалить саму раздачу + файлы раздачи + исходный .torrent-файл. qBittorrent же может удалить только саму раздачу + файлы раздачи; а исходный .torrent-файл будь добр сам — "ручками". И хорошо, если исходный файл назывался хотя бы примерно, как раздача, а не "OurSuperTracker.com.torrent".


        1. Siemargl
          27.07.2026 07:35

          Давно так умеет.

          Не помню только, по ПКМ меню или когда Del на выделенной закачке...


          1. Kasyan666
            27.07.2026 07:35

            Извините, но, хоть убейте — не вижу.

            По `Del` — то же меню вызывается. Оба удаляют закачку и могут удалить файлы закачки. Исходный .torrent-файл — не трогают.


            1. Siemargl
              27.07.2026 07:35

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


    1. kvch Автор
      27.07.2026 07:35

      Добавил эту функцию, появится в новом обновлении(постараюсь залить его сегодня)


      1. Kasyan666
        27.07.2026 07:35

        Огромное спасибо!


  1. zelenin
    27.07.2026 07:35

    400 мб, 1100+ файлов. это так и должно быть?


    1. kvch Автор
      27.07.2026 07:35

      К сожалению, это минус распространения self-contained WinUI приложений(+ внутри целиком лежит движок qBittorrent со всеми его зависимостями). Позже подумаю что можно с этим сделать


      1. Siemargl
        27.07.2026 07:35

        Вероятно WinUI, как и WinRT - тупиковая ветвь MS - эволюции.

        Мне кажется, что подобные утилиты должны быть компактными и не потреблять много памяти. Для этого авторам придется, конечно, потрудиться.


        1. zartarn
          27.07.2026 07:35

          Так то весь новый интерфейс в win11 на winui, даже для winforms выпустили новые контролы. Хотя для кроссплатформенности было бы интереснее AvaloniaUI раз хочется .net

          Извиняюсь что всё в одном сообщении.

          @kvch частично можно уменьшить при публикации self-contained если включить опцию трим, от версии к версии дотнет она все больше откусывает лишнего. Сейчас же вы просто тащите весь рантайм. Как пример, PowerToys, которые в установщике сделали поиск уже установленного, и вместо распаковки своего, создание линков. https://github.com/microsoft/PowerToys/blob/main/doc/devdocs/disk-usage-footprint.md

          Если для сериализации/десериализации использовать сорсгенератор, ну и возможно еще какие то моменты подправить, то скорее всего можно еще и nativeAot включить и еще больше уменьшить размер.


          1. Siemargl
            27.07.2026 07:35

            Так то весь новый интерфейс в win11 на winui

            Так вот почему он тормозит!

            даже для winforms выпустили новые контролы.

            Где? Не наблюдаю

             скорее всего можно еще и nativeAot включить и еще больше уменьшить размер

            Нет. АОТ и WPF/XAML несовместимы. Upd. То ли выпустили WinUI 3 c AOT, то ли еще сырое по состоянию на 2025г, в релнотах неясно


            1. zartarn
              27.07.2026 07:35

              дауж. что то я прям по всем моментам "мимо кассы"...

              Где? Не наблюдаю

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

              В тг в диалогах своих вижу пару раз упоминание этого, но опять без ссылок %)

              АОТ и WPF/XAML несовместимы

              и выглядит как будто можно и не ждать в ближайшем будущем. По гитхабу как будто у них там команда маловата.

              Трим с горем пополам можно начиная с .net9 сделать, но там больше даже не сам wpf а обходные пути чтоб его не трогало)

              WinUI 3 c AOT

              Тут я прям погорячился) с AvaloniaUI имел больше дела чем с Winui3 и как то упустил извиду.

              Скрытый текст

              Так вот почему он тормозит!

              Я бы не сказал что прям что то тормозит. На мой субъективный взгляд, много где добавили асинхронную загрузку с ранней отрисовкой того что относится к бэкграунду что и создает эффект такое не самый приятный эффект. Когда смотрел, получалось что там где в Win11 получаем данную анимацию, то в вин10, первые доли секунд просто ничего нет а потом разом появляется такое же контекстное меню, и в сумме по времени +/- то на то и выходит.

              На ноуте 11, и прям каких то проблем не заметил, которые бы вызывали прям дискомфорт. С пересмотром стиля и тд, она в плане гуи воспринимается как то более целостно чем та же 10.


              1. Siemargl
                27.07.2026 07:35

                Я бы не сказал что прям что то тормозит. 

                Ну да, скорее мелкое подлагивание. На N4000 заметно, на нормальных ЦПУ скорее всего малозаметно.

                Та же история, когда интерфейс VS на WPF переписали (версия 2008 вроде). Вроде и ничего, но дискомфорт.


    1. igrblkv
      27.07.2026 07:35

      Красота требует жертв!

      Если оставить только En и Ru будет чуток поменьше:


  1. Grey83
    27.07.2026 07:35

    Во-первых, поиск раздач прямо в приложении

    В qBittorrent давно (если вообще не с самого начала, но я им всего лишь несколько лет пользуюсь, после ухода с засраного рекламой μTorrent’а) есть встроенный поисковик. Трекеры в поиск добавляются через плагины: https://github.com/qbittorrent/search-plugins/wiki/Unofficial-search-plugins


  1. Grif1488
    27.07.2026 07:35

    внизу на панели где "общие", "трекер" и тд на вкладке общие не хватает ссылки на раздачу, с которой был скачан торрент файл


  1. maxwell
    27.07.2026 07:35

    а всё же, стриминг через TorrServer был би не лишним.


  1. Kenya-West
    27.07.2026 07:35

    Пока что натянул старенькую шкурку fluent-dark-no-mica_3.qbtheme, с ней выглядит чуть поприличнее:

    QBitTorrent с темой Fluent
    QBitTorrent с темой Fluent

    Ваша разработка мне понравилась. Если будет почти мгновенно синхронизироваться с апстримом и не задет движок парсинга RSS, то надо бы к вам смигрировать.


    1. kvch Автор
      27.07.2026 07:35

      Ничего себе, даже не знал что такая тема есть!)

      и не задет движок парсинга RSS

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


      1. Grey83
        27.07.2026 07:35

        Ничего себе, даже не знал что такая тема есть!)

        Можно же в форках вот этого репозитория покопаться: https://github.com/witalihirsch/qBitTorrent-fluent-theme

        Да и вообще есть даже отдельная страница со списком разных тем: https://github.com/qbittorrent/wiki/blob/master/List-of-known-qBittorrent-themes.md Можно посмотреть репозитории по ссылкам и заглянуть в форки наиболее понравившихся.


  1. maxcat
    27.07.2026 07:35

    А чего автобнобновление в программе, а не через стор?

    Это из-за поиска по трекерам?

    Лет 10 назад FS Client через стор обновлялся, хотя там был поиск по кинотеатрам


  1. maxcat
    27.07.2026 07:35

    Почему было не сделать целиком на управляемом коде?

    Есть ведь библиотеки торрент клиентов целиком на dotnet.

    Да, qb уже десятки лет тестируют и развивают.

    Но ведь разрабатывать, отлаживать и поставлять проще, то что целиком на управляемом коде.