A Veloz usa Nixpacks para detectar seu framework e linguagem automaticamente. Não precisa configurar nada — basta rodar veloz deploy.
Se o seu projeto tem requisitos complexos de build, você pode usar um nixpacks.toml para personalizar ou até um Dockerfile próprio — veja Nixpacks vs Dockerfile.
Linguagens suportadas
A Veloz suporta 25+ linguagens via Nixpacks. Cada uma é detectada automaticamente pelo arquivo de projeto (package.json, go.mod, Cargo.toml, etc).
Tier 1 — Detecção automática completa
| Linguagem | Arquivo detectado | Build | Start |
|---|---|---|---|
| Node.js | package.json |
npm run build |
npm start |
| Python | requirements.txt, pyproject.toml, Pipfile |
pip install |
python main.py / gunicorn |
| Go | go.mod |
go build |
binário compilado |
| Rust | Cargo.toml |
cargo build --release |
binário compilado |
| Java | pom.xml (Maven) / build.gradle (Gradle) |
mvn package / gradle build |
java -jar |
| Ruby | Gemfile |
bundle install |
rails server / ruby app.rb |
| PHP | composer.json |
composer install |
php -S 0.0.0.0:80 |
| Elixir | mix.exs |
mix release |
binário compilado |
| .NET / C# | *.csproj / *.sln |
dotnet publish |
dotnet run |
| Deno | deno.json / deno.jsonc |
— | deno run |
| Static Files | index.html (sem outro projeto) |
— | Caddy |
Tier 2 — Suportado via Nixpacks
| Linguagem | Arquivo detectado |
|---|---|
| F# | *.fsproj |
| Dart / Flutter | pubspec.yaml |
| Scala | build.sbt |
| Haskell | stack.yaml / *.cabal |
| Crystal | shard.yml |
| Clojure | project.clj / deps.edn |
| Zig | build.zig |
| Swift | Package.swift |
| Gleam | gleam.toml |
| Scheme | arquivos .scm |
| COBOL | arquivos .cob / .cbl |
Tier 3 — Via nixpacks.toml
Qualquer linguagem pode ser configurada manualmente com um nixpacks.toml na raiz do projeto:
[phases.setup]
nixPkgs = ["lua5_4", "nodejs_22"]
[phases.build]
cmds = ["make build"]
[start]
cmd = "lua main.lua"Frameworks Node.js
Aplicações Web (SSR)
Frameworks que rodam um servidor em produção.
| Framework | Dependência detectada | Build | Start | Porta |
|---|---|---|---|---|
| Next.js | next |
npm run build |
npm start |
3000 |
| Nuxt | nuxt |
npm run build |
npm start |
3000 |
| Remix | @remix-run/node |
npm run build |
npm start |
3000 |
| SvelteKit | @sveltejs/kit |
npm run build |
npm start |
3000 |
| NestJS | @nestjs/core |
npm run build |
npm run start:prod |
3000 |
| Express | express |
— | node index.js |
3000 |
| Fastify | fastify |
— | node index.js |
3000 |
| Hono | hono |
— | node index.js |
3000 |
Sites Estáticos (SPA / SSG)
Frameworks que geram arquivos estáticos no build. Servidos automaticamente via Caddy.
| Framework | Dependência detectada | Build | Output |
|---|---|---|---|
| Vite + React | vite + react |
npm run build |
dist |
| Vite + Vue | vite + vue |
npm run build |
dist |
| Vite + Svelte | vite + svelte |
npm run build |
dist |
| Vite | vite |
npm run build |
dist |
| Astro | astro |
npm run build |
dist |
| Gatsby | gatsby |
npm run build |
public |
| Create React App | react-scripts |
npm run build |
build |
| Angular | @angular/core |
npm run build |
dist |
Node.js genérico
Se nenhum framework específico for detectado mas existirem scripts build ou start no package.json, a Veloz trata como um projeto Node.js genérico:
- Com script
start→ Serviço Web (porta 3000) - Sem script
start→ Site Estático (outputdist)
Frameworks Python
| Framework | Detecção | Start padrão |
|---|---|---|
| Django | django em requirements |
gunicorn project.wsgi |
| Flask | flask em requirements |
gunicorn app:app |
| FastAPI | fastapi em requirements |
uvicorn main:app --host 0.0.0.0 --port 3000 |
Frameworks PHP
| Framework | Detecção | Start padrão |
|---|---|---|
| Laravel | laravel/framework |
php artisan serve --port 3000 |
| Symfony | symfony/framework-bundle |
php -S 0.0.0.0:3000 -t public |
| PHP puro | composer.json |
php -S 0.0.0.0:3000 -t public |
Frameworks Ruby
| Framework | Detecção | Start padrão |
|---|---|---|
| Rails | rails gem |
rails server -p 3000 |
| Sinatra | sinatra gem |
ruby app.rb |
Frameworks Elixir
| Framework | Detecção | Start padrão |
|---|---|---|
| Phoenix | phoenix em mix.exs |
Mix release binary |
| Elixir | mix.exs |
Mix release binary |
Como funciona a detecção
- Nixpacks analisa os arquivos do projeto (package.json, go.mod, Cargo.toml, etc)
- Identifica a linguagem e framework automaticamente
- Gera um Dockerfile otimizado com as dependências corretas
- Build e start commands são configurados automaticamente
Ordem de prioridade (Node.js)
Se seu projeto tem múltiplas dependências (ex: next + express), a Veloz usa o primeiro match na lista. Next.js tem prioridade sobre Express.
Package managers
A Veloz detecta o package manager pelo lockfile:
| Arquivo | Package Manager |
|---|---|
bun.lockb ou bun.lock |
Bun |
pnpm-lock.yaml |
pnpm |
yarn.lock |
Yarn |
package-lock.json |
npm |
Os comandos de build e start são adaptados automaticamente:
# npm
npm run build && npm start
# pnpm
pnpm run build && pnpm start
# yarn
yarn build && yarn start
# bun
bun run build && bun run startCustomizando
Se a detecção automática não funcionar para o seu caso, você pode definir os comandos manualmente:
Via CLI
veloz config set --build-command "npm run build:custom" --start-command "node server.js" --port 8080Via veloz.json
{
"services": {
".": {
"build": {
"command": "npm run build:custom"
},
"runtime": {
"command": "node server.js",
"port": 8080
}
}
}
}Via nixpacks.toml
Para linguagens que não são Node.js, ou configurações avançadas:
[phases.setup]
nixPkgs = ["python311", "poetry"]
[phases.build]
cmds = ["poetry install", "python manage.py collectstatic"]
[start]
cmd = "gunicorn myapp.wsgi:application --bind 0.0.0.0:3000"No primeiro deploy
Se você recusar a confirmação automática, a CLI permite editar todos os campos:
? Confirmar e fazer deploy? (Y/n) n
Build command: (npm run build) npm run build:custom
Start command: (npm start) node server.js
Port: (3000) 8080
Variáveis de ambiente
A Veloz detecta variáveis de ambiente automaticamente a partir de:
.env.example.env.sample.env.local.example.env
No primeiro deploy, a CLI lista as variáveis encontradas e pergunta se você quer preenchê-las. As variáveis também são injetadas automaticamente no Dockerfile durante o build.
Dependências do sistema
Alguns frameworks e bibliotecas precisam de pacotes do sistema para funcionar. Use aptPackages no veloz.json:
"build": {
"aptPackages": ["ffmpeg", "libvips-dev"]
}Ou via nixpacks.toml:
[phases.setup]
nixPkgs = ["ffmpeg", "imagemagick"]
aptPkgs = ["libvips-dev"]Casos comuns:
| Biblioteca | Pacotes necessários |
|---|---|
| sharp | libvips-dev |
| node-canvas | libcairo2-dev, libpango1.0-dev, libjpeg-dev, libgif-dev, librsvg2-dev |
| Puppeteer | chromium-browser, libnss3, libgbm1, fonts-noto |
| Playwright | libnss3, libgbm1, libpango1.0-0, fonts-noto |
| fluent-ffmpeg | ffmpeg |
| pg-native | libpq-dev |
| better-sqlite3 | libsqlite3-dev |
Para a lista completa e exemplos detalhados, veja Pacotes do Sistema.
Próximos passos
- Primeiro Deploy — Faça seu primeiro deploy
- veloz.json — Referência de configuração
- Pacotes do Sistema — Instalar dependências nativas
- Monorepo — Deploy de múltiplos apps