Перейти к содержимому

Фреймворки

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.x1.4.3STATIC / PROCESS
Python (CPython)3.12, 3.13, 3.143.12: 3.12.15, 3.13: 3.13.16, 3.14: 3.14.8 (default)PROCESS; STATIC через явную сборку
Dart3.133.13.6PROCESS / EXECUTABLE
Flutter Web3.473.47.7 (Dart 3.13.5)STATIC (JavaScript)
Go1.271.27.3PROCESS / EXECUTABLE

Обновление версий

СредаПолитика поддержкиГраница обновления
JavaScript / TypeScript (Node.js)До трёх последних поддерживаемых LTS; отдельные квалифицированные Currentminor / 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 берётся из самого FlutterFlutter, Git revision, engine и встроенный Dart проверяются вместе
GoUpstream сопровождает две последние minor; установлен только указанный квалифицированный compilerpatch после квалификации; новая compiler minor проходит отдельную квалификацию

Менеджеры зависимостей и сборщики

ЭкосистемаИнструментыГраницы
Node.jsnpm (из выбранного Node), pnpm 11.28.7, Yarn Classic 1.22.22, Yarn Modern 4.18.1Менеджер устанавливает зависимости; launcher Node/Bun выбирается отдельно
Bunbun 1.4.3Lockfile Bun; installer и runtime соответствуют квалифицированной версии
Pythonuv 0.13.4, Poetry 2.5.1 + export 1.10.1; requirements / PEP 621 / setup через uvProduction dependencies из authored inputs; locks не переписываются; сервер не добавляется скрыто
Dart / Flutterpub из выбранного SDKLocked pub; Dart server bundle целиком, Flutter release Web
Gogo 1.27.3Один module; readonly go.mod/go.sum, CGO=0, без автоматического скачивания другого compiler
HugoHugo Standard 0.168.0STATIC; Extended, Sass/SCSS и внешние processors не входят в автоматический recipe

Каталог пресетов

ПресетЯзык сборкиРезультат
Python (python)PythonPROCESS
FastAPI (fastapi)PythonPROCESS
Starlette (starlette)PythonPROCESS
Django (django)PythonPROCESS
Flask (flask)PythonPROCESS
Dart HTTP (dart)DartPROCESS
Go HTTP (go)GoPROCESS
Flutter Web (flutter)DartSTATIC
Hugo (hugo)GoSTATIC
Blitz.js (blitzjs)JavaScript / TypeScriptSTATIC / PROCESS
Keystone (keystone)JavaScript / TypeScriptPROCESS
Next.js (nextjs)JavaScript / TypeScriptSTATIC / PROCESS
Vite (vite)JavaScript / TypeScriptSTATIC
Create React App (cra)JavaScript / TypeScriptSTATIC
Gatsby (gatsby)JavaScript / TypeScriptSTATIC
Preact CLI (preact)JavaScript / TypeScriptSTATIC
Nuxt.js (nuxt)JavaScript / TypeScriptSTATIC / PROCESS
Vue CLI (vue)JavaScript / TypeScriptSTATIC
SvelteKit (sveltekit)JavaScript / TypeScriptSTATIC / PROCESS
Astro (astro)JavaScript / TypeScriptSTATIC / PROCESS
Eleventy (eleventy)JavaScript / TypeScriptSTATIC
Docusaurus (docusaurus)JavaScript / TypeScriptSTATIC
VitePress (vitepress)JavaScript / TypeScriptSTATIC
Hexo (hexo)JavaScript / TypeScriptSTATIC
Parcel (parcel)JavaScript / TypeScriptSTATIC
SolidStart (solidstart)JavaScript / TypeScriptSTATIC / PROCESS
Qwik City (qwik)JavaScript / TypeScriptSTATIC / PROCESS
Analog (analog)JavaScript / TypeScriptSTATIC / PROCESS
React Router (react-router)JavaScript / TypeScriptSTATIC / PROCESS
Remix (remix)JavaScript / TypeScriptSTATIC / PROCESS
TanStack Start (tanstack-start)JavaScript / TypeScriptSTATIC / PROCESS
Hydrogen (hydrogen)JavaScript / TypeScriptSTATIC / PROCESS
Expo (expo)JavaScript / TypeScriptSTATIC
Static HTML (static-html)HTMLSTATIC
Hono (hono)JavaScript / TypeScriptPROCESS
Elysia (elysia)JavaScript / TypeScriptPROCESS
NestJS (nestjs)JavaScript / TypeScriptPROCESS
Fastify (fastify)JavaScript / TypeScriptPROCESS
AdonisJS (adonis)JavaScript / TypeScriptPROCESS
Express (express)JavaScript / TypeScriptPROCESS
Koa (koa)JavaScript / TypeScriptPROCESS
H3 (h3)JavaScript / TypeScriptPROCESS
Nitro (nitro)JavaScript / TypeScriptPROCESS
RedwoodJS (redwoodjs)JavaScript / TypeScriptPROCESS
Payload CMS (payload)JavaScript / TypeScriptSTATIC / PROCESS
Strapi (strapi)JavaScript / TypeScriptPROCESS
Angular (angular)JavaScript / TypeScriptSTATIC
Stencil (stencil)JavaScript / TypeScriptSTATIC
Other (other)JavaScript / TypeScriptSTATIC / 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 задаются вами; платформа не запускает миграции автоматически.

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 анализирует:

  1. package.json — зависимости и скрипты
  2. Конфигурационные файлы — next.config.js, vite.config.ts, и т.д.
  3. Другие экосистемы — Python manifests и locks, pubspec.yaml, go.mod, конфигурацию Hugo
  4. Структуру проекта — папки 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/db
