К содержанию
Открытое ПО · MVP банка

Открытые программы снимают с MVP банка плату за лицензии

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

На странице одна схема банка: шесть уровней, от каналов до общей инфраструктуры. В каждом разделе схема раздвигается: видно, на каком уровне стоит программа, что она делает и какие у неё цифры. Рядом с цифрой стоит, на чём её мерили: чужой замер не обещает такую же скорость сервиса банка.

Пройти путь перевода
  • 0 ₽за лицензии: 8 из 8 программ открытыелицензии в репозиториях проектов, 01.10.2026 · восемь лицензий ↓
  • 500+ в секундузапусков процессов на обычном компьютерепрактика автора
  • 2 000 в секундувходов по паролю на 3 экземплярах, 100 000 пользователейзамер проекта · замер версии 26.4 ↗
  • 2,6 млнчеловек в месяц пишут код на языке экрана и процессовотчёт площадки разработки, 2025 · отчёт ↗

Путь перевода

В одном переводе работают восемь открытых программ и семь систем банка

Банк не меняет учёт, антифрод и аудит: открытые программы встают рядом. Голубые кубики это программы и код команды на них, серые это системы банка. Прокрутка ведёт один перевод по шагам.

  1. 1 / 8 · экран

    Экран собирается на сервере банка

    Серверный слой на Next.js собирает страницу из блоков React и отдаёт её браузеру вместе с кодом экрана. Ключи и запросы к системам банка остаются на сервере. Экран и серверный слой написаны на TypeScript.

    ReactNext.jsTypeScript

  2. 2 / 8 · вход

    Пароль видит только Keycloak

    Серверный слой отправляет браузер на страницу входа Keycloak: там клиент вводит пароль и второй фактор, а приложение их не видит. Keycloak держит учётные записи в своей базе PostgreSQL. Браузер возвращается с кодом, серверный слой меняет его на токены и браузеру их не отдаёт.

    KeycloakPostgreSQLNext.js

  3. 3 / 8 · запрос

    Шлюз пропускает только верный запрос

    Шлюз сам проверяет токен ключами Keycloak и сверяет запрос с описанием API в формате OpenAPI: запрос с неверным токеном или форматом дальше не идёт. Перед этим клиент подтверждает перевод, экран один раз создаёт идентификатор операции, а серверный слой передаёт на API-шлюз запрос с токеном клиента. Партнёр входит в тот же API со своим токеном, в этом переводе его нет.

    OpenAPINext.js

  4. 4 / 8 · запуск

    Temporal заводит процесс, код команды выполняет шаги

    Сервис перевода, код команды на TypeScript, запускает в Temporal процесс с идентификатором операции: пока он идёт, второй такой Temporal не создаёт. Сервис получает запрос от шлюза и до запуска сверяется с модулем подтверждения банка. Запуск записан в историю в PostgreSQL, клиент получает ответ «перевод принят». Шаги берёт исполнитель, тоже код команды: он сам забирает задачи у Temporal и первым шагом пишет операцию в реестр.

    TemporalTypeScriptPostgreSQL

  5. 5 / 8 · проверка

    Проверки остаются у систем банка

    Шаг процесса спрашивает системы банка: счёт принадлежит клиенту, антифрод разрешает перевод, лимит под сумму зарезервирован. Temporal записывает ответ в историю: выполненный шаг после сбоя не повторяется. Если система банка отказала, процесс возвращает лимит и закрывает перевод со статусом «отклонён», деньги не тронуты.

    TemporalTypeScript

  6. 6 / 8 · списание и зачисление

    Деньги двигает учётная система банка

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

    TemporalTypeScriptPostgreSQL

  7. 7 / 8 · событие

    Итог перевода ложится в поток NATS

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

    NATSTemporal

  8. 8 / 8 · уведомление

    Системы банка читают поток, клиент видит итог

    Уведомления, хранилище данных и аудит получают событие через подписчиков: это небольшие адаптеры команды, сами системы не меняются. Кто был недоступен, дочитает пропущенное, пока поток его хранит. Поток доставляет событие не менее одного раза, поэтому подписчик отбрасывает повтор. Клиент получает уведомление, а экран читает статус из реестра операций через тот же API.

    NATSPostgreSQL

  9. итог

    Восемь программ на местах, семь систем банка остались как есть

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

