Supported Frameworks

Temps auto-detects your framework by inspecting files in your repository and applies the appropriate build configuration. This page lists every supported framework with its detection signals and build behavior.


How framework detection works

When you create a project or push code, Temps scans the repository root (or the configured app directory) for known files. The first matching pattern determines the framework preset.

Detection priority:

  1. Dockerfile — If a Dockerfile exists, Temps uses a direct Docker build (highest priority)
  2. Framework-specific config filesnext.config.js, vite.config.ts, nuxt.config.ts, etc.
  3. Language-specific filespackage.json, requirements.txt, go.mod, Cargo.toml, etc.
  4. Static fallback — If only index.html is present, Temps serves it as a static site

All non-Dockerfile builds use Nixpacks — a build system that generates a Docker image from your source code without requiring a Dockerfile.


JavaScript and TypeScript

FrameworkDetection signalBuild commandDefault port
Next.jsnext.config.js, next.config.ts, or next.config.mjsnpm run build3000
Vite (React, Vue, Svelte)vite.config.ts or vite.config.jsnpm run buildStatic
Remixremix.config.js or remix.config.tsnpm run build3000
Astroastro.config.mjs or astro.config.tsnpm run buildStatic or 4321
SvelteKitsvelte.config.jsnpm run build3000
Nuxtnuxt.config.ts or nuxt.config.jsnpm run build3000
Expresspackage.json with express dependencynpm start3000
Fastifypackage.json with fastify dependencynpm start3000
Honopackage.json with hono dependencynpm start3000
Node.js (generic)package.json with start scriptnpm start3000
Create React Apppackage.json with react-scriptsnpm run buildStatic

Package manager detection

Nixpacks detects your package manager from lockfiles:

LockfilePackage manager
bun.lockb or bun.lockBun
pnpm-lock.yamlpnpm
yarn.lockYarn
package-lock.jsonnpm

Node.js version

Nixpacks reads the Node.js version from (in order):

  1. .node-version file
  2. engines.node in package.json
  3. Default: latest LTS

Python

FrameworkDetection signalStart commandDefault port
Djangomanage.py + django in requirementsgunicorn8000
Flaskflask in requirementsgunicorn5000
FastAPIfastapi in requirementsuvicorn8000
Generic Pythonrequirements.txt or pyproject.tomlpython main.py8000

Python version

Detected from (in order):

  1. .python-version file
  2. [tool.poetry.dependencies] in pyproject.toml
  3. Default: latest stable

Dependency files

FileTool
requirements.txtpip
PipfilePipenv
pyproject.tomlPoetry or pip
setup.pypip

Go

Detection signalBuild commandDefault port
go.modgo build -o app8080

Go version is read from go.mod. Nixpacks compiles to a static binary and runs it.


Rust

Detection signalBuild commandDefault port
Cargo.tomlcargo build --release8080

Rust toolchain version is read from rust-toolchain.toml or rust-toolchain. Nixpacks uses a multi-stage build to keep the final image small.


PHP

FrameworkDetection signalDefault port
Laravelartisan file + laravel/framework in composer.json8000
Generic PHPcomposer.json or index.php8080

PHP version is read from composer.json require.php field.


Ruby

FrameworkDetection signalDefault port
RailsGemfile with rails gem3000
SinatraGemfile with sinatra gem4567
Generic RubyGemfile3000

Ruby version is read from .ruby-version or Gemfile.


Docker

If a Dockerfile is present in the repository root (or the configured app directory), Temps uses it directly instead of Nixpacks.

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

The EXPOSE directive determines the port Temps routes traffic to. If not specified, Temps uses the environment or project exposed_port setting (default: 3000).

Multi-stage builds

Multi-stage Dockerfiles work as expected:

FROM node:20 AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/server.js"]

Static sites

If your repository contains only static files (HTML, CSS, JavaScript) with no framework configuration:

Detection signalBehavior
index.html in root, no package.jsonServed directly by Temps
package.json with build output (dist/, build/, out/)Built with Nixpacks, output served as static

Static sites are served by Temps' built-in web server. No Docker container is needed.


Override detection

If Temps detects the wrong framework, override it in project settings:

  1. Open your project in the dashboard
  2. Go to Settings
  3. Change the Framework Preset to the correct one
  4. Optionally set a custom Build Command and Start Command

You can also set a custom install command, build command, or app directory for monorepos.

Was this page helpful?