[{"data":1,"prerenderedAt":1204},["ShallowReactive",2],{"guide-yaml-anchors-aliases-explained":3},{"id":4,"title":5,"body":6,"date":1196,"description":1197,"extension":1198,"meta":1199,"navigation":161,"path":1200,"readingTime":165,"seo":1201,"stem":1202,"__hash__":1203},"guides\u002Fguides\u002Fyaml-anchors-aliases-explained.md","YAML Anchors and Aliases Explained: DRY Configuration",{"type":7,"value":8,"toc":1174},"minimark",[9,14,18,21,25,33,97,107,111,117,239,249,256,262,312,315,364,369,372,485,488,492,495,499,565,572,576,640,643,647,651,794,798,881,885,1030,1036,1040,1095,1099,1133,1137,1158,1162,1170],[10,11,13],"h2",{"id":12},"the-repetition-problem-in-yaml","The Repetition Problem in YAML",[15,16,17],"p",{},"Configuration files often contain repeated blocks — the same database credentials across environments, identical build steps for multiple jobs, or shared container settings across services. Copy-pasting these blocks works until one value changes and you forget to update the other three copies.",[15,19,20],{},"YAML anchors and aliases solve this by letting you define a block once and reference it elsewhere. Changes propagate to every reference automatically.",[10,22,24],{"id":23},"anchors-define-a-reusable-block","Anchors: Define a Reusable Block",[15,26,27,28,32],{},"An anchor marks a node with a name using ",[29,30,31],"code",{},"&",":",[34,35,40],"pre",{"className":36,"code":37,"language":38,"meta":39,"style":39},"language-yaml shiki shiki-themes github-light github-dark","defaults: &defaults\n  timeout: 30\n  retries: 3\n  log_level: info\n","yaml","",[29,41,42,62,74,85],{"__ignoreMap":39},[43,44,47,51,55,58],"span",{"class":45,"line":46},"line",1,[43,48,50],{"class":49},"s9eBZ","defaults",[43,52,54],{"class":53},"sVt8B",": ",[43,56,31],{"class":57},"szBVR",[43,59,61],{"class":60},"sScJk","defaults\n",[43,63,65,68,70],{"class":45,"line":64},2,[43,66,67],{"class":49},"  timeout",[43,69,54],{"class":53},[43,71,73],{"class":72},"sj4cs","30\n",[43,75,77,80,82],{"class":45,"line":76},3,[43,78,79],{"class":49},"  retries",[43,81,54],{"class":53},[43,83,84],{"class":72},"3\n",[43,86,88,91,93],{"class":45,"line":87},4,[43,89,90],{"class":49},"  log_level",[43,92,54],{"class":53},[43,94,96],{"class":95},"sZZnC","info\n",[15,98,99,100,103,104,106],{},"The ",[29,101,102],{},"&defaults"," anchor attaches the name ",[29,105,50],{}," to that mapping. The node still appears in the final data — anchoring doesn't remove it.",[10,108,110],{"id":109},"aliases-reference-an-anchored-block","Aliases: Reference an Anchored Block",[15,112,113,114,32],{},"An alias references an anchored node using ",[29,115,116],{},"*",[34,118,120],{"className":36,"code":119,"language":38,"meta":39,"style":39},"defaults: &defaults\n  timeout: 30\n  retries: 3\n  log_level: info\n\nproduction:\n  \u003C\u003C: *defaults\n  log_level: warning\n  database: prod-db\n\nstaging:\n  \u003C\u003C: *defaults\n  database: staging-db\n",[29,121,122,132,140,148,156,163,172,184,194,205,210,218,229],{"__ignoreMap":39},[43,123,124,126,128,130],{"class":45,"line":46},[43,125,50],{"class":49},[43,127,54],{"class":53},[43,129,31],{"class":57},[43,131,61],{"class":60},[43,133,134,136,138],{"class":45,"line":64},[43,135,67],{"class":49},[43,137,54],{"class":53},[43,139,73],{"class":72},[43,141,142,144,146],{"class":45,"line":76},[43,143,79],{"class":49},[43,145,54],{"class":53},[43,147,84],{"class":72},[43,149,150,152,154],{"class":45,"line":87},[43,151,90],{"class":49},[43,153,54],{"class":53},[43,155,96],{"class":95},[43,157,159],{"class":45,"line":158},5,[43,160,162],{"emptyLinePlaceholder":161},true,"\n",[43,164,166,169],{"class":45,"line":165},6,[43,167,168],{"class":49},"production",[43,170,171],{"class":53},":\n",[43,173,175,178,180,182],{"class":45,"line":174},7,[43,176,177],{"class":72},"  \u003C\u003C",[43,179,54],{"class":53},[43,181,116],{"class":57},[43,183,61],{"class":53},[43,185,187,189,191],{"class":45,"line":186},8,[43,188,90],{"class":49},[43,190,54],{"class":53},[43,192,193],{"class":95},"warning\n",[43,195,197,200,202],{"class":45,"line":196},9,[43,198,199],{"class":49},"  database",[43,201,54],{"class":53},[43,203,204],{"class":95},"prod-db\n",[43,206,208],{"class":45,"line":207},10,[43,209,162],{"emptyLinePlaceholder":161},[43,211,213,216],{"class":45,"line":212},11,[43,214,215],{"class":49},"staging",[43,217,171],{"class":53},[43,219,221,223,225,227],{"class":45,"line":220},12,[43,222,177],{"class":72},[43,224,54],{"class":53},[43,226,116],{"class":57},[43,228,61],{"class":53},[43,230,232,234,236],{"class":45,"line":231},13,[43,233,199],{"class":49},[43,235,54],{"class":53},[43,237,238],{"class":95},"staging-db\n",[15,240,99,241,244,245,248],{},[29,242,243],{},"*defaults"," alias copies the anchored mapping. Combined with the merge key ",[29,246,247],{},"\u003C\u003C",", it merges the anchored keys into the current mapping.",[10,250,252,253,255],{"id":251},"the-merge-key","The Merge Key (",[29,254,247],{},")",[15,257,258,259,261],{},"The merge key ",[29,260,247],{}," inserts all keys from an aliased mapping into the current mapping. Keys defined explicitly in the current mapping override merged keys:",[34,263,265],{"className":36,"code":264,"language":38,"meta":39,"style":39},"production:\n  \u003C\u003C: *defaults       # Merges timeout, retries, log_level\n  log_level: warning  # Overrides the merged log_level\n  database: prod-db   # Adds a new key\n",[29,266,267,273,288,300],{"__ignoreMap":39},[43,268,269,271],{"class":45,"line":46},[43,270,168],{"class":49},[43,272,171],{"class":53},[43,274,275,277,279,281,284],{"class":45,"line":64},[43,276,177],{"class":72},[43,278,54],{"class":53},[43,280,116],{"class":57},[43,282,283],{"class":53},"defaults       ",[43,285,287],{"class":286},"sJ8bj","# Merges timeout, retries, log_level\n",[43,289,290,292,294,297],{"class":45,"line":76},[43,291,90],{"class":49},[43,293,54],{"class":53},[43,295,296],{"class":95},"warning",[43,298,299],{"class":286},"  # Overrides the merged log_level\n",[43,301,302,304,306,309],{"class":45,"line":87},[43,303,199],{"class":49},[43,305,54],{"class":53},[43,307,308],{"class":95},"prod-db",[43,310,311],{"class":286},"   # Adds a new key\n",[15,313,314],{},"Result after parsing:",[34,316,318],{"className":36,"code":317,"language":38,"meta":39,"style":39},"production:\n  timeout: 30\n  retries: 3\n  log_level: warning  # Overridden\n  database: prod-db   # Added\n",[29,319,320,326,334,342,353],{"__ignoreMap":39},[43,321,322,324],{"class":45,"line":46},[43,323,168],{"class":49},[43,325,171],{"class":53},[43,327,328,330,332],{"class":45,"line":64},[43,329,67],{"class":49},[43,331,54],{"class":53},[43,333,73],{"class":72},[43,335,336,338,340],{"class":45,"line":76},[43,337,79],{"class":49},[43,339,54],{"class":53},[43,341,84],{"class":72},[43,343,344,346,348,350],{"class":45,"line":87},[43,345,90],{"class":49},[43,347,54],{"class":53},[43,349,296],{"class":95},[43,351,352],{"class":286},"  # Overridden\n",[43,354,355,357,359,361],{"class":45,"line":158},[43,356,199],{"class":49},[43,358,54],{"class":53},[43,360,308],{"class":95},[43,362,363],{"class":286},"   # Added\n",[365,366,368],"h3",{"id":367},"merging-multiple-anchors","Merging Multiple Anchors",[15,370,371],{},"You can merge from multiple anchors:",[34,373,375],{"className":36,"code":374,"language":38,"meta":39,"style":39},"base: &base\n  image: node:20\n  working_dir: \u002Fapp\n\ncache: &cache\n  cache:\n    paths:\n      - node_modules\u002F\n\nbuild:\n  \u003C\u003C: [*base, *cache]\n  script: npm run build\n",[29,376,377,389,399,409,413,425,432,439,447,451,458,475],{"__ignoreMap":39},[43,378,379,382,384,386],{"class":45,"line":46},[43,380,381],{"class":49},"base",[43,383,54],{"class":53},[43,385,31],{"class":57},[43,387,388],{"class":60},"base\n",[43,390,391,394,396],{"class":45,"line":64},[43,392,393],{"class":49},"  image",[43,395,54],{"class":53},[43,397,398],{"class":95},"node:20\n",[43,400,401,404,406],{"class":45,"line":76},[43,402,403],{"class":49},"  working_dir",[43,405,54],{"class":53},[43,407,408],{"class":95},"\u002Fapp\n",[43,410,411],{"class":45,"line":87},[43,412,162],{"emptyLinePlaceholder":161},[43,414,415,418,420,422],{"class":45,"line":158},[43,416,417],{"class":49},"cache",[43,419,54],{"class":53},[43,421,31],{"class":57},[43,423,424],{"class":60},"cache\n",[43,426,427,430],{"class":45,"line":165},[43,428,429],{"class":49},"  cache",[43,431,171],{"class":53},[43,433,434,437],{"class":45,"line":174},[43,435,436],{"class":49},"    paths",[43,438,171],{"class":53},[43,440,441,444],{"class":45,"line":186},[43,442,443],{"class":53},"      - ",[43,445,446],{"class":95},"node_modules\u002F\n",[43,448,449],{"class":45,"line":196},[43,450,162],{"emptyLinePlaceholder":161},[43,452,453,456],{"class":45,"line":207},[43,454,455],{"class":49},"build",[43,457,171],{"class":53},[43,459,460,462,465,467,470,472],{"class":45,"line":212},[43,461,177],{"class":72},[43,463,464],{"class":53},": [",[43,466,116],{"class":57},[43,468,469],{"class":53},"base, ",[43,471,116],{"class":57},[43,473,474],{"class":53},"cache]\n",[43,476,477,480,482],{"class":45,"line":220},[43,478,479],{"class":49},"  script",[43,481,54],{"class":53},[43,483,484],{"class":95},"npm run build\n",[15,486,487],{},"Later anchors override keys from earlier ones when both define the same key.",[10,489,491],{"id":490},"anchors-without-merging","Anchors Without Merging",[15,493,494],{},"Anchors work with any YAML node type, not just mappings:",[365,496,498],{"id":497},"anchored-sequences","Anchored Sequences",[34,500,502],{"className":36,"code":501,"language":38,"meta":39,"style":39},"common_steps: &common_steps\n  - checkout\n  - install dependencies\n\ndeploy_production:\n  steps:\n    - *common_steps\n    - deploy to production\n",[29,503,504,516,524,531,535,542,549,558],{"__ignoreMap":39},[43,505,506,509,511,513],{"class":45,"line":46},[43,507,508],{"class":49},"common_steps",[43,510,54],{"class":53},[43,512,31],{"class":57},[43,514,515],{"class":60},"common_steps\n",[43,517,518,521],{"class":45,"line":64},[43,519,520],{"class":53},"  - ",[43,522,523],{"class":95},"checkout\n",[43,525,526,528],{"class":45,"line":76},[43,527,520],{"class":53},[43,529,530],{"class":95},"install dependencies\n",[43,532,533],{"class":45,"line":87},[43,534,162],{"emptyLinePlaceholder":161},[43,536,537,540],{"class":45,"line":158},[43,538,539],{"class":49},"deploy_production",[43,541,171],{"class":53},[43,543,544,547],{"class":45,"line":165},[43,545,546],{"class":49},"  steps",[43,548,171],{"class":53},[43,550,551,554,556],{"class":45,"line":174},[43,552,553],{"class":53},"    - ",[43,555,116],{"class":57},[43,557,515],{"class":53},[43,559,560,562],{"class":45,"line":186},[43,561,553],{"class":53},[43,563,564],{"class":95},"deploy to production\n",[15,566,567,568,571],{},"Note: ",[29,569,570],{},"*common_steps"," as a list item creates a nested list. To flatten it, structure your anchors differently or use merge keys.",[365,573,575],{"id":574},"anchored-scalars","Anchored Scalars",[34,577,579],{"className":36,"code":578,"language":38,"meta":39,"style":39},"api_version: &apiVersion v1\n\nservice1:\n  apiVersion: *apiVersion\n\nservice2:\n  apiVersion: *apiVersion\n",[29,580,581,596,600,607,619,623,630],{"__ignoreMap":39},[43,582,583,586,588,590,593],{"class":45,"line":46},[43,584,585],{"class":49},"api_version",[43,587,54],{"class":53},[43,589,31],{"class":57},[43,591,592],{"class":60},"apiVersion",[43,594,595],{"class":95}," v1\n",[43,597,598],{"class":45,"line":64},[43,599,162],{"emptyLinePlaceholder":161},[43,601,602,605],{"class":45,"line":76},[43,603,604],{"class":49},"service1",[43,606,171],{"class":53},[43,608,609,612,614,616],{"class":45,"line":87},[43,610,611],{"class":49},"  apiVersion",[43,613,54],{"class":53},[43,615,116],{"class":57},[43,617,618],{"class":53},"apiVersion\n",[43,620,621],{"class":45,"line":158},[43,622,162],{"emptyLinePlaceholder":161},[43,624,625,628],{"class":45,"line":165},[43,626,627],{"class":49},"service2",[43,629,171],{"class":53},[43,631,632,634,636,638],{"class":45,"line":174},[43,633,611],{"class":49},[43,635,54],{"class":53},[43,637,116],{"class":57},[43,639,618],{"class":53},[15,641,642],{},"Useful for values that appear in many places and might change together — like API versions or image tags.",[10,644,646],{"id":645},"real-world-patterns","Real-World Patterns",[365,648,650],{"id":649},"github-actions","GitHub Actions",[34,652,654],{"className":36,"code":653,"language":38,"meta":39,"style":39},"defaults: &_step_defaults\n  working-directory: .\u002Fapp\n\ninstall: &install\n  \u003C\u003C: *step_defaults\n  run: npm ci\n\nlint:\n  \u003C\u003C: *step_defaults\n  needs: install\n  run: npm run lint\n\ntest:\n  \u003C\u003C: *step_defaults\n  needs: install\n  run: npm test\n",[29,655,656,667,677,681,693,704,714,718,725,735,744,753,757,764,775,784],{"__ignoreMap":39},[43,657,658,660,662,664],{"class":45,"line":46},[43,659,50],{"class":49},[43,661,54],{"class":53},[43,663,31],{"class":57},[43,665,666],{"class":60},"_step_defaults\n",[43,668,669,672,674],{"class":45,"line":64},[43,670,671],{"class":49},"  working-directory",[43,673,54],{"class":53},[43,675,676],{"class":95},".\u002Fapp\n",[43,678,679],{"class":45,"line":76},[43,680,162],{"emptyLinePlaceholder":161},[43,682,683,686,688,690],{"class":45,"line":87},[43,684,685],{"class":49},"install",[43,687,54],{"class":53},[43,689,31],{"class":57},[43,691,692],{"class":60},"install\n",[43,694,695,697,699,701],{"class":45,"line":158},[43,696,177],{"class":72},[43,698,54],{"class":53},[43,700,116],{"class":57},[43,702,703],{"class":53},"step_defaults\n",[43,705,706,709,711],{"class":45,"line":165},[43,707,708],{"class":49},"  run",[43,710,54],{"class":53},[43,712,713],{"class":95},"npm ci\n",[43,715,716],{"class":45,"line":174},[43,717,162],{"emptyLinePlaceholder":161},[43,719,720,723],{"class":45,"line":186},[43,721,722],{"class":49},"lint",[43,724,171],{"class":53},[43,726,727,729,731,733],{"class":45,"line":196},[43,728,177],{"class":72},[43,730,54],{"class":53},[43,732,116],{"class":57},[43,734,703],{"class":53},[43,736,737,740,742],{"class":45,"line":207},[43,738,739],{"class":49},"  needs",[43,741,54],{"class":53},[43,743,692],{"class":95},[43,745,746,748,750],{"class":45,"line":212},[43,747,708],{"class":49},[43,749,54],{"class":53},[43,751,752],{"class":95},"npm run lint\n",[43,754,755],{"class":45,"line":220},[43,756,162],{"emptyLinePlaceholder":161},[43,758,759,762],{"class":45,"line":231},[43,760,761],{"class":49},"test",[43,763,171],{"class":53},[43,765,767,769,771,773],{"class":45,"line":766},14,[43,768,177],{"class":72},[43,770,54],{"class":53},[43,772,116],{"class":57},[43,774,703],{"class":53},[43,776,778,780,782],{"class":45,"line":777},15,[43,779,739],{"class":49},[43,781,54],{"class":53},[43,783,692],{"class":95},[43,785,787,789,791],{"class":45,"line":786},16,[43,788,708],{"class":49},[43,790,54],{"class":53},[43,792,793],{"class":95},"npm test\n",[365,795,797],{"id":796},"kubernetes","Kubernetes",[34,799,801],{"className":36,"code":800,"language":38,"meta":39,"style":39},"common_labels: &common_labels\n  app.kubernetes.io\u002Fpart-of: myapp\n  app.kubernetes.io\u002Fmanaged-by: helm\n\ndeployment:\n  metadata:\n    labels:\n      \u003C\u003C: *common_labels\n      app.kubernetes.io\u002Fcomponent: api\n",[29,802,803,815,825,835,839,846,853,860,871],{"__ignoreMap":39},[43,804,805,808,810,812],{"class":45,"line":46},[43,806,807],{"class":49},"common_labels",[43,809,54],{"class":53},[43,811,31],{"class":57},[43,813,814],{"class":60},"common_labels\n",[43,816,817,820,822],{"class":45,"line":64},[43,818,819],{"class":49},"  app.kubernetes.io\u002Fpart-of",[43,821,54],{"class":53},[43,823,824],{"class":95},"myapp\n",[43,826,827,830,832],{"class":45,"line":76},[43,828,829],{"class":49},"  app.kubernetes.io\u002Fmanaged-by",[43,831,54],{"class":53},[43,833,834],{"class":95},"helm\n",[43,836,837],{"class":45,"line":87},[43,838,162],{"emptyLinePlaceholder":161},[43,840,841,844],{"class":45,"line":158},[43,842,843],{"class":49},"deployment",[43,845,171],{"class":53},[43,847,848,851],{"class":45,"line":165},[43,849,850],{"class":49},"  metadata",[43,852,171],{"class":53},[43,854,855,858],{"class":45,"line":174},[43,856,857],{"class":49},"    labels",[43,859,171],{"class":53},[43,861,862,865,867,869],{"class":45,"line":186},[43,863,864],{"class":72},"      \u003C\u003C",[43,866,54],{"class":53},[43,868,116],{"class":57},[43,870,814],{"class":53},[43,872,873,876,878],{"class":45,"line":196},[43,874,875],{"class":49},"      app.kubernetes.io\u002Fcomponent",[43,877,54],{"class":53},[43,879,880],{"class":95},"api\n",[365,882,884],{"id":883},"docker-compose","Docker Compose",[34,886,888],{"className":36,"code":887,"language":38,"meta":39,"style":39},"x-common: &common\n  restart: unless-stopped\n  logging:\n    driver: json-file\n    options:\n      max-size: \"10m\"\n\nservices:\n  web:\n    \u003C\u003C: *common\n    image: myapp-web\n    ports:\n      - \"3000:3000\"\n\n  worker:\n    \u003C\u003C: *common\n    image: myapp-worker\n",[29,889,890,902,912,919,929,936,946,950,957,964,975,985,992,999,1003,1010,1020],{"__ignoreMap":39},[43,891,892,895,897,899],{"class":45,"line":46},[43,893,894],{"class":49},"x-common",[43,896,54],{"class":53},[43,898,31],{"class":57},[43,900,901],{"class":60},"common\n",[43,903,904,907,909],{"class":45,"line":64},[43,905,906],{"class":49},"  restart",[43,908,54],{"class":53},[43,910,911],{"class":95},"unless-stopped\n",[43,913,914,917],{"class":45,"line":76},[43,915,916],{"class":49},"  logging",[43,918,171],{"class":53},[43,920,921,924,926],{"class":45,"line":87},[43,922,923],{"class":49},"    driver",[43,925,54],{"class":53},[43,927,928],{"class":95},"json-file\n",[43,930,931,934],{"class":45,"line":158},[43,932,933],{"class":49},"    options",[43,935,171],{"class":53},[43,937,938,941,943],{"class":45,"line":165},[43,939,940],{"class":49},"      max-size",[43,942,54],{"class":53},[43,944,945],{"class":95},"\"10m\"\n",[43,947,948],{"class":45,"line":174},[43,949,162],{"emptyLinePlaceholder":161},[43,951,952,955],{"class":45,"line":186},[43,953,954],{"class":49},"services",[43,956,171],{"class":53},[43,958,959,962],{"class":45,"line":196},[43,960,961],{"class":49},"  web",[43,963,171],{"class":53},[43,965,966,969,971,973],{"class":45,"line":207},[43,967,968],{"class":72},"    \u003C\u003C",[43,970,54],{"class":53},[43,972,116],{"class":57},[43,974,901],{"class":53},[43,976,977,980,982],{"class":45,"line":212},[43,978,979],{"class":49},"    image",[43,981,54],{"class":53},[43,983,984],{"class":95},"myapp-web\n",[43,986,987,990],{"class":45,"line":220},[43,988,989],{"class":49},"    ports",[43,991,171],{"class":53},[43,993,994,996],{"class":45,"line":231},[43,995,443],{"class":53},[43,997,998],{"class":95},"\"3000:3000\"\n",[43,1000,1001],{"class":45,"line":766},[43,1002,162],{"emptyLinePlaceholder":161},[43,1004,1005,1008],{"class":45,"line":777},[43,1006,1007],{"class":49},"  worker",[43,1009,171],{"class":53},[43,1011,1012,1014,1016,1018],{"class":45,"line":786},[43,1013,968],{"class":72},[43,1015,54],{"class":53},[43,1017,116],{"class":57},[43,1019,901],{"class":53},[43,1021,1023,1025,1027],{"class":45,"line":1022},17,[43,1024,979],{"class":49},[43,1026,54],{"class":53},[43,1028,1029],{"class":95},"myapp-worker\n",[15,1031,99,1032,1035],{},[29,1033,1034],{},"x-"," prefix is a Docker Compose convention for extension fields — they don't appear in the final config but serve as anchor containers.",[10,1037,1039],{"id":1038},"limitations","Limitations",[1041,1042,1043,1051,1060,1078],"ul",{},[1044,1045,1046,1050],"li",{},[1047,1048,1049],"strong",{},"No circular references",": An alias cannot reference an anchor defined within the same node it merges into.",[1044,1052,1053,1056,1057,1059],{},[1047,1054,1055],{},"Merge key only works with mappings",": You can't use ",[29,1058,247],{}," with sequences or scalars.",[1044,1061,1062,1065,1066,1069,1070,1073,1074,1077],{},[1047,1063,1064],{},"Parser support varies",": Some YAML parsers (especially older ones) don't support merge keys. ",[29,1067,1068],{},"PyYAML"," supports them; ",[29,1071,1072],{},"js-yaml"," supports them; Go's ",[29,1075,1076],{},"gopkg.in\u002Fyaml.v2"," supports them.",[1044,1079,1080,1083,1084,1087,1088,1091,1092,1094],{},[1047,1081,1082],{},"No partial overrides of nested mappings",": The merge key operates at the top level. If you merge a mapping with a nested ",[29,1085,1086],{},"database:"," key, you can't override just ",[29,1089,1090],{},"database.host"," — you must override the entire ",[29,1093,1086],{}," block.",[10,1096,1098],{"id":1097},"key-takeaways","Key Takeaways",[1041,1100,1101,1112,1118,1121,1127,1130],{},[1044,1102,1103,1104,1107,1108,1111],{},"Anchors (",[29,1105,1106],{},"&name",") mark a node for reuse; aliases (",[29,1109,1110],{},"*name",") reference it",[1044,1113,1114,1115,1117],{},"The merge key (",[29,1116,247],{},") inserts keys from an anchored mapping, with local keys taking precedence",[1044,1119,1120],{},"Anchors work with any node type: mappings, sequences, and scalars",[1044,1122,1123,1124,1126],{},"Use extension fields (",[29,1125,1034],{},") in Docker Compose to hold anchors without polluting the output",[1044,1128,1129],{},"Merge key limitations: no nested partial overrides, mappings only, parser support varies",[1044,1131,1132],{},"Anchors and aliases are a parsing-level feature — the consuming application sees only the resolved data",[10,1134,1136],{"id":1135},"related-guides","Related Guides",[1041,1138,1139,1146,1152],{},[1044,1140,1141],{},[1142,1143,1145],"a",{"href":1144},"\u002Fguides\u002Fyaml-syntax-guide","YAML Syntax Guide",[1044,1147,1148],{},[1142,1149,1151],{"href":1150},"\u002Fguides\u002Fjson-vs-yaml","JSON vs YAML",[1044,1153,1154],{},[1142,1155,1157],{"href":1156},"\u002Fguides\u002Fconfiguration-file-formats","Configuration File Formats",[10,1159,1161],{"id":1160},"try-it-yourself","Try It Yourself",[15,1163,1164,1165,1169],{},"Convert between JSON and YAML instantly with our free ",[1142,1166,1168],{"href":1167},"\u002Ftools\u002Fjson-yaml","JSON-YAML Converter",". Paste your config, see the anchors resolved, and switch formats in one click.",[1171,1172,1173],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":39,"searchDepth":64,"depth":64,"links":1175},[1176,1177,1178,1179,1183,1187,1192,1193,1194,1195],{"id":12,"depth":64,"text":13},{"id":23,"depth":64,"text":24},{"id":109,"depth":64,"text":110},{"id":251,"depth":64,"text":1180,"children":1181},"The Merge Key (\u003C\u003C)",[1182],{"id":367,"depth":76,"text":368},{"id":490,"depth":64,"text":491,"children":1184},[1185,1186],{"id":497,"depth":76,"text":498},{"id":574,"depth":76,"text":575},{"id":645,"depth":64,"text":646,"children":1188},[1189,1190,1191],{"id":649,"depth":76,"text":650},{"id":796,"depth":76,"text":797},{"id":883,"depth":76,"text":884},{"id":1038,"depth":64,"text":1039},{"id":1097,"depth":64,"text":1098},{"id":1135,"depth":64,"text":1136},{"id":1160,"depth":64,"text":1161},"2026-05-28","Learn how YAML anchors and aliases reduce repetition in config files — syntax, merging keys, and real-world patterns for Kubernetes, CI\u002FCD, and more.","md",{"immutable":161},"\u002Fguides\u002Fyaml-anchors-aliases-explained",{"title":5,"description":1197},"guides\u002Fyaml-anchors-aliases-explained","bVaslgJL1WNq1RIqOPKiaqwGFuPMGdQBefVJNCBig8o",1780401338564]