Skip to main content

Build System

Makofy uses Kaniko to build container images in-cluster without requiring Docker.

Auto-detection

When you deploy without a Dockerfile, Makofy detects your project type and generates one automatically:

File detectedProject typeBase image
package.jsonNode.jsnode:20-alpine
bun.lockbBunoven/bun:1-alpine
go.modGogolang:1.23-alpine
requirements.txtPythonpython:3.12-slim
GemfileRubyruby:3.3-slim
index.htmlStaticnginx:alpine
frontend/ + backend/MonorepoPer-directory detection

Node.js framework detection

For Node.js projects, Makofy further detects:

  • Next.js — standalone mode with .next/standalone output
  • Vite / React / Svelte / Astro — static build served with nginx
  • Express / Fastify — server mode with npm start

Package manager is auto-detected from lock files:

  • bun.lockb → Bun
  • pnpm-lock.yaml → pnpm
  • yarn.lock → Yarn
  • Otherwise → npm

Python framework detection

  • FastAPI / Uvicornuvicorn main:app
  • Flaskgunicorn app:app
  • Djangogunicorn config.wsgi:application

Custom Dockerfile

If a Dockerfile exists in your repo root, Makofy uses it as-is. Your app should listen on port 8080 (or set the PORT env var).

FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm ci
EXPOSE 8080
ENV PORT=8080
CMD ["npm", "start"]

Monorepo support

If your repo has both frontend/ and backend/ directories, Makofy generates a multi-stage Dockerfile:

  1. Frontend is built with the detected package manager
  2. Backend is built with its language toolchain
  3. nginx serves the frontend and proxies /api to the backend
  4. Both run in a single container on port 8080

Build resources

Each build gets:

  • 500m - 2 CPU cores
  • 1 - 4 GB RAM
  • 5 minute timeout (10 minutes for buildpacks)