Microsoft открыла публичный превью‑доступ к «динамическим проекциям» WinRT для Node.js: теперь JavaScript/TypeScript‑приложениям проще подключать системные возможности Windows без мостов на C++/C#. Это особенно заметно в сценариях с локальным ИИ, уведомлениями и доступом к файлам — там, где раньше часто упирались в нативную обвязку.
Microsoft сделала заметный шаг навстречу JavaScript- и TypeScript-разработчикам, которые пишут десктоп-приложения под Windows на Node.js и Electron. В публичном превью появилась динамическая проекция Windows Runtime (WinRT) для Node.js — подход, который позволяет вызывать поддерживаемые WinRT API напрямую из JS/TS, без обязательного «моста» на C++ или C#.
В чём была боль раньше
Доступ к системным возможностям Windows из JavaScript-приложения существовал и раньше, но часто превращался в отдельный проект: нативные аддоны, сборка через node-gyp, ручной маппинг WinRT-типов и асинхронности, обвязка под каждый API и поддержка совместимости с Electron. В итоге даже простой сценарий (например, уведомления или системный file picker) мог потребовать нативной части и отдельного тулчейна.
Что изменилось: «динамические проекции» WinRT
Новая схема строится вокруг генерации JS-обёрток и TypeScript-описаний на этапе сборки. Важно, что это не «магия рантайма, которая всё делает сама», а нормальный дев-процесс: вы выбираете нужные пространства имён WinRT, запускаете генератор — и получаете готовые импорты в проекте.
- Вместо написания нативного аддона под каждую фичу — генерация .js и .d.ts под выбранные API.
- Вместо ручной поддержки обвязки при изменениях — повторный прогон генерации по метаданным Windows.
- Вместо обязательного знания C++/C# — привычные Node.js-инструменты и пакеты.
По описанию Microsoft и обзору The Register, ключевая идея здесь — использовать Windows Metadata (.winmd). Это метаданные, которые описывают WinRT API и позволяют автоматически строить типизированные обёртки. Если метаданные меняются, то обёртки можно обновить регенерацией, без переписывания кода вручную.
Какие возможности Windows становятся ближе
Речь не о «секретных» функциях ОС, а о более простом пути к уже существующим WinRT-возможностям — прежде всего к тем, которые востребованы в прикладных приложениях.
Примеры сценариев, которые теперь проще подключать:
- Уведомления (системные нотификации, которые выглядят как родные для Windows).
- Доступ к файлам и папкам через стандартные диалоги выбора, плюс работа со storage-API.
- Сетевые и системные API: часть возможностей в области networking, сенсоров, глобализации и криптографии.
- Локальный ИИ на устройстве: генерация/суммаризация/переписывание текста, преобразование текста в таблицы, операции с изображениями (описание, распознавание, масштабирование, извлечение/удаление объектов) — там, где это поддерживается Windows и конкретным устройством.
При этом UI-возможности в рамках этой истории не акцентируются: логика выглядит прагматично — интерфейс в Electron и так закрывается собственными кроссплатформенными механизмами, а цель проекций — дать доступ к «системным» возможностям.
Как это выглядит в проекте: без нативной обвязки, но с генерацией
Microsoft описывает поставку решения через набор npm-пакетов. «Оркестратор» — CLI, который инициализирует проект, подтягивает зависимости и запускает генерацию. В типовом сценарии разработчик ставит dev-зависимость и выполняет команду инициализации, после чего в проекте появляются сгенерированные биндинги (JS-обёртки и TS-типы) в служебной папке.
Практический смысл для команд разработки:
- меньше точек отказа в CI/CD (нет отдельного нативного компонента, который «ломается» на сборке);
- проще вход для разработчиков, которые не хотят тащить C++/C# в стек ради одной функции;
- можно аккуратнее разносить кроссплатформенную логику и Windows-специфичные фичи по слоям приложения.
Почему это важно именно сейчас
JavaScript давно перестал быть «только для браузера», но на десктопе разработчики всё ещё часто выбирают кроссплатформенность ценой «родных» возможностей ОС. Публичный превью WinRT-проекций для Node.js выглядит как попытка снизить этот компромисс: сохранить привычный стек (Node.js/Electron) и при этом без лишнего порога подключать функции Windows — особенно те, что связаны с on-device AI и системными сервисами.
Для пользователя это обычно выражается просто: приложение быстрее получает «родные» функции (уведомления, интеграции, офлайн-ИИ-сценарии), а у команды меньше времени уходит на обвязку вместо продуктовых задач.
