Skip to content
Browse docs · Supported stacks

Documentation

Supported stacks

Use a Dockerfile or one of the current automatic build adapters.

Dockerfile builds

A Dockerfile in the configured root takes precedence over automatic detection. It must describe a runnable web application. Configure the listening port and health path in the project; framework detection does not replace those settings.

Node.js

Automatic builds support Next.js and Express with Node 22. Declare engines.node as 22 or 22.x and include exactly one supported lockfile: package-lock.json, yarn.lock or pnpm-lock.yaml. Workspaces and devEngines are not supported by this adapter.

Next.js requires build and start scripts. Express requires a start script or a supported start override. Automatic Node command overrides use the selected package manager's script commands.

Python

Flask and FastAPI are detected from requirements.txt or the supported dependency array in pyproject.toml. Include gunicorn for Flask or uvicorn for FastAPI. Supply the explicit module and callable in the start command. Automatic Python builds do not accept a custom build command.

# Replace app:app with your module and callable
# Flask
gunicorn --bind 0.0.0.0:$PORT app:app
# FastAPI
uvicorn --host 0.0.0.0 --port $PORT app:app

PHP and static sites

Automatic PHP builds support Laravel, Symfony and explicitly selected plain PHP. Include composer.json and public/index.php. Supported PHP minors are 8.2, 8.3 and 8.4 with a constraint such as ^8.3 or 8.3.*. The document root is public/; custom build and start commands are not accepted by this adapter.

For a static site, explicitly select Static and put index.html in the configured root. The built-in static server serves the files; automatic static builds do not run custom build or start commands.