YAML stands for YAML Ain't Markup Language.
It is mainly used for:
- Configuration files
- DevOps tools
- APIs
- Docker
- Kubernetes
- CI/CD pipelines
1. YAML Syntax Basics
Rules
- Uses indentation (spaces)
- No tabs
- Usually .yaml or .yml
- Key-value format
Common Data Types
| Type | Example |
| String | name: Akkal |
| Number | age: 20 |
| Boolean | isAdmin: true |
| Array | - JavaScript |
| Object | user: |
| Null | value: null |
2. Key-Value Pair
name: Akkal
age: 22
city: KathmanduMeaning
- name → key
- Akkal → value
Equivalent JSON:
{
"name": "Akkal",
"age": 22,
"city": "Kathmandu"
}3. Strings
message: Hello World
language: "TypeScript"
framework: 'Express'Quotes are optional unless special characters exist.
4. Numbers and Boolean
age: 22
price: 99.99
isAdmin: true
isLoggedIn: false5. Arrays (Lists)
# method - 1
numbers: [1, 2, 3, 4]
# method - 2
languages:
- JavaScript
- TypeScript
- Python6. Objects
user:
name: Akkal
age: 22
role: developer7. Nested Objects
user:
name: Akkal
age: 22
address:
country: Nepal
city: Kathmandu
zip: 44600Structure:
user
├── name
├── age
└── address
├── country
├── city
└── zipcompany:
name: XYZ
department:
name: Engineering
manager:
name: Akkal
experience: 5Structure:
company
└── name
└── department
└── name
└── manager
├── name
└── experience8. Array of Objects
users:
- name: Akkal
role: admin
- name: Ram
role: user9. Comments
# This is comment
name: Akkal10. Null Values
middleName: null
nickname:
username: ~11. Multiline Strings
Pipe | : preserve line breaks
message: |
Hello
This is YAML
Learning basicsOutput:
Hello This is YAML Learning basics
Greater Than > : single line
message: >
Hello
This becomes
one lineOutput:
Hello This becomes one line
12. Environment Example
app:
name: auth-service
port: 5000
database:
host: localhost
port: 5432
username: postgres
password: secret13. Anchors and Defaults
YAML supports reusable default blocks using anchors & and aliases *.
default_settings is reused in both environments.
default: &default_settings
timeout: 30
retries: 3
development:
<<: *default_settings
host: localhost
production:
<<: *default_settings
host: prod.server.com14. Explicit Data Types
value: !!str 123
age: !!int "22"
isAdmin: !!bool "true"
data: !!null ""15. Docker Compose
15.1 Simple Node.js App
version: "3"
services:
app:
image: node:20
container_name: my-node-app
ports:
- "3000:3000"
volumes:
- .:/app
working_dir: /app
comm and: npm start15.2. Node.js + MongoDB
version: "3"
services:
app:
image: node:20
container_name: backend-app
ports:
- "5000:5000"
volumes:
- .:/app
working_dir: /app
command: npm run dev
depends_on:
- mongo
mongo:
image: mongo
container_name: mongodb
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
volumes:
mongo-data:15.2. Node.js + PostgreSQL
version: "3"
services:
app:
image: node:20
ports:
- "5000:5000"
environment:
DATABASE_URL: postgres://postgres:password@db:5432/mydb
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
ports:
- "5432:5432"