Об этом проекте

SwiftTUI Web предоставляет два npm-пакета, которые переносят приложения SwiftTUI — семантику SwiftUI, отрисовываемую в терминальных ячейках — в браузер. Один раз напишите App и используйте то же дерево View, @State и @FocusState на веб-странице, отрисовываемое через Canvas или DOM с семантическим деревом доступности, без переписывания и без использования эмулятора терминала вроде xterm.js. Приложение SwiftTUI компилируется в wasm32-wasi и передаёт структурированную растровую поверхность. Пакет @swifttui/web отрисовывает эту поверхность на странице через движки DOM или canvas и монтирует настоящее дерево доступности ARIA. Дерево ARIA — это односторонний предпросмотр семантического представления: порядок чтения, имена, роли, скрытое состояние, объявления и фокус из среды выполнения представляются, но фокус из вспомогательных технологий, активация, настройка и редактирование не маршрутизируются обратно в SwiftTUI. Этот репозиторий содержит два из пяти хостов SwiftTUI: статический WASI-бандл и локальный WebHost. Сам фреймворк находится в SwiftTUI/swift-tui. Такое разделение исключает процессы сборки Swift и работу с файловой системой из безопасной для браузера среды выполнения, поэтому любой сборщик может импортировать среду выполнения. Пакеты: - @swifttui/web: среда выполнения для браузера — загрузка манифеста сцены, рендеринг DOM + canvas, монтирование ARIA, мосты сцен WebSocket + WASI. - @swifttui/build: инструменты сборки — генерация манифеста, сборки Swift WASI, валидация wasm и CLI swifttui-web. Установка: оба пакета публикуются в npm как ESM со встроенными объявлениями TypeScript. Не требуется инструментальная цепочка Bun или TypeScript; они содержат скомпилированный JavaScript в dist/ и объявления. Устанавливайте через npm или из tarball-архивов релизов GitHub. Базовое использование: соберите приложение SwiftTUI в WASI командой `npx swifttui-web build --package-path ./TerminalApp --app MyApp`, затем смонтируйте полученный манифест и wasm из среды выполнения браузера с помощью createWebHostApp и createWasmSceneRuntimeFactory. Среда выполнения WASI требует, чтобы хост-страница отдавала заголовки Cross-Origin-Opener-Policy: same-origin и Cross-Origin-Embedder-Policy: require-corp для stdin на базе SharedArrayBuffer; без них canvas останется пустым. Статус: бета; публичный API может меняться. Живая демонстрация доступна на https://swifttui.sh/webexample. Документация и справочник по API на https://swifttui.sh/docs/documentation/. Другие хосты включают терминал (импорт SwiftTUI по умолчанию), нативный SwiftUI (swift-tui-swiftui) и Jetpack Compose (swift-tui-android). Лицензия: MIT.