Appearance
Build & Start Commands, Ports, and Root Directories
These four fields control exactly how Infrly turns your repo into a running (or published) service. They're set when you create a service and editable afterward from its settings — a change takes effect on the next deploy.
Root directory
The folder your app actually lives in, relative to the repo root. Use . (or leave it blank) if the app you're deploying is the repo root. This matters most in a monorepo — a repo with backend/ and frontend/ folders deploys as two separate Infrly services, each with its own Root Directory pointing at its own folder, both from the same repository connection.
Every other path-like setting (Build Command's working directory, Output Directory for a static site) is resolved relative to this folder, not the repo root.
Install command
Runs first, before the build command — installing dependencies (npm install, pip install -r requirements.txt, bundle install, ...). Leave it blank for a runtime that has no separate install step (Go, Java via Maven, Rust via Cargo all fetch dependencies as part of their own build command).
Build command
Runs after install. For a Web Service, this produces whatever your start command runs (a compiled binary, a dist/ folder for a Node app that gets served by your own server code, etc.). For a Static Site, this is the only command that runs — its output directory is what actually gets published, see below.
Build failures show up in the deployment log tagged with which command was running when it failed (INSTALLING vs BUILDING), so you can tell a missing dependency from a genuine build error at a glance.
Start command (Web Service and Cron Job only)
What actually runs your app. For a Web Service, this needs to be a process that keeps running and listens on $PORT — see below. For a Cron Job, this needs to do its work and exit; a start command that never exits will just get killed when its scheduled run hits the time limit.
A Static Site has no start command — see Deploy a Static Site.
Port
Infrly assigns a port and injects it as the PORT environment variable — your app must read it from there rather than hardcoding a port number. This is true for every runtime; see each runtime's default start command in Supported Languages & Frameworks for exactly how that runtime's default reads $PORT.
Getting this wrong (hardcoding a port, or reading the wrong variable name) is the most common reason a first deploy never becomes healthy — see Troubleshooting.
Output directory (Static Site only)
Where your build command writes its static files, relative to the root directory — for example dist for a Vite app, build for Create React App, out for a statically-exported Next.js app. Infrly publishes exactly this folder's contents; get this wrong and the deploy fails with a clear "output directory not found" error rather than silently publishing the wrong (or no) files.