голубые: открытые программы MVP и код команды на них · серые: системы банка · пунктир: настройка, а не вызов · тонкая серая линия: вход партнёра · зелёная плитка: шаг пройден · белая карточка: запись · пример архитектуры · стыки сверены с документацией проектов 02.10.2026

Стыки схемы: кто открывает соединение, что по нему идёт и где это написано

Стрелка показывает, кто открывает соединение.

ШагКто с кемЧто между нимиИсточник
1. экранбраузер → серверный слой (Next.js)HTTPS: страница, собранная на сервере банка, и код экранасвой сервер ↗ · что остаётся на сервере ↗
2. входбраузер → Keycloakстраница входа: пароль и второй фактор вводятся на стороне Keycloakвход с кодом авторизации ↗
2. входсерверный слой → Keycloakобмен кода на токены, сервер с сервером, со своим секретом (OpenID Connect)обмен кода на токены ↗
2. входKeycloak → PostgreSQLучётные записи и сессии входа: с версии 26 сессии лежат в базебаза входа ↗ · сессии в базе ↗
3. запроссерверный слой → API-шлюзHTTPS: запрос с токеном доступа клиента и идентификатором операции; сессию и форму серверный слой проверяет до отправкислой над API ↗
3. запросAPI-шлюз → Keycloak, пунктироткрытые ключи подписи: шлюз берёт их заранее и проверяет токен сам (подпись, срок, издатель, получатель, права)адрес ключей ↗
3. запросAPI-шлюз и описание API, пунктиршлюз настроен по файлу OpenAPI и сверяет с ним путь, параметры и тело запроса; в файле названы и способы входачто даёт описание API ↗ · схемы защиты ↗
3. запроссистема партнёра → Keycloak, затем → API-шлюзтокен по собственным учётным данным системы партнёра (OAuth 2.0, client credentials): партнёр действует от своего именитокен для системы ↗
4. запускAPI-шлюз → сервис переводаHTTPS: клиента сервис берёт из токена, а не из тела запросакод команды
4. запусксервис перевода → подтверждение операциидействует ли подтверждение клиента для этого переводаAPI банка
4. запусксервис перевода → Temporalзапуск процесса (gRPC), идентификатор процесса равен идентификатору операции. Пока процесс идёт, второй такой не создаётся; после него повтор запрещает правило Reject Duplicate, пока хранится история, и уникальный идентификатор в реестре операцийидентификатор процесса ↗
4. запускTemporal → PostgreSQLсостояние и история процессов; Temporal проверяют на PostgreSQL версий 13⁠–⁠16база процессов ↗
4. запускисполнитель → Temporalисполнитель сам забирает задачи и возвращает результаты шагов (gRPC): код команды Temporal не выполняетисполнители ↗ · очередь задач ↗
4. запускисполнитель → PostgreSQL (реестр операций)операция со статусом «принята» в начале, итог в шаге 6; строки пишутся одной транзакцией, идентификатор операции уникалентранзакции ↗ · уникальность ↗
5. проверкаисполнитель → учётная система, антифрод и лимитычей счёт, решение антифрода, резерв лимита под сумму. При отказе процесс возвращает лимит и закрывает перевод; если антифрод взял паузу, процесс ждёт решения и не занимает исполнителяAPI банка
6. списание и зачислениеисполнитель → учётная системарезерв, проводка, при отказе снятие резерва и возврат лимита. Ключ идемпотентности выведен из идентификатора операции: повтор отсекает учётная система, шаг может выполниться больше одного разаключ идемпотентности ↗
7. событиеисполнитель → NATSпубликация с идентификатором сообщения: поток сохраняет событие и подтверждает запись, повтор в окне проверки не сохраняетзапись без дубликатов ↗
8. уведомлениеподписчики (код команды) у систем банка → NATSу каждой системы свой подписчик с сохранённой позицией: небольшой сервис команды, он подтверждает каждое сообщение и передаёт событие системе через её API; доставка идёт не менее одного разаполучатель помнит позицию ↗ · доставка и подтверждение ↗
8. уведомлениесервис перевода → PostgreSQL (реестр операций)чтение статуса для экрана: запрос приходит тем же путём, статус получает только владелец операциикод команды

