[{"data":1,"prerenderedAt":511},["ShallowReactive",2],{"i-base:v-logo":3,"i-lucide:user":8,"i-lucide:folder-kanban":11,"i-lucide:heart":13,"i-lucide:file-text":15,"i-lucide:sun":17,"i-lucide:github":19,"i-lucide:twitter":22,"i-lucide:linkedin":24,"i-simple-icons:reddit":26,"i-lucide:globe":28,"article-til-shiki-multitheme-code-block-background":30,"articles-all":465,"i-lucide:arrow-left":509},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,512,false,"\u003Cg fill=\"currentColor\">\u003Cg transform=\"translate(0,512) scale(0.1,-0.1)\">\n    \u003Cpath d=\"M2866 3193 c-203 -209 -341 -393 -541 -718 -57 -93 -198 -309 -212 -325 -9 -9 -22 26 -28 75 -4 27 -8 61 -10 75 -2 14 -7 70 -10 125 -21 363 -72 541 -187 656 -30 30 -54 64 -56 78 -7 55 -65 113 -130 130 -21 6 -34 1 -62 -23 -64 -57 -86 -84 -97 -119 -12 -41 -9 -201 7 -349 6 -57 12 -204 12 -327 0 -191 2 -232 18 -270 10 -27 20 -89 24 -148 5 -92 21 -182 84 -478 12 -56 30 -105 46 -129 14 -21 27 -48 27 -60 1 -12 3 -39 4 -61 1 -23 8 -41 16 -44 8 -2 39 -31 69 -63 66 -72 98 -90 159 -91 133 -1 245 118 254 271 4 67 7 74 45 114 22 24 50 55 61 70 33 42 81 138 81 162 0 12 21 44 50 74 27 28 63 80 80 114 57 114 131 230 244 378 48 64 213 266 249 305 78 85 167 207 167 230 0 14 11 47 23 73 34 67 29 133 -20 252 l-38 95 -50 6 c-28 3 -67 13 -87 22 -21 10 -47 17 -58 17 -13 0 -62 -43 -134 -117z\"\u002F>\n    \u003Cpath d=\"M3070 1649 c-30 -44 -76 -96 -102 -115 -27 -20 -48 -40 -48 -45 0 -5 8 -21 17 -36 17 -25 17 -27 -5 -41 l-22 -14 30 -35 c17 -18 30 -39 30 -47 0 -36 34 -118 58 -140 102 -92 120 -104 159 -100 108 10 153 24 153 49 0 7 27 28 59 45 62 33 92 74 90 121 -1 13 10 57 25 97 32 87 33 90 17 165 -15 70 -24 75 -177 111 -159 38 -194 48 -200 57 -12 21 -32 4 -84 -72z\"\u002F>\n  \u003C\u002Fg>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":10},24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"\u002F>\u003Ccircle cx=\"12\" cy=\"7\" r=\"4\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":12},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2m4-10v4m4-4v2m4-2v6\"\u002F>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":14},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676a.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\"\u002F>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":16},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"\u002F>\u003Cpath d=\"M14 2v5a1 1 0 0 0 1 1h5M10 9H8m8 4H8m8 4H8\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":18},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":20,"hidden":21},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5c.08-1.25-.27-2.48-1-3.5c.28-1.15.28-2.35 0-3.5c0 0-1 0-3 1.5c-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.4 5.4 0 0 0 4 9c0 3.5 3 5.5 6 5.5c-.39.49-.68 1.05-.85 1.65S8.93 17.38 9 18v4\"\u002F>\u003Cpath d=\"M9 18c-4.51 2-5-2-7-2\"\u002F>\u003C\u002Fg>",true,{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":23,"hidden":21},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6c2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4c-.9-4.2 4-6.6 7-3.8c1.1 0 3-1.2 3-1.2\"\u002F>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":25,"hidden":21},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2a2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6M2 9h4v12H2z\"\u002F>\u003Ccircle cx=\"4\" cy=\"4\" r=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":27},"\u003Cpath fill=\"currentColor\" d=\"M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286A.72.72 0 0 0 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0m4.388 3.199a1.999 1.999 0 1 1-1.947 2.46v.002a2.37 2.37 0 0 0-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363a2.802 2.802 0 1 1 2.908 4.753c-.088 3.256-3.637 5.876-7.997 5.876c-4.361 0-7.905-2.617-7.998-5.87a2.8 2.8 0 0 1 1.189-5.34c.645 0 1.239.218 1.712.585c1.275-.79 2.881-1.291 4.64-1.365v-.01a3.23 3.23 0 0 1 2.88-3.207a2 2 0 0 1 1.959-1.595m-8.085 8.376c-.784 0-1.459.78-1.506 1.797s.64 1.429 1.426 1.429s1.371-.369 1.418-1.385s-.553-1.841-1.338-1.841m7.406 0c-.786 0-1.385.824-1.338 1.841s.634 1.385 1.418 1.385c.785 0 1.473-.413 1.426-1.429c-.046-1.017-.721-1.797-1.506-1.797m-3.703 4.013c-.974 0-1.907.048-2.77.135a.222.222 0 0 0-.183.305a3.2 3.2 0 0 0 2.953 1.964a3.2 3.2 0 0 0 2.953-1.964a.222.222 0 0 0-.184-.305a28 28 0 0 0-2.769-.135\"\u002F>",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":29},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 2a14.5 14.5 0 0 0 0 20a14.5 14.5 0 0 0 0-20M2 12h20\"\u002F>\u003C\u002Fg>",{"id":31,"title":32,"body":33,"category":450,"date":451,"description":452,"extension":453,"image":454,"meta":455,"navigation":21,"path":456,"seo":457,"status":458,"stem":459,"tags":460,"updatedAt":454,"__hash__":464},"articles\u002Farticles\u002F4.til-shiki-multitheme-code-block-background.md","TIL: Shiki multi-theme highlighting does not switch the code-block background",{"type":34,"value":35,"toc":446},"minimark",[36,40,170,173,178,185,298,325,329,332,432,435,442],[37,38,39],"p",{},"I gave the code blocks on this very blog a light and dark theme via Nuxt Content's multi-theme Shiki config:",[41,42,47],"pre",{"className":43,"code":44,"language":45,"meta":46,"style":46},"language-ts shiki shiki-themes github-dark github-dark github-light","export default defineNuxtConfig({\n  content: {\n    build: {\n      markdown: {\n        highlight: {\n          theme: {\n            default: 'github-dark',\n            dark: 'github-dark',\n            light: 'github-light',\n          },\n        },\n      },\n    },\n  },\n});\n","ts","",[48,49,50,70,76,82,88,94,100,113,123,134,140,146,152,158,164],"code",{"__ignoreMap":46},[51,52,55,59,62,66],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"s6ubI","export",[51,60,61],{"class":57}," default",[51,63,65],{"class":64},"s5n6i"," defineNuxtConfig",[51,67,69],{"class":68},"sAvwS","({\n",[51,71,73],{"class":53,"line":72},2,[51,74,75],{"class":68},"  content: {\n",[51,77,79],{"class":53,"line":78},3,[51,80,81],{"class":68},"    build: {\n",[51,83,85],{"class":53,"line":84},4,[51,86,87],{"class":68},"      markdown: {\n",[51,89,91],{"class":53,"line":90},5,[51,92,93],{"class":68},"        highlight: {\n",[51,95,97],{"class":53,"line":96},6,[51,98,99],{"class":68},"          theme: {\n",[51,101,103,106,110],{"class":53,"line":102},7,[51,104,105],{"class":68},"            default: ",[51,107,109],{"class":108},"s4Y1p","'github-dark'",[51,111,112],{"class":68},",\n",[51,114,116,119,121],{"class":53,"line":115},8,[51,117,118],{"class":68},"            dark: ",[51,120,109],{"class":108},[51,122,112],{"class":68},[51,124,126,129,132],{"class":53,"line":125},9,[51,127,128],{"class":68},"            light: ",[51,130,131],{"class":108},"'github-light'",[51,133,112],{"class":68},[51,135,137],{"class":53,"line":136},10,[51,138,139],{"class":68},"          },\n",[51,141,143],{"class":53,"line":142},11,[51,144,145],{"class":68},"        },\n",[51,147,149],{"class":53,"line":148},12,[51,150,151],{"class":68},"      },\n",[51,153,155],{"class":53,"line":154},13,[51,156,157],{"class":68},"    },\n",[51,159,161],{"class":53,"line":160},14,[51,162,163],{"class":68},"  },\n",[51,165,167],{"class":53,"line":166},15,[51,168,169],{"class":68},"});\n",[37,171,172],{},"In dark mode the code blocks looked great. In light mode the syntax colours were correct GitHub-light tokens, but they were sitting on a dark background, so the dark text was nearly invisible.",[174,175,177],"h2",{"id":176},"what-is-actually-happening","What is actually happening",[37,179,180,181,184],{},"Multi-theme Shiki emits per-token CSS variables and switches them with the colour-mode class on the ",[48,182,183],{},"\u003Chtml>"," element:",[41,186,190],{"className":187,"code":188,"language":189,"meta":46,"style":46},"language-css shiki shiki-themes github-dark github-dark github-light","html .shiki span {\n  color: var(--shiki-default);\n}\nhtml.dark .shiki span {\n  color: var(--shiki-dark);\n}\nhtml.light .shiki span {\n  color: var(--shiki-light);\n}\n","css",[48,191,192,207,229,234,247,262,266,279,294],{"__ignoreMap":46},[51,193,194,198,201,204],{"class":53,"line":54},[51,195,197],{"class":196},"sxkHK","html",[51,199,200],{"class":64}," .shiki",[51,202,203],{"class":196}," span",[51,205,206],{"class":68}," {\n",[51,208,209,213,216,219,222,226],{"class":53,"line":72},[51,210,212],{"class":211},"sXWYR","  color",[51,214,215],{"class":68},": ",[51,217,218],{"class":211},"var",[51,220,221],{"class":68},"(",[51,223,225],{"class":224},"sAzo5","--shiki-default",[51,227,228],{"class":68},");\n",[51,230,231],{"class":53,"line":78},[51,232,233],{"class":68},"}\n",[51,235,236,238,241,243,245],{"class":53,"line":84},[51,237,197],{"class":196},[51,239,240],{"class":64},".dark",[51,242,200],{"class":64},[51,244,203],{"class":196},[51,246,206],{"class":68},[51,248,249,251,253,255,257,260],{"class":53,"line":90},[51,250,212],{"class":211},[51,252,215],{"class":68},[51,254,218],{"class":211},[51,256,221],{"class":68},[51,258,259],{"class":224},"--shiki-dark",[51,261,228],{"class":68},[51,263,264],{"class":53,"line":96},[51,265,233],{"class":68},[51,267,268,270,273,275,277],{"class":53,"line":102},[51,269,197],{"class":196},[51,271,272],{"class":64},".light",[51,274,200],{"class":64},[51,276,203],{"class":196},[51,278,206],{"class":68},[51,280,281,283,285,287,289,292],{"class":53,"line":115},[51,282,212],{"class":211},[51,284,215],{"class":68},[51,286,218],{"class":211},[51,288,221],{"class":68},[51,290,291],{"class":224},"--shiki-light",[51,293,228],{"class":68},[51,295,296],{"class":53,"line":125},[51,297,233],{"class":68},[37,299,300,301,304,305,308,309,312,313,316,317,321,322,324],{},"That part works. The problem is the container. The ",[48,302,303],{},"\u003Cpre>"," element is styled with ",[48,306,307],{},"background: var(--shiki-default-bg)",", but the ",[48,310,311],{},"--shiki-light-bg"," and ",[48,314,315],{},"--shiki-dark-bg"," variables are ",[318,319,320],"strong",{},"never actually defined",". So the block's background does not change with the colour mode. In light mode you get light-theme dark tokens on whatever single background the ",[48,323,303],{}," inherited.",[174,326,328],{"id":327},"the-fix","The fix",[37,330,331],{},"Stop relying on Shiki for the block background and drive it from your own tokens, one rule per mode:",[41,333,335],{"className":187,"code":334,"language":189,"meta":46,"style":46},".prose pre.shiki {\n  background-color: oklch(0.96 0 0);\n  color: var(--foreground);\n}\n\n.dark .prose pre.shiki {\n  background-color: oklch(0.205 0 0);\n}\n",[48,336,337,350,372,387,391,396,409,428],{"__ignoreMap":46},[51,338,339,342,345,348],{"class":53,"line":54},[51,340,341],{"class":64},".prose",[51,343,344],{"class":196}," pre",[51,346,347],{"class":64},".shiki",[51,349,206],{"class":68},[51,351,352,355,357,360,362,365,368,370],{"class":53,"line":72},[51,353,354],{"class":211},"  background-color",[51,356,215],{"class":68},[51,358,359],{"class":211},"oklch",[51,361,221],{"class":68},[51,363,364],{"class":211},"0.96",[51,366,367],{"class":211}," 0",[51,369,367],{"class":211},[51,371,228],{"class":68},[51,373,374,376,378,380,382,385],{"class":53,"line":78},[51,375,212],{"class":211},[51,377,215],{"class":68},[51,379,218],{"class":211},[51,381,221],{"class":68},[51,383,384],{"class":224},"--foreground",[51,386,228],{"class":68},[51,388,389],{"class":53,"line":84},[51,390,233],{"class":68},[51,392,393],{"class":53,"line":90},[51,394,395],{"emptyLinePlaceholder":21},"\n",[51,397,398,400,403,405,407],{"class":53,"line":96},[51,399,240],{"class":64},[51,401,402],{"class":64}," .prose",[51,404,344],{"class":196},[51,406,347],{"class":64},[51,408,206],{"class":68},[51,410,411,413,415,417,419,422,424,426],{"class":53,"line":102},[51,412,354],{"class":211},[51,414,215],{"class":68},[51,416,359],{"class":211},[51,418,221],{"class":68},[51,420,421],{"class":211},"0.205",[51,423,367],{"class":211},[51,425,367],{"class":211},[51,427,228],{"class":68},[51,429,430],{"class":53,"line":115},[51,431,233],{"class":68},[37,433,434],{},"This also lets the code block match the rest of your palette instead of GitHub's hardcoded backgrounds. Token colours keep switching via Shiki's variables; you own the container.",[37,436,437,438,441],{},"The way I caught this was a browser check of the actual computed style: ",[48,439,440],{},"getComputedStyle(pre).backgroundColor",". It was reporting the same value in both modes, which told me immediately that the container, not the tokens, was the thing that never switched.",[443,444,445],"style",{},"html pre.shiki code .s6ubI, html code.shiki .s6ubI{--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-light:#D73A49}html pre.shiki code .s5n6i, html code.shiki .s5n6i{--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-light:#6F42C1}html pre.shiki code .sAvwS, html code.shiki .sAvwS{--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-light:#24292E}html pre.shiki code .s4Y1p, html code.shiki .s4Y1p{--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-light:#032F62}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 .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .sxkHK, html code.shiki .sxkHK{--shiki-default:#85E89D;--shiki-dark:#85E89D;--shiki-light:#22863A}html pre.shiki code .sXWYR, html code.shiki .sXWYR{--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-light:#005CC5}html pre.shiki code .sAzo5, html code.shiki .sAzo5{--shiki-default:#FFAB70;--shiki-dark:#FFAB70;--shiki-light:#E36209}",{"title":46,"searchDepth":72,"depth":72,"links":447},[448,449],{"id":176,"depth":72,"text":177},{"id":327,"depth":72,"text":328},"nuxt","2026-07-07T02:30:00.000+05:30","Shiki multi-theme mode swaps token colours per colour scheme but leaves the pre background variable empty, so light-theme text can land on a dark block. You have to theme the container yourself.","md",null,{"position":84},"\u002Farticles\u002Ftil-shiki-multitheme-code-block-background",{"title":32,"description":452},"published","articles\u002F4.til-shiki-multitheme-code-block-background",[450,461,462,463],"shiki","nuxt-content","dark-mode","izotlSMSVaN0w9HIfHjbEZTv8Pkbx_dvWujLpeG73g4",[466,468,478,486,494,500],{"path":456,"title":32,"description":452,"date":451,"updatedAt":454,"category":450,"tags":467,"image":454,"status":458},[450,461,462,463],{"path":469,"title":470,"description":471,"date":472,"updatedAt":454,"category":473,"tags":474,"image":454,"status":458},"\u002Farticles\u002Fdynamic-og-images-on-cloudflare-workers","Generating dynamic Open Graph images on Cloudflare Workers","Rendering per-page and per-article social cards at the edge with Satori and @cf-wasm\u002Fog: how the route works, what Satori refuses to render, and the cold-versus-warm numbers.","2026-07-06T22:00:00.000+05:30","cloudflare",[473,475,476,477,450],"workers","open-graph","satori",{"path":479,"title":480,"description":481,"date":482,"updatedAt":454,"category":473,"tags":483,"image":454,"status":458},"\u002Farticles\u002Fmigrating-a-nuxt-site-from-cloudflare-pages-to-workers","Migrating a Nuxt site from Cloudflare Pages to Workers","The full path from the cloudflare-pages preset to a cloudflare_module Worker: the config changes, the custom-domain cutover that no deploy step handles for you, and the gotchas that only show up in CI.","2026-07-06T21:00:00.000+05:30",[473,475,450,484,485],"nitro","devops",{"path":487,"title":488,"description":489,"date":490,"updatedAt":454,"category":189,"tags":491,"image":454,"status":458},"\u002Farticles\u002Ftil-tailwind-v4-webkit-mask-prefix","TIL: Tailwind v4 mask utilities need the webkit prefix in plain CSS","Porting a Tailwind mask-composite utility to scoped CSS quietly breaks in Chrome and Safari unless you also write the -webkit-mask-* properties, because Tailwind was emitting them for you.","2026-07-06T20:15:00.000+05:30",[492,189,493],"tailwind","webkit",{"path":495,"title":496,"description":497,"date":498,"updatedAt":454,"category":473,"tags":499,"image":454,"status":458},"\u002Farticles\u002Ftil-workers-cache-nitro-passthrough","TIL: Enabling Workers Cache through Nitro without a native option","Nitro forwards arbitrary keys into the generated wrangler config, so you can turn on Cloudflare Workers Cache with a single line even though there is no dedicated Nitro option for it.","2026-07-06T14:30:00.000+05:30",[473,475,484,450],{"path":501,"title":502,"description":503,"date":504,"updatedAt":454,"category":505,"tags":506,"image":454,"status":458},"\u002Farticles\u002Fbuild-and-publish-vue-3-components-using-rollup","Build & Publish Vue 3 Components using Rollup.js","Let's build a reusable Vue 3 component using rollup","2022-07-04T16:20:09.000+05:30","vue",[507,508],"vue 3","rollup",{"left":4,"top":4,"width":9,"height":9,"rotate":4,"vFlip":6,"hFlip":6,"body":510},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",1783374868970]