Фреймворки
ONREZA автоматически определяет фреймворк вашего проекта и настраивает оптимальные параметры сборки.
Матрица поддержки
Заголовок раздела «Матрица поддержки»STATIC публикует готовые файлы. COMPUTE запускает серверный процесс на выбранном Node.js, Bun, CPython или готовый Linux executable. Язык сборки и способ обслуживания выбираются отдельно: Flutter Web и Hugo после сборки работают как STATIC.
Языки и версии
Выбор линий сверён с официальным lifecycle на 2026-10-07. Новая версия upstream включается после проверки сборки и запуска.
| Язык / среда | Поддерживаемые линии | Закреплённая версия | Результат |
|---|---|---|---|
| JavaScript / TypeScript (Node.js) | 22 (LTS), 24 (LTS), 26 (Current) | Выбирается в настройках проекта | STATIC / PROCESS |
| JavaScript / TypeScript (Bun) | 1.x | 1.4.3 | STATIC / PROCESS |
| Python (CPython) | 3.12, 3.13, 3.14 | 3.12: 3.12.15, 3.13: 3.13.16, 3.14: 3.14.8 (default) | PROCESS; STATIC через явную сборку |
| Dart | 3.13 | 3.13.6 | PROCESS / EXECUTABLE |
| Flutter Web | 3.47 | 3.47.7 (Dart 3.13.5) | STATIC (JavaScript) |
| Go | 1.27 | 1.27.3 | PROCESS / EXECUTABLE |
Обновление версий
| Среда | Политика поддержки | Граница обновления |
|---|---|---|
| JavaScript / TypeScript (Node.js) | До трёх последних поддерживаемых LTS; отдельные квалифицированные Current | minor / patch внутри выбранного major; переход major требует квалификации |
| JavaScript / TypeScript (Bun) | Выбранный стабильный релиз 1.x; старые релизы отдельно не обещаются | minor / patch после квалификации; major требует изменения контракта |
| Python (CPython) | Три последних стабильных minor; prerelease исключены | patch внутри выбранного minor; переход minor явный, после квалификации |
| Dart | Последний квалифицированный стабильный SDK; старые minor без гарантии сопровождения | patch после квалификации; minor / major с повторной проверкой bundle и native hooks |
| Flutter Web | Выбранный стабильный Flutter; SDK Dart берётся из самого Flutter | Flutter, Git revision, engine и встроенный Dart проверяются вместе |
| Go | Upstream сопровождает две последние minor; установлен только указанный квалифицированный compiler | patch после квалификации; новая compiler minor проходит отдельную квалификацию |
Менеджеры зависимостей и сборщики
| Экосистема | Инструменты | Границы |
|---|---|---|
| Node.js | npm (из выбранного Node), pnpm 11.28.7, Yarn Classic 1.22.22, Yarn Modern 4.18.1 | Менеджер устанавливает зависимости; launcher Node/Bun выбирается отдельно |
| Bun | bun 1.4.3 | Lockfile Bun; installer и runtime соответствуют квалифицированной версии |
| Python | uv 0.13.4, Poetry 2.5.1 + export 1.10.1; requirements / PEP 621 / setup через uv | Production dependencies из authored inputs; locks не переписываются; сервер не добавляется скрыто |
| Dart / Flutter | pub из выбранного SDK | Locked pub; Dart server bundle целиком, Flutter release Web |
| Go | go 1.27.3 | Один module; readonly go.mod/go.sum, CGO=0, без автоматического скачивания другого compiler |
| Hugo | Hugo Standard 0.168.0 | STATIC; Extended, Sass/SCSS и внешние processors не входят в автоматический recipe |
Каталог пресетов
| Пресет | Язык сборки | Результат |
|---|---|---|
Python (python) | Python | PROCESS |
FastAPI (fastapi) | Python | PROCESS |
Starlette (starlette) | Python | PROCESS |
Django (django) | Python | PROCESS |
Flask (flask) | Python | PROCESS |
Dart HTTP (dart) | Dart | PROCESS |
Go HTTP (go) | Go | PROCESS |
Flutter Web (flutter) | Dart | STATIC |
Hugo (hugo) | Go | STATIC |
Blitz.js (blitzjs) | JavaScript / TypeScript | STATIC / PROCESS |
Keystone (keystone) | JavaScript / TypeScript | PROCESS |
Next.js (nextjs) | JavaScript / TypeScript | STATIC / PROCESS |
Vite (vite) | JavaScript / TypeScript | STATIC |
Create React App (cra) | JavaScript / TypeScript | STATIC |
Gatsby (gatsby) | JavaScript / TypeScript | STATIC |
Preact CLI (preact) | JavaScript / TypeScript | STATIC |
Nuxt.js (nuxt) | JavaScript / TypeScript | STATIC / PROCESS |
Vue CLI (vue) | JavaScript / TypeScript | STATIC |
SvelteKit (sveltekit) | JavaScript / TypeScript | STATIC / PROCESS |
Astro (astro) | JavaScript / TypeScript | STATIC / PROCESS |
Eleventy (eleventy) | JavaScript / TypeScript | STATIC |
Docusaurus (docusaurus) | JavaScript / TypeScript | STATIC |
VitePress (vitepress) | JavaScript / TypeScript | STATIC |
Hexo (hexo) | JavaScript / TypeScript | STATIC |
Parcel (parcel) | JavaScript / TypeScript | STATIC |
SolidStart (solidstart) | JavaScript / TypeScript | STATIC / PROCESS |
Qwik City (qwik) | JavaScript / TypeScript | STATIC / PROCESS |
Analog (analog) | JavaScript / TypeScript | STATIC / PROCESS |
React Router (react-router) | JavaScript / TypeScript | STATIC / PROCESS |
Remix (remix) | JavaScript / TypeScript | STATIC / PROCESS |
TanStack Start (tanstack-start) | JavaScript / TypeScript | STATIC / PROCESS |
Hydrogen (hydrogen) | JavaScript / TypeScript | STATIC / PROCESS |
Expo (expo) | JavaScript / TypeScript | STATIC |
Static HTML (static-html) | HTML | STATIC |
Hono (hono) | JavaScript / TypeScript | PROCESS |
Elysia (elysia) | JavaScript / TypeScript | PROCESS |
NestJS (nestjs) | JavaScript / TypeScript | PROCESS |
Fastify (fastify) | JavaScript / TypeScript | PROCESS |
AdonisJS (adonis) | JavaScript / TypeScript | PROCESS |
Express (express) | JavaScript / TypeScript | PROCESS |
Koa (koa) | JavaScript / TypeScript | PROCESS |
H3 (h3) | JavaScript / TypeScript | PROCESS |
Nitro (nitro) | JavaScript / TypeScript | PROCESS |
RedwoodJS (redwoodjs) | JavaScript / TypeScript | PROCESS |
Payload CMS (payload) | JavaScript / TypeScript | STATIC / PROCESS |
Strapi (strapi) | JavaScript / TypeScript | PROCESS |
Angular (angular) | JavaScript / TypeScript | STATIC |
Stencil (stencil) | JavaScript / TypeScript | STATIC |
Other (other) | JavaScript / TypeScript | STATIC / PROCESS |
Версию фреймворка задают зависимости вашего проекта. Пресет описывает известный способ сборки и форму output; он не обещает все версии, плагины и возможности фреймворка. Для JS/TS сохраняются существующие адаптеры. Для Python поддерживаются generic script/module, FastAPI/Starlette с Uvicorn, Django ASGI/WSGI и Flask с Gunicorn. Сервер должен быть объявлен в production dependencies.
Линии Node могут включаться как отдельно квалифицированный Current; переход в LTS определяется официальным расписанием Node.js. EOL-линии и prerelease новых minor Python не входят в окно поддержки. Закреплённые patch обновляются после проверки сборки и запуска, поэтому версия в таблице может отставать от только что выпущенного upstream релиза.
Poetry и uv — менеджеры зависимостей. Они не задают STATIC или COMPUTE: это зависит от результата сборки приложения. Для uv/Poetry сохраняйте lockfile в репозитории; requirements, PEP 621 и setup-проекты также поддерживаются. PDM, Pipenv, PyPy и free-threaded CPython не входят в автоматические recipes.
При неоднозначном entrypoint укажите намерение в onreza.toml:
[deploy]python_version = "3.13"application = "api.main:app"server = "uvicorn"deploy.python_version выбирает minor серверного процесса из таблицы, default отмечен в таблице. Если minor сервера не задан, Python-сервер наследует выбранный Python build minor; при другом compiler используется default. nrz config explain показывает этот выбор. Для обычного module используйте module; для script — entry. Пользовательские install/build команды сохраняют вашу ответственность за готовность зависимостей.
Явная точка запуска имеет приоритет над автодетектом. Единственный console script
из pyproject.toml запускается как объявленная callable, даже если проект использует
веб-фреймворк. Go/Dart helper и JavaScript tooling не меняют выбор Python при
объявленных console scripts; несколько scripts требуют явного выбора application.
Для автоматического выбора ASGI/WSGI нужны однозначные зависимости.
Локальные wheels, project paths и URL в выбранном requirements.txt также
считаются зависимостями. Без готового дерева зависимостей --skip-install
не позволяет их пропустить. Такие пути сами по себе не определяют framework.
Пустого каталога зависимостей недостаточно для --skip-install: нужны файлы
подготовленного дерева, которые сохранятся в опубликованном приложении.
Если все зависимости исключены известными PEP 508 markers для Linux x86_64
и выбранной версии Python, пустое дерево допустимо. Непрозрачные inputs и
markers с неизвестными значениями сохраняют требование подготовленных зависимостей.
Для Poetry также учитываются буквальный platform и стабильные Python-версии
с ==, !=, <, <=, > и >=. Диапазоны с ^, ~, wildcards, unions
и другие неизвестные selectors требуют подготовленных зависимостей;
их полную семантику обрабатывает установщик.
--skip-install и --skip-build не отключают проверку платформы публикуемых
Python COMPUTE файлов, включая готовые зависимости и дополнительные Python-слои.
Mach-O, PE и несовместимые ELF отклоняются; совместимый Linux x86_64 prebuilt
output остаётся допустимым. Проверка формата и архитектуры не доказывает полную
ABI-совместимость или импортируемость packages. .o и .a могут оставаться
assets; платформа членов архивов этой проверкой не подтверждается.
При условных зависимостях, включениях других requirements-файлов или зависимостях,
которые формирует package backend (setup.py или dynamic dependencies в
pyproject.toml), укажите
application и server явно; установщик обработает зависимости по вашим файлам.
Для script/module используйте entry/module; для callable без ASGI/WSGI
выберите project.framework = "python" и задайте deploy.application.
Для MkDocs/Sphinx выберите Python для сборки и STATIC для публикации:
[build]toolchain = "python"python_version = "3.13"command = "mkdocs build"output_directory = "site"
[deploy]compute = "static"STATIC не требует точки запуска сервера. Укажите зависимости сборщика в проекте; для Sphinx задайте свою команду и каталог результата. Отдельного автоматического пресета для этих генераторов пока нет.
Этот пример задаёт команду и output для локального CLI. Для Git-деплоя укажите
mkdocs build и site в настройках сборки проекта ONREZA: облачный Builder
использует зафиксированные настройки проекта. Команда и output из onreza.toml
не импортируются в эти настройки автоматически; выбор toolchain и serving
intent из файла сохраняется.
Версия сборки задаётся в build.python_version, версия сервера — в
deploy.python_version. Для обычного Python-сервера они совпадают, если вы не
выбрали их отдельно. requires-python проверяется относительно интерпретатора
сборки и не выбирает другую версию автоматически. Разные версии сборки и сервера
поддерживаются для code-only output. При наличии серверных зависимостей выберите
одинаковый Python minor: первая итерация не устанавливает отдельное дерево
зависимостей для второго интерпретатора.
Для локальной Python-сборки с нативными Linux-зависимостями нужен Linux x86_64
с glibc не ниже 2.39. На macOS, Windows, musl, старой или неизвестной glibc
используйте Git-деплой
через Builder. Pure-Python зависимости допускаются.
Автоматическая локальная установка использует wheels без editable installations
и source builds зависимостей. Для editable project dependency подготовьте wheel
или используйте Git/Builder.
После локальной пользовательской install-команды нативные dependencies для
Python COMPUTE требуют Builder независимо от ОС хоста: произвольная команда
не подтверждает target ABI. Правило охватывает дополнительные Python COMPUTE
слои; packages только для STATIC-сборки не публикуются как серверные зависимости.
Нативные расширения самого Python-приложения собирайте через Builder; это проверяется и для файлов, созданных
вашей локальной build-командой. --skip-build публикует
готовый output и не запускает локальный Python для сборки.
Django migrations и collectstatic задаются вами; платформа не запускает миграции автоматически.
Dart, Flutter и Go
Заголовок раздела «Dart, Flutter и Go»Flutter поддерживается для release Web-сборки в JavaScript (build/web); mobile, desktop и Wasm-сборки не входят в этот recipe. Серверный Dart собирается в executable вместе с native hooks и assets. Библиотеки, указанные executable через DT_NEEDED, должны быть доступны в поддерживаемом runtime либо включены в тот же слой артефакта; неразрешённая dependency прерывает публикацию. Необязательный отсутствующий каталог поиска допустим внутри артефакта, если все нужные библиотеки найдены. Для Go поддерживается один module, CGO=0 и неизменяемые go.mod/go.sum; автоматическое скачивание другого compiler отключено.
Стандартные Go, Dart, Flutter Web и Hugo recipes собирают в фиксированные каталоги.
Если задаёте другой output_directory, укажите собственную build.command;
несовпадение обнаруживается до установки и сборки. Для публикации уже готового
каталога используйте --skip-build.
Автодетект Go выбирает один main package в корне или cmd/*, подходящий для
Linux amd64 и CGO=0. Windows-only и другие исключённые build constraints
файлы не создают дополнительный entrypoint.
Hugo поддерживается как Standard generator. Extended, Sass/SCSS и внешние processors требуют отдельного подтверждённого сценария. Rust пока не входит в автоматический каталог поддержки.
Автодетект Hugo использует hugo.toml, hugo.yaml или hugo.json в корне либо
в config/_default. Для config.toml, config.yaml или config.json укажите
framework = "hugo" в [project] файла onreza.toml. Сайт может содержать
вложенные страницы без корневого index.html.
Для Hugo modules зафиксируйте файлы зависимостей (go.mod, go.sum,
hugo.direct.sum, если они нужны проекту). Если сборке пришлось разрешить
новые зависимости или изменить эти файлы, деплой остановится без изменения
исходников. Соберите сайт локально, проверьте и закоммитьте полученные файлы
до деплоя. Go workspaces и источники модулей вне проекта требуют вашей команды
сборки. Обычный сайт без модулей не требует lockfile.
Автодетект
Заголовок раздела «Автодетект»При создании проекта ONREZA анализирует:
- package.json — зависимости и скрипты
- Конфигурационные файлы —
next.config.js,vite.config.ts, и т.д. - Другие экосистемы — Python manifests и locks,
pubspec.yaml,go.mod, конфигурацию Hugo - Структуру проекта — папки
src/,pages/,app/,bin/иcmd/
На основе этого анализа определяется фреймворк и настройки по умолчанию.
Поддерживаемые фреймворки
Заголовок раздела «Поддерживаемые фреймворки»| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | .next (SSR) или out (static) |
| Install Command | npm install |
Рантайм: COMPUTE — серверный процесс на выбранном совместимом Node.js или Bun.
Особенности:
- Поддержка App Router и Pages Router
- Автодетект static export (
output: 'export'в конфиге) - Версия Node.js выбирается из матрицы выше
Environment Variables:
Переменные окружения задаются в Settings → Environment Variables (подробнее):
# Серверные переменные (доступны только на сервере)DATABASE_URL=postgres://user:pass@host:5432/dbAPI_SECRET=your-secret-key
# Клиентские переменные (доступны в браузере)NEXT_PUBLIC_API_URL=https://api.example.comNEXT_PUBLIC_SITE_URL=https://example.comДоступ к серверным переменным в Compute:
// В API route или Server Componentconst dbUrl = process.env.DATABASE_URL;| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | dist (или из vite.config) |
| Install Command | npm install |
Особенности:
- Поддержка React, Vue, Svelte, Solid
- Быстрая сборка благодаря ESBuild
- HMR для разработки
- Автоопределение
build.outDirиз конфигурации
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | build |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | public |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | build |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | .output |
| Install Command | npm install |
SSR через Nitro → COMPUTE runtime. Поддержка ISR через routeRules.
| Настройка | Значение |
|---|---|
| Build Command | npm run generate |
| Output Directory | .output/public |
| Install Command | npm install |
Pre-rendered HTML → CDN. Используй когда контент редко меняется.
Особенности:
- Поддержка Nuxt 3, auto-imports компонентов
- ISR через
routeRules:{ '/blog/**': { isr: 3600 } }
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | dist |
| Install Command | npm install |
SvelteKit поддерживается в двух режимах. Выберите адаптер по поведению приложения, а не только по имени фреймворка.
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | build |
| Install Command | npm install |
| Entrypoint | index.js (определяется автоматически) |
import adapter from '@sveltejs/adapter-node';
export default { kit: { adapter: adapter() }};Этот режим создаёт серверный процесс: CLI обозначает его как PROCESS, а в
Build Output Manifest он представлен слоем COMPUTE. Маршруты +server,
server load-функции и hooks.server требуют этого режима.
Для запуска серверного процесса runtime-артефакт включает build output и установленные Node.js-зависимости. Если после сборки dev dependencies не нужны, для npm можно использовать Build Command:
npm run build && npm prune --omit=devДля pnpm, Yarn или Bun используйте эквивалентную команду своего package manager. Состав артефакта виден в build log; рекомендации при превышении лимита файлов приведены в Build Settings.
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | build |
| Install Command | npm install |
Используйте этот режим, когда все необходимые страницы можно сгенерировать во время сборки и серверный runtime не нужен.
import adapter from '@sveltejs/adapter-static';
export default { kit: { adapter: adapter() }};Автодетект проверяет адаптер и server-only routes. adapter-static выбирает
STATIC, пока проект остаётся совместимым со статической генерацией; наличие
+server, +page.server, +layout.server или hooks.server переключает
предложение на PROCESS. Для SSR рекомендуется явно установить и настроить
@sveltejs/adapter-node.
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | dist |
| Install Command | npm install |
Статические генераторы
Заголовок раздела «Статические генераторы»| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | dist |
| Install Command | npm install |
Особенности:
- Island architecture
- Поддержка React, Vue, Svelte компонентов
- Оптимизация изображений
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | build |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | _site |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | .vitepress/dist |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | public |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | dist |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | www |
| Install Command | npm install |
| Настройка | Значение |
|---|---|
| Build Command | npm run build |
| Output Directory | dist |
| Install Command | npm install |
Ручная настройка
Заголовок раздела «Ручная настройка»Если автодетект не сработал или вам нужны особые настройки:
Build Command
Заголовок раздела «Build Command»Команда для сборки проекта. Примеры:
npm run buildyarn buildpnpm buildbun run buildnpx next buildOutput Directory
Заголовок раздела «Output Directory»Папка с результатом сборки. Зависит от фреймворка:
| Фреймворк | Output Directory |
|---|---|
| Next.js (static) | out |
| Vite | dist |
| CRA | build |
| Nuxt | .output/public |
| Astro | dist |
Install Command
Заголовок раздела «Install Command»Команда для установки зависимостей:
| Package Manager | Команда |
|---|---|
| npm | npm install или npm ci |
| yarn | yarn install |
| pnpm | pnpm install |
| bun | bun install |
Node Version
Заголовок раздела «Node Version»Поддерживаемые линии и политика обновления приведены в матрице выше.
Версию можно изменить в Настройки → Сборка и развертывание → Версия Node.js.
Monorepo поддержка
Заголовок раздела «Monorepo поддержка»Для проектов в монорепозитории:
- Укажите Root Directory — путь к папке с проектом
- Build Command будет выполняться относительно этой папки
- Output Directory также относительно Root Directory
monorepo/├── apps/│ ├── web/ ← Root Directory: apps/web│ │ ├── package.json│ │ └── dist/ ← Output: dist (относительно root)│ └── admin/└── package.jsonTroubleshooting
Заголовок раздела «Troubleshooting»“Build command failed”
Заголовок раздела «“Build command failed”»- Проверьте что команда работает локально
- Убедитесь что все зависимости в
package.json - Проверьте Node версию
“Output directory is empty”
Заголовок раздела «“Output directory is empty”»- Проверьте что Build Command выполняется успешно
- Убедитесь что Output Directory указан правильно
- Проверьте конфигурацию фреймворка
“Cannot find module”
Заголовок раздела «“Cannot find module”»- Убедитесь что Install Command выполнился
- Проверьте
package.jsonна наличие зависимости - Попробуйте
npm ciвместоnpm install
“Startup timeout” для серверных приложений (COMPUTE)
Заголовок раздела «“Startup timeout” для серверных приложений (COMPUTE)»Если деплой с рантаймом COMPUTE зависает и показывает ошибку startup timeout:
- Проверьте порт — приложение должно слушать на
process.env.PORT, а не на фиксированном порте (3000, 8080 и т.д.). Платформа назначает порт динамически.
// ✅ Правильноconst PORT = parseInt(process.env.PORT || "3000");app.listen(PORT, "0.0.0.0");
// ❌ Неправильноapp.listen(3000);-
Не используйте dev-сервер в production —
vite dev,next dev,webpack-dev-serverне предназначены для продакшена. Соберите приложение (npm run build) и запускайте production-сервер. -
Слушайте на
0.0.0.0— не на127.0.0.1илиlocalhost. Платформа проверяет доступность сервера извне контейнера.
См. также
Заголовок раздела «См. также»- Создание проекта — пошаговое руководство
- Build Settings — расширенные настройки
- Environment Variables — переменные окружения