Что схема упрощает

  • У каждой программы в бою несколько экземпляров, обычно на двух площадках: Keycloak, сервисы Temporal, NATS с тремя копиями потока, PostgreSQL с резервным сервером. На схеме один кубик.
  • Перед серверным слоем, шлюзом и страницей входа стоит периметр: балансировщик принимает HTTPS и отсекает лишние запросы. На схеме нет сетевых зон, шифрования между сервисами, секретов и мониторинга.
  • Показан перевод внутри банка. Когда счёт получателя ведёт другая система или другой банк, списание и зачисление становятся двумя шагами процесса, а при отказе деньги возвращаются, как в разделе Temporal ниже. Тогда на схему встают платёжный шлюз банка и платёжная система.
  • Не показано, как клиент подтверждает перевод, кодом или биометрией: модуль подтверждения банка выдаёт и проверяет подтверждение, а сервис перевода спрашивает у него, действует ли оно. Второй фактор на входе не заменяет подтверждение перевода.
  • Антифрод и лимиты показаны одним кубиком, это разные системы. Исполнитель обращается к системам банка через их API или через шину банка: на схеме прямая линия.
  • Подписчик у каждой системы банка это отдельный небольшой сервис команды: он читает поток и передаёт событие системе через её API. На схеме он слит с кубиком системы, поэтому линия к потоку идёт от неё.
  • Если процесс не довёл операцию сам, её получает сотрудник на разбор, а реестр операций сверяют с учётной системой. Каждая система пишет в журнал аудита на своём шаге: на схеме только запись об итоге. Банк задаёт, как долго поток хранит события: отставший получатель дочитает то, что в нём ещё осталось.
  • PostgreSQL стоит на схеме трижды: программа одна, базы отдельные (вход, процессы, реестр). У Temporal две базы: состояние с историей и поиск по процессам. Temporal хранит историю завершённого процесса заданный срок, а постоянная запись об операции лежит в реестре. Код команды шифрует данные перевода в истории.
  • Сессии серверного слоя лежат в отдельном хранилище, общем для экземпляров слоя: на схеме этого хранилища нет. React работает и в браузере, и на сервере внутри Next.js: на схеме он стоит на уровне экрана, за экран он и отвечает.
  • Схема начинается с готового перевода: получателя уже выбрали и комиссию посчитали. Мобильное приложение приходит на тот же шлюз, а вход у него свой, через Keycloak.

Что будет с переводом, если исполнитель упадёт посреди шага? ↓

Ядро операции

TemporalУровень 4 из 6 · Платформа задач и процессов

После сбоя исполнителя процесс продолжается по своей истории

Temporal в цифрах

Запись в базу
1 350 в секундупереходов состояния процесса; небольшой свой кластер, база MySQL на 4 ядрахзамер проекта · блог проекта, 2023 ↗
Сбой исполнителя
другой подхватывает через 10 секундсрок по умолчанию для задачи процесса; срок шага задаёт разработчикдокументация проекта · как замечается сбой ↗ · срок шага ↗
После сбоя
продолжает с записанного шагавыполненные шаги не повторяются: процесс берёт их результаты из историидокументация проекта · повтор по истории ↗
Запусков процессов
больше 500 в секундуобычный компьютер, 40 ГБ памяти, без видеокартыпрактика автора
Лицензия
MIT, 0 ₽первый выпуск в 2020 году, 23 тыс. звёздрепозиторий проекта, 01.10.2026 · текст лицензии ↗ · репозиторий ↗

Temporal ведёт операцию по шагам и записывает каждый шаг в историю. Если исполнитель падает, другой читает историю и продолжает процесс: результаты выполненных шагов он берёт из неё. Действие сбойного шага может повториться, поэтому списание и зачисление нужно защитить ключом от повторного проведения. На обычном компьютере у автора выходит больше 500 запусков процессов в секунду: это замер одного компьютера, для своей операции его повторяют на своём стенде.

Где в банке и финтехе

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

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

Кто проверяет, что операцию запускает тот, кому можно? ↓

KeycloakУровень 5 из 6 · Банковские функции

