# Supported Stacks

Any framework that can run in a container can run on Salus — your application deploys as it is, without being rewritten to fit the platform. There are two build paths.

## Zero-config builds (buildpacks)

When you import a repository, its [buildpacks](https://salus.cloud/docs/pipelines/builds/buildpacks/) detect the project and run the right install and build commands for you. Supported out of the box:

-   **Frontend** — React (Vite or Create React App), Vue, Svelte, and static-site frameworks such as Astro and Nuxt.
-   **Full-stack and server-rendered** — Next.js (server or static export), Nuxt, and similar frameworks with server logic.
-   **Node.js backend services** — APIs and services built with frameworks such as Express, NestJS, or Fastify. JavaScript and TypeScript projects are detected from their `package.json` and lockfile.
-   **.NET (C#)** — web services and APIs such as ASP.NET Core applications.
-   **Python** — web apps and APIs such as FastAPI, detected from `requirements.txt`. Add a `Procfile` that starts the server on the port your environment routes to, for example `web: uvicorn main:app --host 0.0.0.0 --port 8080`.

Projects come in two shapes (see [Projects](https://salus.cloud/docs/getting-started/projects/)):

-   **Server-side applications** — web services that run your backend code, such as APIs and server-rendered apps.
-   **Client-side applications** — static sites built into HTML, CSS, and JavaScript and served directly.

For Node.js projects, you choose the **Node.js version** your app runs on. Match it to the version you develop with locally, and prefer an LTS release for production.

## Every other stack: custom Docker builds

Go, Java and Kotlin (Spring Boot), PHP (Laravel), Ruby on Rails, and any Python app that needs system packages: anything with a Dockerfile builds and runs on Salus as a **custom Docker build**. You bring the Dockerfile; Salus builds the image and runs it as a real, long-lived service. See [Custom Docker Builds](https://salus.cloud/docs/pipelines/builds/custom-docker/).

## The port your app listens on

Salus sends traffic to the port set in the environment’s configuration and doesn’t pass a `PORT` variable to your app, so start the server on that port explicitly. A Next.js or Express app that falls back to `3000` listens on `3000`: set the port to match. See [Configure an Environment](https://salus.cloud/docs/deployments/environment-configurations/configuring/).
