twelve-factor
SKILL.md
Twelve-Factor App
The Twelve-Factor App methodology is a set of best practices for building software-as-a-service apps. In 2025, it remains the gold standard for Cloud Native microservices and containerized applications.
When to Use
- ALWAYS, for any web application or service destined for the cloud (Kubernetes, PaaS, Serverless).
- Migrating legacy apps to the cloud (Replatforming).
The Twelve Factors (2025 Context)
- Codebase: One codebase tracked in revision control (Git), many deploys.
- Dependencies: Explicitly declare and isolate dependencies (Docker, package.json). No system-wide installs.
- Config: Store config in the environment (Env Vars, Secrets Manager). Never in code.
- Backing Services: Treat backing services (DB, Queue, Cache) as attached resources (URL/Credentials).
- Build, Release, Run: Strictly separate build and run stages. CI/CD pipelines are mandatory.
- Processes: Execute the app as one or more stateless processes. State goes to backing services (Redis/DB).
- Port Binding: Export services via port binding (e.g.,
app.listen(8080)). No reliance on server injection (Tomcat). - Concurrency: Scale out via the process model (Replicas in K8s).
- Disposability: Maximize robustness with fast startup and graceful shutdown (SIGTERM handling).
- Dev/Prod Parity: Keep development, staging, and production as similar as possible (Docker helps here).
- Logs: Treat logs as event streams. Do not write to files; write to
stdout/stderr. - Admin Processes: Run admin/management tasks as one-off processes (e.g., DB migrations) in the same environment.
Quick Start (Dockerized App)
# Dockerfile embodies dependencies, port binding, and build/run separation
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json .
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
# Dependencies
COPY /app/dist ./dist
COPY /app/node_modules ./node_modules
# Config via Env
ENV PORT=8080
# Port Binding
EXPOSE 8080
# Disposability (Process 1)
CMD ["node", "dist/main.js"]
Best Practices
Do:
- Use Docker to satisfy dependencies and dev/prod parity.
- Use Environment Variables for secrets and config.
- Implement Graceful Shutdown to stop accepting new requests and finish current ones.
Don't:
- Don't hardcode IP addresses or file paths.
- Don't rely on "Sticky Sessions" (violates Statelessness).
- Don't log to local files in a container (they vanish).
References
Weekly Installs
1
Repository
g1joshi/agent-skillsGitHub Stars
7
First Seen
Feb 10, 2026
Installed on
mcpjam1
claude-code1
replit1
junie1
windsurf1
zencoder1