Серверы для входа считают до закупки

Keycloak в цифрах

Входов в секунду
2 000и 10 000 обновлений токена в секунду; 100 000 пользователей; 3 экземпляра с пределом по 74 виртуальных ядра и отдельная база; версия 26.4, октябрь 2025замер проекта · замер версии 26.4 ↗
Расчёт серверов
1 виртуальное ядро на 15 входов в секундуи на 120 обновлений токена в секунду; правило проверено до 300 входов в секундудокументация проекта · расчёт памяти и ядер ↗
Стандарты входа
OpenID Connect, OAuth 2.0, SAML 2.0роль записана в подписанном токене; второй фактор: одноразовые коды и ключи доступадокументация проекта · поддержанные стандарты ↗ · роль в токене ↗
Отклик
не дольше 47 мс у 99 % запросовпри 500 входах и 2 500 обновлениях токена в секундузамер проекта · замер версии 26.4 ↗
Лицензия
Apache 2.0, 0 ₽первый стабильный выпуск в 2014 году, 37 тыс. звёздрепозиторий проекта, 01.10.2026 · текст лицензии ↗ · репозиторий ↗

Keycloak проверяет вход вместо приложения и выдаёт токен с ролью: экраны и сервисы открываются по этой роли. Проект публикует правило: 1 виртуальное ядро на 15 входов в секунду. Поэтому серверы считают до закупки, а не после сбоя. В замере проекта три экземпляра по 74 виртуальных ядра дали 2 000 входов в секунду на 100 000 пользователей. Мерили только вход по паролю и обновление токена, поэтому свою нагрузку банк проверяет своим тестом.

Где в банке и финтехе

  • Вход клиентамобильный и веб-банк с одним входом и вторым фактором
  • Единый вход сотрудниковсотрудник входит по учётной записи из каталога банка, без отдельного пароля в каждой системе
  • Токены для сервисовсервисы получают свои токены и предъявляют их, когда обращаются друг к другу
  • Доступ партнёровпартнёр получает только разрешённую ему часть прав

Цифры замера дают отправную точку: проект сам советует до запуска нагрузить Keycloak своим тестом, а замер проверял только вход по паролю и обновление токена. документация проекта · расчёт памяти и ядер ↗ · замер версии 26.4 ↗

Как остальные системы банка узнают, что операция прошла? ↓

NATSУровень 6 из 6 · Общебанковская инфраструктура

Отставшая система дочитывает пропущенные события из потока

NATS в цифрах

Рассылка без хранения
4,9 млн сообщений в секундупример из руководства: сообщения по 16 байт, один сервер на ноутбуке, один отправитель и один получательзамер проекта · руководство проекта, архив ↗
С сохранением в файл
400 тыс. сообщений в секундупример из руководства: сообщения по 128 байт, одна копия, тот же ноутбук; без сброса на диск после каждого сообщениязамер проекта · руководство проекта, архив ↗
Чтение сохранённого потока
1,2 млн сообщений в секундупример из руководства: один получатель без подтверждений; если четыре получателя подтверждают каждое сообщение, 290 тыс. в секундузамер проекта · руководство проекта, архив ↗
Три копии
запись подтверждают 2 сервера из 3если один сервер выйдет из строя, события не пропадутдокументация проекта · копии и кворум ↗
Установка
один исполняемый файлбез внешних зависимостейдокументация проекта · о проекте ↗
Лицензия
Apache 2.0, 0 ₽репозиторий с 2012 года, 21 тыс. звёздрепозиторий проекта, 01.10.2026 · текст лицензии ↗ · репозиторий ↗

NATS сразу рассылает событие операции всем подписанным системам: уведомлениям, антифроду, учёту. Поток хранит события на диске: если система была недоступна, она дочитает пропущенное с того места, где остановилась. В руководстве проекта есть пример: один сервер на ноутбуке сохраняет 400 тыс. сообщений в секунду по 128 байт. Это скорость одного сервера в одном режиме записи, пропускную способность операции банка она не задаёт.

Где в банке и финтехе

  • События операцииуведомления, антифрод, учёт и аналитика получают одно и то же событие
  • Запрос и ответ между сервисамисервисы обращаются друг к другу без общей базы
  • Разбор задним числомпоток можно перечитать с начала, с номера события или с нужного момента

