Supported Languages, Frameworks & Build Methods

Everything Temps can build and deploy, at a glance. Temps supports 20+ languages via Nixpacks, first-class presets for popular frameworks, Dockerfile builds, pre-built Docker images, Docker Compose stacks, and static file deployments.


Build methods

Temps offers four ways to get your application running:

  • Name
    Git push (auto-detected)
    Type
    Default
    Description

    Push code to a connected Git repository. Temps detects your language and framework, generates a Dockerfile, builds a container image, and deploys it. This is the most common flow and requires no configuration.

  • Name
    Dockerfile
    Type
    Full control
    Description

    Add a Dockerfile to your repository root. Temps uses it directly instead of auto-detection. Supports multi-stage builds, BuildKit caching (--mount=type=cache), custom build arguments, and custom Dockerfile paths for monorepos.

  • Name
    Docker image
    Type
    Pre-built
    Description

    Deploy a pre-built image from Docker Hub, GitHub Container Registry, or any OCI registry. You can also upload an image directly via docker save. No build step — Temps pulls the image and starts a container.

  • Name
    Static files
    Type
    No runtime
    Description

    Upload a .tar.gz or .zip bundle of pre-built static files. Temps serves them directly from the proxy — no container runs at runtime. Zero memory and CPU usage after deployment.

For details on each method, see Docker Containers and the per-framework deployment guides.


Framework presets

Presets are framework-specific build configurations. When Temps detects a framework, it selects the appropriate preset to generate an optimized Dockerfile. You can also select a preset manually when creating a project.

Not every framework below has a dedicated, selectable preset slug. Rows marked "auto-detected (no preset slug)" have no registered preset provider — passing that framework's name as a preset value when creating or updating a project fails immediately. Those frameworks still deploy successfully today, but only through the generic Nixpacks/autopack auto-detect path, using that path's own port and build behavior rather than the framework-specific preset system.

JavaScript / TypeScript

FrameworkPresetTypeRuntime / preset metadataDetection
Next.jsnextjsServer (SSR)3000next.config.js, .mjs, .ts
ViteviteStatic80 / 5173vite.config.js, .ts
Create React Appreact-appStatic3000react-scripts in package.json
RsbuildrsbuildStatic3000rsbuild.config.ts
DocusaurusdocusaurusStatic3000docusaurus.config.js, .ts
AstroastroStatic / Server4321astro.config.mjs
Nuxtauto-detected (no preset slug)Server (SSR)3000nuxt.config.ts
Remixauto-detected (no preset slug)Server3000Remix config
SvelteKitauto-detected (no preset slug)Server5173SvelteKit config
SolidStartauto-detected (no preset slug)Server3000SolidStart config
Angularauto-detected (no preset slug)Static80 / 4200angular.json
Vueauto-detected (no preset slug)Static3000 / 8080vue.config.js
Node.jsauto-detected (no preset slug)Server3000package.json (generic)

Next.js, Vite, Create React App, Rsbuild, Docusaurus, and Astro have a registered preset provider with first-class Dockerfile generation, multi-stage builds, and security hardening. Nuxt, Remix, SvelteKit, SolidStart, Angular, Vue, and Node.js have no dedicated preset slug today — see the note above.

Where two ports are shown, the first is the generated container's runtime port and the second is the current backend preset metadata (Preset::exposed_port()). Vite and Angular are served by nginx on port 80 even though their metadata still reports 5173 and 4200.

Vue CLI projects use the generic Nixpacks deployment path and listen on port 3000, while the current preset metadata reports 8080. Set the project's exposed port to 3000 until that backend metadata is corrected. Vue projects built with Vite use the Vite preset above and are served by nginx on port 80.

Python

FrameworkPresetDefault PortDetection
Python (generic)python8000requirements.txt, pyproject.toml, setup.py, Pipfile
FastAPIauto-detected (no preset slug)8000FastAPI in dependencies
Flaskauto-detected (no preset slug)8000Flask in dependencies
Djangoauto-detected (no preset slug)8000manage.py

Other languages

LanguagePresetDefault PortDetection
Rustrust8080Cargo.toml
Gogo8080go.mod
Javajava8080pom.xml, build.gradle, build.gradle.kts
Ruby on Railsauto-detected (no preset slug)3000Gemfile with Rails
Laravel (PHP)auto-detected (no preset slug)8000artisan, composer.json

Special presets

PresetSlugDescription
DockerfiledockerfileUses the Dockerfile in your repository as-is
Nixpacks (auto-detect)nixpacksDelegates entirely to Nixpacks for language detection and build
Static SitestaticFor pre-built static files (no build step)
Docker Composedocker-composeDeploys a docker-compose.yml / compose.yaml stack directly — see Docker Compose below

Docker Compose

Temps deploys docker-compose.yml / compose.yaml stacks directly via the docker-compose preset — this is a first-class deployment method, not a workaround.

Select the Docker Compose preset when creating a project and point it at a repository containing a compose file (or paste one inline for a manual project). On deploy, Temps:

  • Reads the compose file from your repo (or the inline content) and merges in your project's environment variables
  • Builds any services with a build: directive, then runs docker compose up in an isolated project namespace per environment
  • Discovers the resulting containers and tracks all of them against the deployment — one project can now run multiple containers, not just one
  • Exposes each service that publishes a port through the Temps proxy; internal-only services (e.g. a database with no published port) stay off the public network
  • Supports a docker-compose.temps-override.yml file for Temps-specific overrides without editing your original compose file

Compose deployments go through the same pipeline as every other preset — Git push deploys, environment variables, and deployment history all apply. Compose files are validated against a security policy before use (host bind mounts and paths are confined to the checkout).

For details, see Docker Containers.


