Configuration
Build configuration
Control how Lofenta installs dependencies, builds your app, and starts the container.
Auto-detection
Lofenta automatically detects your runtime and framework by inspecting your repository root. Builds are derived from the files in your repo (and from your package.json scripts for Node). There is no config file to maintain, for most projects you do not need to configure anything.
package.jsonNode.jspnpm-lock.yamlNode.jsyarn.lockNode.jsrequirements.txt / pyproject.tomlPython (3.12)go.modGo (1.23)DockerfileDockerHow commands are chosen
There is no Lofenta config file. Build and start commands are detected automatically from your repository:
InstallDerived from your lockfile: package-lock.json runs npm install, pnpm-lock.yaml runs pnpm install, yarn.lock runs yarn install. Python installs from requirements.txt or pyproject.toml; Go runs go mod download.
BuildFor Node, the "build" script in your package.json runs if present. If there is no build script, the build step is skipped.
StartFor Node, the "start" script in your package.json is used. Python and Go start commands are detected from your project files (see Runtimes).
Dockerfile at your repo root. When present, Lofenta builds it directly and skips auto-detection.Dockerfile support
If a Dockerfile exists at the repo root, Lofenta uses it directly. Your Dockerfile must expose a port and listen on $PORT.
FROM node:22-alpine WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build EXPOSE $PORT CMD ["npm", "start"]
$PORT at runtime. Using EXPOSE 3000 in your Dockerfile is informational only; always bind to $PORT.Build cache
Lofenta caches the following directories between builds to dramatically speed up install steps:
node_modules (keyed on package-lock.json / pnpm-lock.yaml / yarn.lock).next/cache (Next.js compiler cache)__pycache__ and .venv (Python)vendor and pkg/mod (Go)
Cache is invalidated automatically when the lockfile changes. To force a fresh build without using cache, bump a comment in your lockfile or push an empty commit after changing a non-lockfile dependency boundary.
Next
Runtimes and languages
Full list of supported stacks