Без потока событие не хранится: если система недоступна, когда его отправляют, она его не получит. Цифры служат примерами: один ноутбук, один сервер, сети между серверами нет, запись идёт в файл без сброса на диск после каждого сообщения (по умолчанию сервер сбрасывает данные на диск раз в 2 минуты); три копии снижают скорость записи. документация проекта · как устроена доставка ↗ · сброс на диск ↗

Где лежат сами записи и что будет, если сбой случится, пока их пишут? ↓

PostgreSQLУровень 6 из 6 · Общебанковская инфраструктура

Транзакция записывает операцию в реестр целиком или никак

PostgreSQL в цифрах

Транзакции
гарантии ACID с 2001 годацеликом или никак: несколько строк проводятся одной операциейдокументация проекта · о проекте ↗
Сбой до конца транзакции
не остаётся ни одной строкибаза сначала пишет в журнал и только потом подтверждает запись; если ответ пропал после подтверждения, строки уже в базедокументация проекта · транзакции ↗
Резервный сервер
журнал передаётся потокомпо журналу база восстанавливается на любой момент после резервной копиидокументация проекта · резервный сервер ↗ · восстановление по журналу ↗
Поиск по смыслу
расширение pgvector ищет ответ по смыслу в тех же таблицахне входит в ядро, включается командой; отпечатки смысла попадают в те же транзакции и резервные копии; отпечаток хранит до 16 000 чисел, индекс для быстрого поиска до 2 000документация проекта · описание расширения ↗ · индексы ↗
Разработчики
58 % работают с базойпрофессиональные разработчики в опросе, 21 126 ответовопрос разработчиков, 2025 · опрос ↗
Лицензия
PostgreSQL, 0 ₽без оплаты для любых целей; версия 18 вышла 25.09.2025сайт проекта, 01.10.2026 · текст лицензии ↗ · версии ↗

PostgreSQL записывает списание и зачисление одной транзакцией: в базе будут обе строки или ни одной. База сначала пишет в журнал и только потом подтверждает запись. Сбой до конца транзакции не оставляет строк. Если же пропал только ответ после подтверждения, строки в базе уже есть, поэтому перед повтором операцию ищут по её идентификатору. Журнал потоком уходит на резервный сервер. В той же базе работает поиск по смыслу: у текстов есть числовые отпечатки смысла, и открытое расширение pgvector хранит их рядом с записями банка. В опросе 2025 года с базой работают 58 % профессиональных разработчиков.

Где в банке и финтехе

  • Реестр сделок и проводкинесколько строк записываются одной транзакцией
  • Состояние процессовTemporal хранит историю процессов в отдельной базе, тоже на PostgreSQL
  • Журнал аудитаизменения пишутся в отдельные таблицы
  • База знаний ассистентаответ ищут по смыслу среди утверждённых документов в той же базе

Пишет один основной сервер, резервные только читают. По умолчанию журнал уходит на резервный с отставанием. Поэтому для денег включают синхронную передачу: подтверждение ждёт ответа и от резервного сервера. документация проекта · синхронная передача ↗

На чём собран экран, который видит клиент? ↓

Экран и API

ReactУровень 1 из 6 · Каналы

Блок экрана пишут один раз и ставят на все экраны веб-банка

React в цифрах

Блок экрана
пишется один рази ставится в любое число местдокументация проекта · первый блок ↗
Разработчики
47 % работают с библиотекойпрофессиональные разработчики в опросе, 19 460 ответов; второе место среди веб-технологийопрос разработчиков, 2025 · опрос ↗
Обновление экрана
экран следует за даннымиданные изменились, и библиотека перерисовала нужное местодокументация проекта · страница проекта ↗ · как обновляется экран ↗
Лицензия
MIT, 0 ₽первый выпуск в 2013 году, 251 тыс. звёздрепозиторий проекта, 01.10.2026 · текст лицензии ↗ · репозиторий ↗

React собирает экран из блоков: блок написан один раз и стоит в веб-банке на телефоне, в веб-банке на компьютере и на экране сотрудника. Когда данные меняются, React сам обновляет экран. В опросе 2025 года с библиотекой работают 47 % профессиональных разработчиков: это второе место среди веб-технологий. Доля в опросе не говорит, легко ли нанять свою команду.

