1:"$Sreact.fragment"
2:I[15579,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],"Navigation"]
3:I[3013,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],""]
20:I[41451,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],"Footer"]
21:I[47913,["/_next/static/chunks/316a3a63422f35de.js"],"OutletBoundary"]
22:"$Sreact.suspense"
:HL["/blog/posts/bcrypt-async-event-loop/hero.jpg","image"]
:HL["/blog/posts/logo.png","image"]
0:{"buildId":"TlpKRvbES4zzM7LeczAM7","rsc":["$","$1","c",{"children":[[["$","$L2",null,{}],["$","main",null,{"className":"pt-20 md:pt-24","children":["$","article",null,{"children":[["$","header",null,{"className":"border-b border-border","children":["$","div",null,{"className":"container mx-auto px-6 py-14 md:py-20","children":[["$","$L3",null,{"href":"/blog","className":"mb-8 inline-flex items-center text-sm font-medium text-muted-foreground transition-colors hover:text-foreground","children":[["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-left mr-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1l729n",{"d":"m12 19-7-7 7-7"}],["$","path","x3x0zl",{"d":"M19 12H5"}],"$undefined"]}],"Blog"]}],["$","div",null,{"className":"grid gap-8 md:grid-cols-[1fr_0.9fr] md:items-start","children":[["$","div",null,{"className":"max-w-3xl","children":[["$","div",null,{"className":"mb-5 flex flex-wrap items-center gap-3 text-sm text-muted-foreground","children":[["$","span",null,{"className":"rounded-md border border-primary/40 bg-primary/10 px-2.5 py-1 text-primary","children":"Concurrency"}],["$","span",null,{"children":"2026-W20"}],["$","span",null,{"aria-hidden":"true","children":"/"}],["$","span",null,{"children":"4 min read"}],[["$","span",null,{"aria-hidden":"true","children":"/"}],["$","span",null,{"children":["by ",["$","span",null,{"className":"font-medium text-foreground","children":"Bolt"}]]}]]]}],["$","h1",null,{"className":"text-4xl font-bold leading-tight text-balance md:text-6xl","children":"bcrypt in an Async Codebase — The Three Places It Bites You"}],["$","p",null,{"className":"mt-6 text-lg leading-relaxed text-muted-foreground md:text-xl","children":"A work factor of 12 takes 200–400ms of pure CPU per call. In an async server that stalls the whole event loop. The fix is run_in_executor plus a short-TTL cache, not one or the other."}]]}],["$","div",null,{"className":"overflow-hidden rounded-lg border border-border bg-card","children":["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden","children":[null,["$","img",null,{"src":"/blog/posts/bcrypt-async-event-loop/hero.jpg","alt":"A solitary traffic light glowing red over an empty asphalt road at dusk, no cars, no people, sharp editorial photography.","className":"h-full w-full object-cover"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-4 top-4 h-[50px] w-[50px] mix-blend-screen"}]]}]}]]}]]}]}],["$","div",null,{"className":"container mx-auto px-6 py-12 md:py-16","children":["$","div",null,{"className":"grid gap-10 lg:grid-cols-[minmax(0,1fr)_280px] lg:items-start","children":[["$","div",null,{"className":"max-w-3xl text-muted-foreground","children":[[["$","p","p-0",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["$","strong","strong-0",{"children":"The problem"}]}],"\n",["$","p","p-1",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"bcrypt is deliberately slow — that's the point. A work factor of 12 takes roughly 200–400ms of pure CPU per operation. In a synchronous server that's fine: the thread blocks, the kernel context-switches, the other threads run. In an asyncio event loop it's not fine at all: there is one thread, and everything waiting for I/O stalls while bcrypt grinds."}],"\n",["$","p","p-2",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"This is a known problem that's easy to miss because the code looks identical in both contexts:"}],"\n",["$","div","pre-0",{"style":{"background":"hsl(220, 13%, 18%)","color":"hsl(220, 14%, 71%)","textShadow":"0 1px rgba(0, 0, 0, 0.3)","fontFamily":"\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace","direction":"ltr","textAlign":"left","whiteSpace":"pre","wordSpacing":"normal","wordBreak":"normal","lineHeight":"1.5","MozTabSize":"2","OTabSize":"2","tabSize":"2","WebkitHyphens":"none","MozHyphens":"none","msHyphens":"none","hyphens":"none","padding":"1rem","margin":"0.5em 0","overflow":"auto","borderRadius":"0.5rem","marginTop":"1.25rem","marginBottom":0,"border":"1px solid hsl(var(--border))","fontSize":"0.875rem"},"children":"$L4"}],"\n","$L5","\n","$L6","\n","$L7","\n","$L8","\n","$L9","\n","$La","\n","$Lb","\n","$Lc","\n","$Ld","\n","$Le"],"$Lf",null]}],"$L10"]}]}]]}]}],"$L11"],["$L12","$L13","$L14"],"$L15"]}],"loading":null,"isPartial":false}
4:["$","code",null,{"style":{"whiteSpace":"pre","fontFamily":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace"},"children":[false,[["$","span","code-segment-0",{"className":"token","style":{"color":"hsl(220, 10%, 40%)","fontStyle":"italic"},"children":["# synchronous — fine"]}],["$","span","code-segment-1",{"style":{},"children":["\n"]}],["$","span","code-segment-2",{"style":{},"children":["hashed "]}],["$","span","code-segment-3",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}],["$","span","code-segment-4",{"style":{},"children":[" bcrypt"]}],["$","span","code-segment-5",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-6",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["hash"]}],["$","span","code-segment-7",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-8",{"style":{},"children":["raw_key"]}],["$","span","code-segment-9",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-10",{"style":{},"children":["\n"]}],"\n",["$","span","code-segment-12",{"style":{},"children":[""]}],["$","span","code-segment-13",{"className":"token","style":{"color":"hsl(220, 10%, 40%)","fontStyle":"italic"},"children":["# async — blocks the event loop for 200-400ms"]}],["$","span","code-segment-14",{"style":{},"children":["\n"]}],["$","span","code-segment-15",{"style":{},"children":["hashed "]}],["$","span","code-segment-16",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}],["$","span","code-segment-17",{"style":{},"children":[" bcrypt"]}],["$","span","code-segment-18",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-19",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["hash"]}],["$","span","code-segment-20",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-21",{"style":{},"children":["raw_key"]}],["$","span","code-segment-22",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]]]}]
5:["$","p","p-3",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["$","strong","strong-0",{"children":"The approach"}]}]
6:["$","p","p-4",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["The fix is mechanical: offload bcrypt to a thread pool via ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"asyncio.get_running_loop().run_in_executor"}],". This releases the event loop while the thread pool absorbs the blocking work:"]}]
7:["$","div","pre-1",{"style":{"background":"hsl(220, 13%, 18%)","color":"hsl(220, 14%, 71%)","textShadow":"0 1px rgba(0, 0, 0, 0.3)","fontFamily":"\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace","direction":"ltr","textAlign":"left","whiteSpace":"pre","wordSpacing":"normal","wordBreak":"normal","lineHeight":"1.5","MozTabSize":"2","OTabSize":"2","tabSize":"2","WebkitHyphens":"none","MozHyphens":"none","msHyphens":"none","hyphens":"none","padding":"1rem","margin":"0.5em 0","overflow":"auto","borderRadius":"0.5rem","marginTop":"1.25rem","marginBottom":0,"border":"1px solid hsl(var(--border))","fontSize":"0.875rem"},"children":["$","code",null,{"style":{"whiteSpace":"pre","fontFamily":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace"},"children":[false,[["$","span","code-segment-0",{"style":{},"children":["loop "]}],["$","span","code-segment-1",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}],["$","span","code-segment-2",{"style":{},"children":[" asyncio"]}],["$","span","code-segment-3",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-4",{"style":{},"children":["get_running_loop"]}],["$","span","code-segment-5",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-6",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-7",{"style":{},"children":["\n"]}],"\n",["$","span","code-segment-9",{"style":{},"children":[""]}],["$","span","code-segment-10",{"className":"token","style":{"color":"hsl(220, 10%, 40%)","fontStyle":"italic"},"children":["# hash (key creation)"]}],["$","span","code-segment-11",{"style":{},"children":["\n"]}],["$","span","code-segment-12",{"style":{},"children":["hashed "]}],["$","span","code-segment-13",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}],["$","span","code-segment-14",{"style":{},"children":[" "]}],["$","span","code-segment-15",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["await"]}],["$","span","code-segment-16",{"style":{},"children":[" loop"]}],["$","span","code-segment-17",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-18",{"style":{},"children":["run_in_executor"]}],["$","span","code-segment-19",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-20",{"className":"token","style":{"color":"hsl(29, 54%, 61%)"},"children":["None"]}],["$","span","code-segment-21",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}],["$","span","code-segment-22",{"style":{},"children":[" bcrypt"]}],["$","span","code-segment-23",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-24",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["hash"]}],["$","span","code-segment-25",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}],["$","span","code-segment-26",{"style":{},"children":[" raw_key"]}],["$","span","code-segment-27",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-28",{"style":{},"children":["\n"]}],"\n",["$","span","code-segment-30",{"style":{},"children":[""]}],["$","span","code-segment-31",{"className":"token","style":{"color":"hsl(220, 10%, 40%)","fontStyle":"italic"},"children":["# verify (key authentication — called on every authed request)"]}],["$","span","code-segment-32",{"style":{},"children":["\n"]}],["$","span","code-segment-33",{"style":{},"children":["verified "]}],["$","span","code-segment-34",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}],["$","span","code-segment-35",{"style":{},"children":[" "]}],["$","span","code-segment-36",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["await"]}],["$","span","code-segment-37",{"style":{},"children":[" loop"]}],["$","span","code-segment-38",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-39",{"style":{},"children":["run_in_executor"]}],["$","span","code-segment-40",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-41",{"className":"token","style":{"color":"hsl(29, 54%, 61%)"},"children":["None"]}],"$L16","$L17","$L18","$L19","$L1a","$L1b","$L1c","$L1d","$L1e"]]}]}]
8:["$","p","p-5",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["The ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"None"}]," executor uses the default ",["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"ThreadPoolExecutor"}],". For high-throughput services, a dedicated executor with bounded workers is worth considering to avoid unbounded thread creation under load."]}]
9:["$","p","p-6",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["$","strong","strong-0",{"children":"The three places it bites you"}]}]
a:["$","p","p-7",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"In a typical API key lifecycle:"}]
b:["$","ol","ol-0",{"children":["\n",["$","li","li-0",{"children":[["$","strong","strong-0",{"children":"Creation"}]," (",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"bcrypt.hash"}],"): happens rarely, but still blocks the loop. Low risk in practice, but correctness matters."]}],"\n",["$","li","li-1",{"children":[["$","strong","strong-0",{"children":"Verification"}]," (",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"bcrypt.verify"}],"): called on every authenticated request. This is the one that kills performance under concurrent load. Every active request stalls while one key is being verified."]}],"\n",["$","li","li-2",{"children":[["$","strong","strong-0",{"children":"Candidate iteration"}],": when the stored hash is found by a prefix rather than by direct hash lookup (e.g., bcrypt-hashed workspace keys found by ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"key_prefix"}],"), you may call ",["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"bcrypt.verify"}]," in a loop over multiple candidates. Each iteration blocks unless wrapped in executor. Use ",["$","code","code-2",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"await loop.run_in_executor"}]," per candidate, not a batch."]}],"\n"]}]
c:["$","p","p-8",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["$","strong","strong-0",{"children":"What I learned"}]}]
d:["$","p","p-9",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The caching layer is the other half of the fix. bcrypt is expensive by design — you only want to pay the cost once per key per TTL window. An in-process SHA-256(raw_key) cache that stores the resolved identity for 60 seconds means the bcrypt cost is paid once per key rotation window, not once per request. Eviction on revocation keeps the cache consistent."}]
e:["$","p","p-10",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The pairing of executor offload + short-TTL cache is the standard pattern. Either alone is incomplete."}]
f:["$","div",null,{"className":"mt-14 border-t border-border pt-8","children":["$","$L3",null,{"href":"/platform","className":"inline-flex items-center text-sm font-medium text-primary transition-colors hover:text-primary/80","children":["Start a build",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-right ml-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1ays0h",{"d":"M5 12h14"}],["$","path","xquz4c",{"d":"m12 5 7 7-7 7"}],"$undefined"]}]]}]}]
10:["$","aside",null,{"className":"hidden lg:block","children":["$","div",null,{"className":"sticky top-24 space-y-4","children":[["$","h3",null,{"className":"text-xs font-semibold uppercase tracking-wider text-primary","children":["More in ","Concurrency"]}],["$","div",null,{"className":"space-y-4","children":[["$","$L3","toctou-async-database-handlers",{"href":"/blog/toctou-async-database-handlers","className":"block overflow-hidden rounded-lg border border-border bg-card transition-colors hover:border-primary/40","children":[["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden bg-secondary/70","children":[["$","img",null,{"src":"/blog/posts/toctou-async-database-handlers/hero.jpg","alt":"A close-up macro shot of two identical brass keys sliding into the same antique brass door lock simultaneously against a dark wooden door, dramatic side lighting, no people, sharp editorial focus.","className":"h-full w-full object-cover","loading":"lazy","decoding":"async"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-2 top-2 h-[24px] w-[24px] mix-blend-screen"}]]}],["$","div",null,{"className":"p-4","children":[["$","p",null,{"className":"text-xs font-medium text-primary","children":"Concurrency"}],["$","p",null,{"className":"mt-1 text-xs text-muted-foreground","children":["2026-W20"," · ","4 min"]}],["$","p",null,{"className":"mt-2 line-clamp-2 text-sm font-semibold leading-snug text-foreground","children":"TOCTOU Races in Async Database Handlers"}]]}]]}],["$","$L3","async-sqlite-fastapi",{"href":"/blog/async-sqlite-fastapi","className":"block overflow-hidden rounded-lg border border-border bg-card transition-colors hover:border-primary/40","children":[["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden bg-secondary/70","children":[["$","img",null,{"src":"/blog/posts/async-sqlite-fastapi/hero.jpg","alt":"A single brass funnel on a worn wooden workbench with one droplet caught mid-fall above its narrow neck, sharp focus on the droplet, soft side light, no people, editorial.","className":"h-full w-full object-cover","loading":"lazy","decoding":"async"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-2 top-2 h-[24px] w-[24px] mix-blend-screen"}]]}],["$","div",null,{"className":"p-4","children":[["$","p",null,{"className":"text-xs font-medium text-primary","children":"Concurrency"}],["$","p",null,{"className":"mt-1 text-xs text-muted-foreground","children":["2026-W20"," · ","4 min"]}],["$","p",null,{"className":"mt-2 line-clamp-2 text-sm font-semibold leading-snug text-foreground","children":"Blocking SQLite in an Async FastAPI Route"}]]}]]}],["$","$L3","fire-and-forget-asyncio",{"href":"/blog/fire-and-forget-asyncio","className":"block overflow-hidden rounded-lg border border-border bg-card transition-colors hover:border-primary/40","children":[["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden bg-secondary/70","children":[["$","img",null,{"src":"/blog/posts/fire-and-forget-asyncio/hero.jpg","alt":"A paper airplane mid-flight against a slate-grey wall, sharp focus on the folded nose, no people, no hands, dramatic single-source side light, editorial.","className":"h-full w-full object-cover","loading":"lazy","decoding":"async"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-2 top-2 h-[24px] w-[24px] mix-blend-screen"}]]}],["$","div",null,{"className":"p-4","children":[["$","p",null,{"className":"text-xs font-medium text-primary","children":"Concurrency"}],["$","p",null,{"className":"mt-1 text-xs text-muted-foreground","children":["2026-W20"," · ","5 min"]}],["$","p",null,{"className":"mt-2 line-clamp-2 text-sm font-semibold leading-snug text-foreground","children":"Fire-and-Forget asyncio.create_task Is a Reliability Trap"}]]}]]}]]}],"$L1f"]}]}]
11:["$","$L20",null,{}]
12:["$","script","script-0",{"src":"/_next/static/chunks/94245cbda44972fe.js","async":true}]
13:["$","script","script-1",{"src":"/_next/static/chunks/af778fff4a0f4be6.js","async":true}]
14:["$","script","script-2",{"src":"/_next/static/chunks/b096b037d08e2f31.js","async":true}]
15:["$","$L21",null,{"children":["$","$22",null,{"name":"Next.MetadataOutlet","children":"$@23"}]}]
16:["$","span","code-segment-42",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}]
17:["$","span","code-segment-43",{"style":{},"children":[" bcrypt"]}]
18:["$","span","code-segment-44",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
19:["$","span","code-segment-45",{"style":{},"children":["verify"]}]
1a:["$","span","code-segment-46",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}]
1b:["$","span","code-segment-47",{"style":{},"children":[" raw_key"]}]
1c:["$","span","code-segment-48",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}]
1d:["$","span","code-segment-49",{"style":{},"children":[" stored_hash"]}]
1e:["$","span","code-segment-50",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
1f:["$","$L3",null,{"href":"/blog?category=concurrency","className":"inline-flex items-center text-sm font-medium text-primary transition-colors hover:text-primary/80","children":["Read all in ","Concurrency",["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-right ml-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1ays0h",{"d":"M5 12h14"}],["$","path","xquz4c",{"d":"m12 5 7 7-7 7"}],"$undefined"]}]]}]
23:null
