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 detected | Project type | Base image |
|---|---|---|
package.json | Node.js | node:20-alpine |
bun.lockb | Bun | oven/bun:1-alpine |
go.mod | Go | golang:1.23-alpine |
requirements.txt | Python | python:3.12-slim |
Gemfile | Ruby | ruby:3.3-slim |
index.html | Static | nginx:alpine |
frontend/ + backend/ | Monorepo | Per-directory detection |
Node.js framework detection
For Node.js projects, Makofy further detects:
- Next.js — standalone mode with
.next/standaloneoutput - 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→ Bunpnpm-lock.yaml→ pnpmyarn.lock→ Yarn- Otherwise → npm
Python framework detection
- FastAPI / Uvicorn →
uvicorn main:app - Flask →
gunicorn app:app - Django →
gunicorn 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:
- Frontend is built with the detected package manager
- Backend is built with its language toolchain
- nginx serves the frontend and proxies
/apito the backend - 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)