Где в банке и финтехе

  • Веб-банк клиентана телефоне и на компьютере собран из одной библиотеки блоков
  • Экран сотрудникате же блоки стоят в рабочем месте и во внутренних консолях
  • Блок для партнёравстраивается в готовую страницу партнёра

React отвечает только за экран. Маршруты, загрузку данных и работу на сервере берёт на себя каркас приложения, на этой странице это Next.js. документация проекта · проект с нуля ↗

Кто собирает страницу на сервере и где остаются ключи? ↓

Next.jsУровень 2 из 6 · Канальный слой

Страница собирается на сервере банка и приходит клиенту готовой

Next.js в цифрах

Свой сервер
все возможности на сервере банкаобычный процесс или контейнердокументация проекта · развёртывание ↗
Ключи и запросы к данным
остаются на сервересерверные блоки берут данные рядом с источником; в браузер уходит готовый результат и меньше кодадокументация проекта · серверные и клиентские блоки ↗
Под нагрузкой
до 22 % больше запросовверсия 16.3 против прежнего способа отдавать страницы; мерила команда проекта, стенд не описанзамер проекта · выпуск 16.3 ↗
Практика
на нём работает этот сайтверсия 16 на своём серверепрактика автора
Разработчики
21,5 % работают с каркасомпрофессиональные разработчики, 19 460 ответовопрос разработчиков, 2025 · опрос ↗
Лицензия
MIT, 0 ₽первый выпуск в 2016 году, 143 тыс. звёздрепозиторий проекта, 01.10.2026 · текст лицензии ↗ · репозиторий ↗

Next.js принимает запрос на сервере банка, сам берёт данные и отдаёт браузеру готовую страницу. В показанной схеме данные берут серверные блоки, поэтому ключи и запросы к данным остаются на сервере. Каркас запускают как обычный процесс или контейнер, и на своём сервере доступны все его возможности. На Next.js работает и этот сайт.

Где в банке и финтехе

  • Серверный слой веб-каналаодин слой над API банка собирает экран клиента
  • Страница продукта с заявкойсервер быстро отдаёт готовую страницу и держит её в кеше
  • Консоль сотрудникасервер собирает экраны по роли
  • Страницы партнёроводно приложение обслуживает нескольких партнёров

Это слой экрана, а не весь сервер приложения: операции и учёт остаются в процессах и базах банка. Когда экземпляров несколько, кеш у каждого свой: нужен общий обработчик, который держит кеш во внешнем хранилище. документация проекта · слой над API ↗ · общий кеш ↗

Как партнёр и мобильный банк узнают правила API? ↓

OpenAPIУровень 2 из 6 · Канальный слой

Партнёр подключается по одному файлу с описанием API

OpenAPI в цифрах

Один файл
пути, поля и способы входачитается людьми и программамидокументация проекта · спецификация 3.2.1 ↗
Проверка до кода
шлюз сверяет запрос с описанием APIпуть, параметры и тело запросадокументация проекта · что даёт описание API ↗
Инструменты
1 521 в реестре проекта93 генератора кода, 84 проверки данных, 29 заглушекреестр проекта, 01.10.2026 · реестр инструментов ↗
Способы входа
5 схем защитыключ, HTTP, взаимный TLS, OAuth 2.0, OpenID Connectдокументация проекта · схемы защиты ↗
Лицензия
Apache 2.0, 0 ₽версия 3.2.1 от 10.09.2026, 31 тыс. звёздрепозиторий проекта, 01.10.2026 · текст лицензии ↗ · репозиторий ↗

OpenAPI описывает API одним файлом: пути, поля и способы входа. Файл читают и люди, и программы. По этому описанию настраивают шлюз, и он отклоняет запрос, который не сходится с описанием, до кода сервиса. Ошибки в логике операции такая сверка не ловит. Из того же файла получают проверки, код подключения для партнёра и заглушку для команды экрана. Под такой файл в реестре проекта есть 1 521 инструмент.

