LofentaLofenta/Docs

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.js
pnpm-lock.yamlNode.js
yarn.lockNode.js
requirements.txt / pyproject.tomlPython (3.12)
go.modGo (1.23)
DockerfileDocker

How commands are chosen

There is no Lofenta config file. Build and start commands are detected automatically from your repository:

Install

Derived 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.

Build

For Node, the "build" script in your package.json runs if present. If there is no build script, the build step is skipped.

Start

For Node, the "start" script in your package.json is used. Python and Go start commands are detected from your project files (see Runtimes).

Need full control over install, build, and start? Add a 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"]
Lofenta injects $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