Nixpacks languages

For languages without a first-class preset, Temps uses Nixpacks to detect, build, and package your application. Nixpacks supports 20+ languages:

  • Node.js
  • Python
  • Rust
  • Go
  • Java
  • PHP
  • Ruby
  • Deno
  • Elixir
  • C# / .NET
  • F# / .NET
  • Dart
  • Swift
  • Zig
  • Scala
  • Haskell
  • Clojure
  • Crystal
  • COBOL
  • Gleam
  • Static files

You can select a specific Nixpacks provider (e.g. nixpacks-python, nixpacks-ruby) when creating a project, or let Nixpacks auto-detect.

Nixpacks reads optional nixpacks.toml or .nixpacks.toml configuration files from your repository root for custom build configuration.


Package managers

Temps detects your Node.js package manager from the lock file and uses the appropriate commands:

Package ManagerLock FileBase ImageInstall Command
npmpackage-lock.jsonnode:22-alpinenpm install
Yarnyarn.locknode:22-alpineyarn install --frozen-lockfile
pnpmpnpm-lock.yamlnode:22-alpinepnpm install --frozen-lockfile
Bunbun.lockb or bun.lockoven/bun:1.2bun install

Monorepo tools

Temps detects and supports these monorepo build tools:

ToolDetectionBehavior
Turborepoturbo.jsonRuns npx turbo build scoped to your project directory
Nxnx.jsonRuns npx nx build {package} for the target package
Lernalerna.jsonRuns npx lerna run build --scope={package}

All monorepo tools work with all four package managers (npm, Yarn, pnpm, Bun). Set the App Directory in project settings to the subdirectory containing each app — see Deploy a Project.


Preset detection priority

When auto-detecting from your project files, Temps checks in this order. The first match wins:

  1. Dockerfile exists → Dockerfile preset
  2. docusaurus.config.js / .tsDocusaurus
  3. next.config.js / .mjs / .tsNext.js
  4. vite.config.js / .tsVite
  5. react-scripts in package.jsonCreate React App
  6. rsbuild.config.tsRsbuild
  7. Cargo.tomlRust
  8. go.modGo
  9. requirements.txt, pyproject.toml, setup.py, PipfilePython
  10. pom.xml, build.gradle, build.gradle.ktsJava
  11. nixpacks.tomlNixpacks (explicit)
  12. No match → no preset selected (you must choose one manually)

If a Dockerfile exists in your repository root, it always takes priority — even if Temps would otherwise detect a framework like Next.js or Flask. Rename or remove the Dockerfile to use auto-detection.


Build configuration

Every preset supports these optional overrides, configurable from the project settings:

OptionDescriptionExample
Dockerfile pathCustom Dockerfile location relative to the build contextdocker/Dockerfile.production
Build contextCustom build context path relative to the repository root./apps/web
Install commandOverride the default install commandpnpm install --no-frozen-lockfile
Build commandOverride the default build commandnpm run build:production
Output directoryOverride the output directory for static buildsout

Dockerfile features

When using a custom Dockerfile or the generated Dockerfile, Temps supports:

  • Multi-stage builds — all generated Dockerfiles use separate build and production stages
  • BuildKit — enabled by default; supports --mount=type=cache for dependency caching
  • Build arguments — environment variables are injected as ARG directives and passed via --build-arg
  • Custom base images — any base image works in your custom Dockerfile
  • Platform targetinglinux/amd64 and linux/arm64

Container runtime

Every deployed container runs with these defaults:

SettingDefaultConfigurable
CPU1 coreYes
Memory512 MBYes
Disk1024 MBYes
Restart policyOn failureYes
Log retention50 MB x 3 files (150 MB total)No
Network binding127.0.0.1 (localhost only)No
Init processEnabled (--init)No

Security is enforced at the container level:

  • All Linux capabilities are dropped
  • no-new-privileges is set
  • PID limit of 512 processes
  • Containers bind to localhost — external access goes through the Temps proxy with automatic TLS

What is not supported

Outside of the Docker Compose preset above, every other Temps project deploys as a single container (or static file bundle) per environment. The following are explicitly not supported:

  • Name
    Manual multi-container pods (non-Compose)
    Type
    Not supported
    Description

    Outside of the Docker Compose preset, there is no sidecar pattern or ad hoc pod grouping. A dockerfile / framework-preset / Nixpacks project runs exactly one container. Separate services (databases, Redis, etc.) are managed independently through Managed Services, or bundled together via the Docker Compose preset.

  • Name
    Kubernetes / Docker Swarm
    Type
    Not supported
    Description

    Temps uses Docker directly — there is no orchestrator layer. Deployments (including Compose stacks) run as Docker containers managed by the Temps deployer.

  • Name
    Lambda-style serverless
    Type
    Not supported
    Description

    There are no isolated per-request functions. Your framework's API routes (Next.js, Remix, SvelteKit, etc.) run inside the application container — no cold starts and no per-invocation billing.

  • Name
    Cloud Native Buildpacks
    Type
    Not supported
    Description

    Temps uses Nixpacks and Dockerfile builds. Paketo / Heroku buildpacks are not supported.

Managed Services vs. Docker Compose

Both let a project use a database, cache, or queue — pick based on how much control you need:

Managed ServiceDocker Compose preset
Best forPostgreSQL, MySQL, MongoDB, Redis, S3-compatible storageAnything else, or a stack you already have as a compose file
Managed byTemps (backups, upgrades, connection injection)You (via the compose file)
SetupAttach from project settings, no YAMLPoint the docker-compose preset at your compose file

See Deploy with a Database for the Managed Services path, or the Docker Compose section above to deploy a compose stack directly.

Was this page helpful?