Где в банке и финтехе

  • Подключение партнёрапартнёр читает описание API и получает из него готовый код
  • Проверка при выкаткесервис сверяют с описанием API при каждой сборке
  • Заглушка для экранакоманда экрана работает, пока сервис не готов
  • Открытые APIв том же файле описаны и способы входа по токену

Описание само ничего не проверяет: сверяет шлюз или сервис, настроенные по нему. Оно описывает API по HTTP; события через брокер описывают другим стандартом, AsyncAPI. документация проекта · границы описания ↗ · соседние стандарты ↗

Как ошибка в одном поле не доходит до клиента? ↓

TypeScriptУровни 1, 2 и 4 из 6 · Язык экрана, сервера и процессов

Расхождение в поле перевода проверка показывает до запуска

TypeScript в цифрах

Одно описание
его читают экран, сервер и процессописания данных подключают как обычный коддокументация проекта · модули ↗
Ошибка в поле
находится до запускапроверка показывает места, где описание не сходитсядокументация проекта · проверка до запуска ↗
Сборка
обычно в 8⁠–⁠12 раз быстрее в версии 7полная сборка против версии 6; мерила команда проекта, железо не названозамер проекта · выпуск 7.0 ↗
Разработчики
2,6 млн в месяцавторы кода на языке, крупнейшая площадка разработки, август 2025; первое место среди языков, рост на 66,6 % за годотчёт площадки разработки, 2025 · отчёт ↗
В опросе
48,8 % работают с языкомпрофессиональные разработчики, 24 759 ответовопрос разработчиков, 2025 · опрос ↗
Лицензия
Apache 2.0, 0 ₽первый выпуск в 2012 году, 111 тыс. звёздрепозиторий проекта, 01.10.2026 · текст лицензии ↗ · репозиторий ↗

TypeScript описывает перевод один раз, и это описание читают экран, серверный слой и процесс. В описании поменяли поле, например сумму: проверка показывает до запуска, какие места перестали сходиться. На языке пишут 2,6 млн разработчиков в месяц: это первое место среди языков на крупнейшей площадке разработки, если считать авторов кода. Сколько из них готовы прийти в команду банка, это число не показывает.

Где в банке и финтехе

  • Код подключения из описания APIисчезнувшее поле становится ошибкой сборки, а не сбоем у клиента
  • Одна модель операцииэкран, серверный слой и процесс не расходятся в полях
  • Код агентовто, что написал агент, проверяется до того, как его смотрит человек

Описания проверяются только до запуска: в работающей программе их нет, поэтому входящие данные всё равно сверяют на границе, по описанию API. документация проекта · описания стираются ↗

Во что обходятся лицензии на все восемь программ? ↓

Всё вместе

0 ₽ стоят только лицензии

Восемь программ стоят на пяти уровнях из шести. Каждую банк ставит на свои серверы и может бесплатно использовать в коммерческих целях; условия конкретной версии и комплектации проверяют отдельно. Процесс, экраны и описания API пишет команда банка: то, чем продукт отличается. На ней же интеграции с системами банка, серверы, обновления и сопровождение.

ПрограммаУровень банкаЧто делаетЛицензия
React01 Каналысобирает экран из блоковMIT · 0 ₽ · текст лицензии ↗
TypeScriptсквозь уровни 1, 2 и 4: везде, где пишется коднаходит ошибки до запускаApache 2.0 · 0 ₽ · текст лицензии ↗
OpenAPI02 Канальный слойописывает API одним файломApache 2.0 · 0 ₽ · текст лицензии ↗
Next.js02 Канальный слойсобирает страницу на сервереMIT · 0 ₽ · текст лицензии ↗
Temporal04 Платформа задач и процессовведёт операцию по шагамMIT · 0 ₽ · текст лицензии ↗
Keycloak05 Банковские функциипроверяет вход и выдаёт ролиApache 2.0 · 0 ₽ · текст лицензии ↗
NATS06 Общебанковская инфраструктураразносит события между системамиApache 2.0 · 0 ₽ · текст лицензии ↗
PostgreSQL06 Общебанковская инфраструктурахранит записи транзакциямиPostgreSQL · 0 ₽ · текст лицензии ↗

лицензии в репозиториях проектов, проверены 01.10.2026

Как команда с агентами пишет сам продукт? →