API_SECRET=your-secret-key
# Клиентские переменные (доступны в браузере)
NEXT_PUBLIC_API_URL=https://api.example.com
NEXT_PUBLIC_SITE_URL=https://example.com

Доступ к серверным переменным в Compute:

// В API route или Server Component
const dbUrl = process.env.DATABASE_URL;
Настройка Значение
Build Command npm run build
Output Directory .output
Install Command npm install

SSR через Nitro → COMPUTE runtime. Поддержка ISR через routeRules.

Особенности:

  • Поддержка Nuxt 3, auto-imports компонентов
  • ISR через routeRules: { '/blog/**': { isr: 3600 } }

SvelteKit поддерживается в двух режимах. Выберите адаптер по поведению приложения, а не только по имени фреймворка.

Настройка Значение
Build Command npm run build
Output Directory build
Install Command npm install
Entrypoint index.js (определяется автоматически)
svelte.config.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.

Автодетект проверяет адаптер и 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

Особенности:

  • Island architecture
  • Поддержка React, Vue, Svelte компонентов
  • Оптимизация изображений
Настройка Значение
Build Command npm run build
Output Directory dist
Install Command npm install

Если автодетект не сработал или вам нужны особые настройки:

Команда для сборки проекта. Примеры:

Окно терминала
npm run build
yarn build
pnpm build
bun run build
npx next build

Папка с результатом сборки. Зависит от фреймворка:

Фреймворк Output Directory
Next.js (static) out
Vite dist
CRA build
Nuxt .output/public
Astro dist

Команда для установки зависимостей:

Package Manager Команда
npm npm install или npm ci
yarn yarn install
pnpm pnpm install
bun bun install

Поддерживаемые линии и политика обновления приведены в матрице выше.

Версию можно изменить в Настройки → Сборка и развертывание → Версия Node.js.

Для проектов в монорепозитории:

  1. Укажите Root Directory — путь к папке с проектом
  2. Build Command будет выполняться относительно этой папки
  3. Output Directory также относительно Root Directory
monorepo/
├── apps/
│ ├── web/ ← Root Directory: apps/web
│ │ ├── package.json
│ │ └── dist/ ← Output: dist (относительно root)
│ └── admin/
└── package.json
  1. Проверьте что команда работает локально
  2. Убедитесь что все зависимости в package.json
  3. Проверьте Node версию
  1. Проверьте что Build Command выполняется успешно
  2. Убедитесь что Output Directory указан правильно
  3. Проверьте конфигурацию фреймворка
  1. Убедитесь что Install Command выполнился
  2. Проверьте package.json на наличие зависимости
  3. Попробуйте npm ci вместо npm install

“Startup timeout” для серверных приложений (COMPUTE)

Заголовок раздела «“Startup timeout” для серверных приложений (COMPUTE)»

Если деплой с рантаймом COMPUTE зависает и показывает ошибку startup timeout:

  1. Проверьте порт — приложение должно слушать на process.env.PORT, а не на фиксированном порте (3000, 8080 и т.д.). Платформа назначает порт динамически.
// ✅ Правильно
const PORT = parseInt(process.env.PORT || "3000");
app.listen(PORT, "0.0.0.0");
// ❌ Неправильно
app.listen(3000);
  1. Не используйте dev-сервер в production — vite dev, next dev, webpack-dev-server не предназначены для продакшена. Соберите приложение (npm run build) и запускайте production-сервер.

  2. Слушайте на 0.0.0.0 — не на 127.0.0.1 или localhost. Платформа проверяет доступность сервера извне контейнера.