Пресеты
Пресетов три. Каждый строится на одном базовом шаблоне — React + Vite + @vkma.dev/bridge, devtools-плагин и деплой; пресет-оверлей добавляет зависимости и заменяет часть исходников. Выбирай по потребности в UI-ките и навигации — структура готового приложения отличается именно здесь.
React + Vite + @vkma.dev/bridge, без UI-кита.
src/App.tsx— демка моста: типизированныйsend("VKWebAppGetUserInfo")и подписка на события хоста черезbridge.subscribe(возвращает функцию off — готовый cleanup дляuseEffect).src/main.tsxотправляетVKWebAppInit(сворачивает прелоадер хоста) и монтирует<App />вStrictMode.- Стилизация — единственный
src/App.css, никакого UI-фреймворка.
Бери, когда приносишь свой UI-стек (Tailwind, другой кит) или хочешь минимальную заготовку без лишнего слоя.
base + VKUI 8, @vkontakte/icons и @vkma.dev/vkui-bridge.
src/main.tsxподключает@vkontakte/vkui/dist/vkui.cssи оборачивает приложение в<VKBridgeConfigProvider>из@vkma.dev/vkui-bridge: тема хоста, safe-area insets и адаптивность стримятся из событий моста.src/App.tsx— оболочка по гайду навигации VKUI:SplitLayoutс сайдбаром изCellна десктопе иEpic+Tabbarна мобильных. Активная история хранится вuseState.- Три истории в
src/views/:ProfileView,FeedView,MoreView.
Бери, когда нужен фирменный вид VKUI, а переключение историй без URL-роутинга устраивает: навигация живёт в локальном состоянии.
Пресет по умолчанию: base + @vkma.dev/router на TanStack Router + VKUI.
src/app.tsx— дерево приложения:createAppс тремя вьюхами, модалкойsettingsи popout’омlogout; роутер наcreateVkHistory(hash-режим),routeMasksне даёт модалке писать свой путь в URL.src/shell.tsx— та же оболочкаEpic+Tabbar, но активная история читается из роутера (useActiveStory), а табы — обёрткиcreateVkLinkсreplace, чтобы кнопка «назад» не листала табы.src/panels/<история>/— хабыdefineView("feed")и панели видаfeedView.panel("post/$id", {}, () => import("./post.ui")): ленивые чанки и типизированные path-параметры.src/overlays.tsx— глобальные модалка и popout, открываются с любой панели.src/main.tsxсвязывает историю с хостом:createBridgeSyncсообщает хосту локацию,createSwipeBackManagerвключает нативный swipe-back.
Бери для всего остального: панели с back-стеком, deep links, модалки и popout’ы как URL. Если сомневаешься — это безопасный выбор по умолчанию.
Сравнение
Заголовок раздела «Сравнение»| base | vkui | router | |
|---|---|---|---|
| UI-кит | — | VKUI 8 | VKUI 8 |
| Навигация | вручную | Epic/Tabbar, useState |
Epic/Tabbar, история из URL |
| URL: панели, модалки, popout’ы | — | — | есть |
<VKBridgeConfigProvider> |
— | в main.tsx |
в main.tsx |
| Доп. зависимости | — | vkui, icons, vkui-bridge | router, tanstack, vkui, icons, vkui-bridge |
Скаффолд пресета
Заголовок раздела «Скаффолд пресета»Пресет задаётся флагом --preset, а в интерактивном режиме — выбором из списка (по умолчанию router):
npm create @vkma.dev/app my-app -- --preset basenpm create @vkma.dev/app my-app -- --preset vkuinpm create @vkma.dev/app my-app -- --preset router # и без флагаВсе формы вызова и остальные флаги — в CLI.