[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-netlify-netlify-blobs":3,"mdc--s1slzi-key":33,"related-repo-netlify-netlify-blobs":2960,"related-org-netlify-netlify-blobs":3062},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":31,"mdContent":32},"netlify-blobs","manage file storage with Netlify Blobs","Guide for using Netlify Blobs for file and asset storage — images, documents, uploads, exports, cached binary artifacts. Covers getStore(), CRUD operations, metadata, listing, deploy-scoped vs site-scoped stores, and local development. Do NOT use Blobs as a dynamic data store — use Netlify Database for that.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"netlify","Netlify","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnetlify.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Backend","backend","tag",{"name":17,"slug":18,"type":15},"File Storage","file-storage",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Storage","storage",24,"https:\u002F\u002Fgithub.com\u002Fnetlify\u002Fcontext-and-tools","2026-07-17T05:30:16.503306",null,5,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fnetlify\u002Fcontext-and-tools\u002Ftree\u002FHEAD\u002Fskills\u002Fnetlify-blobs","---\nname: netlify-blobs\ndescription: Guide for using Netlify Blobs for file and asset storage — images, documents, uploads, exports, cached binary artifacts. Covers getStore(), CRUD operations, metadata, listing, deploy-scoped vs site-scoped stores, and local development. Do NOT use Blobs as a dynamic data store — use Netlify Database for that.\n---\n\n# Netlify Blobs\n\nNetlify Blobs is zero-config object storage for **files and assets**: images, documents, uploads, exports, cached binary artifacts. Available from any Netlify compute (functions, edge functions, framework server routes). No provisioning required.\n\n**Not for dynamic data.** If the project needs to store records, user data, application state, or anything queryable, use Netlify Database instead — see `netlify-database\u002FSKILL.md`. Reach for Blobs when the thing you're storing is a file or an asset blob, not a record.\n\n```bash\nnpm install @netlify\u002Fblobs\n```\n\n## Before you build\n\nIf the prompt didn't already specify, ask the user a few short questions before scaffolding any blob storage — answers shape access patterns, scoping, and how the assets are served back to clients:\n\n- **What kind of asset?** (User uploads, exported documents, cached binaries, generated images — drives the storage and serving pattern.)\n- **Who should be able to read it?** Public (anyone with a URL, or an unauthenticated endpoint that streams the blob) or private (only authenticated users, gated by your server code)? Blobs have **no built-in access control** — the serving layer is the gate. When in doubt, default to private; making something public later is easy, while pulling back data that was inadvertently exposed is not.\n- **Site-scoped or deploy-scoped?** Site-scoped (`getStore()`) persists across deploys — the right default for user data. Deploy-scoped (`getDeployStore()`) is tied to a single deploy and disappears when that deploy is replaced — use only when the lifecycle should match a deploy (e.g., per-deploy build artifacts).\n- **Roughly how big and how many?** Helps choose between a single large blob vs many small keyed blobs, and informs whether you'll need `list({ prefix: ... })` patterns.\n\n**If you don't have preferences here, tell me what the assets are and I'll pick sensible defaults** — typically site-scoped with private access, served through an authenticated function.\n\n## Getting a Store\n\n```typescript\nimport { getStore } from \"@netlify\u002Fblobs\";\n\nconst store = getStore({ name: \"my-store\" });\n\n\u002F\u002F Use \"strong\" consistency when you need immediate reads after writes\nconst store = getStore({ name: \"my-store\", consistency: \"strong\" });\n```\n\n## CRUD Operations\n\nThese are the **only** store methods. Do not invent others.\n\n### Create \u002F Update\n\n```typescript\n\u002F\u002F String or binary data\nawait store.set(\"key\", \"value\");\nawait store.set(\"key\", fileBuffer);\n\n\u002F\u002F With metadata\nawait store.set(\"key\", data, {\n  metadata: { contentType: \"image\u002Fpng\", uploadedAt: new Date().toISOString() },\n});\n\n\u002F\u002F JSON data\nawait store.setJSON(\"key\", { name: \"Example\", count: 42 });\n```\n\n### Read\n\n```typescript\n\u002F\u002F Text (default)\nconst text = await store.get(\"key\");                    \u002F\u002F string | null\n\n\u002F\u002F Typed retrieval\nconst json = await store.get(\"key\", { type: \"json\" });  \u002F\u002F object | null\nconst stream = await store.get(\"key\", { type: \"stream\" });\nconst blob = await store.get(\"key\", { type: \"blob\" });\nconst buffer = await store.get(\"key\", { type: \"arrayBuffer\" });\n\n\u002F\u002F With metadata\nconst result = await store.getWithMetadata(\"key\");\n\u002F\u002F { data: any, etag: string, metadata: object } | null\n\n\u002F\u002F Metadata only (no data download)\nconst meta = await store.getMetadata(\"key\");\n\u002F\u002F { etag: string, metadata: object } | null\n```\n\n### Delete\n\n```typescript\nawait store.delete(\"key\");\n```\n\n### List\n\n```typescript\nconst { blobs } = await store.list();\n\u002F\u002F blobs: [{ etag: string, key: string }, ...]\n\n\u002F\u002F Filter by prefix\nconst { blobs } = await store.list({ prefix: \"uploads\u002F\" });\n```\n\n`store.list()` **auto-paginates**: a plain `await store.list()` transparently fetches every page and returns the complete `blobs` array — you do NOT hand-roll page cursors or offsets. For a very large store, pass `{ paginate: true }` to get an async iterator and stream results a page at a time instead of buffering every key in memory:\n\n```typescript\nfor await (const page of store.list({ paginate: true })) {\n  for (const { key } of page.blobs) {\n    \u002F\u002F handle each key\n  }\n}\n```\n\nPass `{ directories: true }` to group keys by the `\u002F` delimiter (folder-style): the result's `blobs` holds keys at the current level and `directories` holds the common prefixes, which you drill into with `prefix`. Keys are a flat namespace — `\u002F` is only a naming convention that `prefix` and `directories` let you navigate.\n\n## Store Types\n\n- **Site-scoped** (`getStore()`): Persist across all deploys. Use for most cases.\n- **Deploy-scoped** (`getDeployStore()`): Tied to a specific deploy lifecycle.\n\n**A site-scoped store is shared across ALL deploy contexts.** Production, deploy previews, and branch deploys all read and write the *same* `getStore()` store — unlike Netlify Database, which forks a separate branch per preview, Blobs does not isolate previews. Code running on a deploy preview reads, overwrites, and deletes the same production data. Don't run destructive tests or seed throwaway data against a `getStore()` store from a preview — it hits production. When you need per-context isolation, use `getDeployStore()`, or partition by deploy context with a context-specific store `name` or key prefix.\n\n## Consistency and concurrency\n\nBlobs are **eventually consistent by default**: an immediate read right after a write may return the previous value or `null`. Opt into **strong** consistency when you need read-your-writes. You can set it once on the store, or request it per read:\n\n```typescript\nimport { getStore } from \"@netlify\u002Fblobs\";\n\nconst store = getStore({ name: \"my-store\", consistency: \"strong\" });\n\n\u002F\u002F or just for a single read that must see the latest write:\nconst fresh = await store.get(\"key\", { consistency: \"strong\" });\n```\n\nStrong reads are **slower** than eventual reads, so don't make everything strong \"to be safe\" — reserve it for the reads that genuinely need the latest write (typically a read right after a write in the same request). For read-heavy access to data that rarely changes, the default eventual consistency is faster and is the right choice.\n\nBlobs has **no concurrency control**: there is no locking and there are no transactions, and concurrent writes to the same key are **last-write-wins** — one silently overwrites the other. Do NOT build counters, balances, or any read-modify-write logic over a single blob key and expect it to be correct under concurrent traffic (two requests can both read the old value and both write back, losing an update). When you need atomic or transactional updates, use Netlify Database (see `netlify-database\u002FSKILL.md`), which provides real transactions — not Blobs.\n\n## Limits\n\n| Limit | Value |\n|---|---|\n| Max object size | 5 GB |\n| Metadata per object | 2 KB |\n| Store name max length | 64 bytes |\n| Key max length | 600 bytes |\n\nObject metadata is capped at **2 KB per object** — it's for small descriptors (content type, size, timestamps, a status flag), not a place to stash large JSON. Anything bigger belongs in the blob value itself, not in `metadata`.\n\n## Local Development\n\nLocal dev uses a sandboxed store (separate from production). For Vite-based projects, install `@netlify\u002Fvite-plugin` to enable local Blobs access. Otherwise, use `netlify dev`.\n\n**Common error**: \"The environment has not been configured to use Netlify Blobs\" — install `@netlify\u002Fvite-plugin` or run via `netlify dev`.\n\n## Inspecting blobs from the CLI\n\nThe Netlify CLI can read and write blobs directly — useful for debugging, seeding, or a one-off fix without writing and deploying a function:\n\n```bash\nnetlify blobs:list \u003Cstore-name>\nnetlify blobs:get \u003Cstore-name> \u003Ckey>\nnetlify blobs:set \u003Cstore-name> \u003Ckey> \u003Cvalue>\nnetlify blobs:delete \u003Cstore-name> \u003Ckey>\n```\n\nThese act on the linked site's store, so link the project first (`netlify link`). Reach for these documented subcommands for manual inspection or repair rather than the raw API.\n\n## Uploading blobs at build time\n\nYou don't have to write blobs from runtime code — you can seed a store during the build by writing files into a special directory. Files placed in `.netlify\u002Fblobs\u002Fdeploy\u002F` during the build are uploaded to a **deploy-scoped** store and are then readable at runtime via `getDeployStore()`. The path under that directory becomes the blob key (so `.netlify\u002Fblobs\u002Fdeploy\u002Fproducts\u002F1.json` is stored under the key `products\u002F1.json`). This avoids a runtime function looping over `store.set` on a cold start.\n\nTo attach metadata to a build-time blob, add a JSON sidecar whose name is the blob's filename prefixed with `$` and suffixed with `.json` — metadata for `logo.png` goes in `$logo.png.json`. Read these blobs back with `getDeployStore()`, not `getStore()`: they live in the deploy-scoped store and are replaced when the deploy is replaced.\n\n## When a store operation fails\n\nIf a `get`\u002F`set` call throws in a deployed function, don't guess at a fix or route around it — the exact error is in the **function logs**, and it almost always names the cause. Read it first. Common causes: the store isn't reachable from the calling context, a missing or mismatched store `name`, or a read-after-write timing gap (an immediate read of a just-written key — use `consistency: \"strong\"` when you need read-your-writes).\n\nThe store exposes only the documented methods above; there is no lower-level REST endpoint to fall back on. If the logs don't resolve it, report the exact error plus the affected site\u002Fdeploy to the user and stop. Reaching around a failing store — direct `https:\u002F\u002Fapi.netlify.com\u002F...` calls, reading auth tokens off disk, or inventing endpoints — can't work (those aren't supported surfaces) and risks corrupting or losing the very data you're trying to save.\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,46,60,79,113,120,125,201,211,217,462,468,480,487,900,906,1526,1532,1582,1588,1748,1790,1957,2022,2028,2063,2109,2115,2141,2380,2392,2418,2424,2504,2523,2529,2549,2572,2578,2583,2774,2787,2793,2844,2895,2901,2941,2954],{"type":39,"tag":40,"props":41,"children":42},"element","h1",{"id":4},[43],{"type":44,"value":45},"text","Netlify Blobs",{"type":39,"tag":47,"props":48,"children":49},"p",{},[50,52,58],{"type":44,"value":51},"Netlify Blobs is zero-config object storage for ",{"type":39,"tag":53,"props":54,"children":55},"strong",{},[56],{"type":44,"value":57},"files and assets",{"type":44,"value":59},": images, documents, uploads, exports, cached binary artifacts. Available from any Netlify compute (functions, edge functions, framework server routes). No provisioning required.",{"type":39,"tag":47,"props":61,"children":62},{},[63,68,70,77],{"type":39,"tag":53,"props":64,"children":65},{},[66],{"type":44,"value":67},"Not for dynamic data.",{"type":44,"value":69}," If the project needs to store records, user data, application state, or anything queryable, use Netlify Database instead — see ",{"type":39,"tag":71,"props":72,"children":74},"code",{"className":73},[],[75],{"type":44,"value":76},"netlify-database\u002FSKILL.md",{"type":44,"value":78},". Reach for Blobs when the thing you're storing is a file or an asset blob, not a record.",{"type":39,"tag":80,"props":81,"children":86},"pre",{"className":82,"code":83,"language":84,"meta":85,"style":85},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @netlify\u002Fblobs\n","bash","",[87],{"type":39,"tag":71,"props":88,"children":89},{"__ignoreMap":85},[90],{"type":39,"tag":91,"props":92,"children":95},"span",{"class":93,"line":94},"line",1,[96,102,108],{"type":39,"tag":91,"props":97,"children":99},{"style":98},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[100],{"type":44,"value":101},"npm",{"type":39,"tag":91,"props":103,"children":105},{"style":104},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[106],{"type":44,"value":107}," install",{"type":39,"tag":91,"props":109,"children":110},{"style":104},[111],{"type":44,"value":112}," @netlify\u002Fblobs\n",{"type":39,"tag":114,"props":115,"children":117},"h2",{"id":116},"before-you-build",[118],{"type":44,"value":119},"Before you build",{"type":39,"tag":47,"props":121,"children":122},{},[123],{"type":44,"value":124},"If the prompt didn't already specify, ask the user a few short questions before scaffolding any blob storage — answers shape access patterns, scoping, and how the assets are served back to clients:",{"type":39,"tag":126,"props":127,"children":128},"ul",{},[129,140,157,183],{"type":39,"tag":130,"props":131,"children":132},"li",{},[133,138],{"type":39,"tag":53,"props":134,"children":135},{},[136],{"type":44,"value":137},"What kind of asset?",{"type":44,"value":139}," (User uploads, exported documents, cached binaries, generated images — drives the storage and serving pattern.)",{"type":39,"tag":130,"props":141,"children":142},{},[143,148,150,155],{"type":39,"tag":53,"props":144,"children":145},{},[146],{"type":44,"value":147},"Who should be able to read it?",{"type":44,"value":149}," Public (anyone with a URL, or an unauthenticated endpoint that streams the blob) or private (only authenticated users, gated by your server code)? Blobs have ",{"type":39,"tag":53,"props":151,"children":152},{},[153],{"type":44,"value":154},"no built-in access control",{"type":44,"value":156}," — the serving layer is the gate. When in doubt, default to private; making something public later is easy, while pulling back data that was inadvertently exposed is not.",{"type":39,"tag":130,"props":158,"children":159},{},[160,165,167,173,175,181],{"type":39,"tag":53,"props":161,"children":162},{},[163],{"type":44,"value":164},"Site-scoped or deploy-scoped?",{"type":44,"value":166}," Site-scoped (",{"type":39,"tag":71,"props":168,"children":170},{"className":169},[],[171],{"type":44,"value":172},"getStore()",{"type":44,"value":174},") persists across deploys — the right default for user data. Deploy-scoped (",{"type":39,"tag":71,"props":176,"children":178},{"className":177},[],[179],{"type":44,"value":180},"getDeployStore()",{"type":44,"value":182},") is tied to a single deploy and disappears when that deploy is replaced — use only when the lifecycle should match a deploy (e.g., per-deploy build artifacts).",{"type":39,"tag":130,"props":184,"children":185},{},[186,191,193,199],{"type":39,"tag":53,"props":187,"children":188},{},[189],{"type":44,"value":190},"Roughly how big and how many?",{"type":44,"value":192}," Helps choose between a single large blob vs many small keyed blobs, and informs whether you'll need ",{"type":39,"tag":71,"props":194,"children":196},{"className":195},[],[197],{"type":44,"value":198},"list({ prefix: ... })",{"type":44,"value":200}," patterns.",{"type":39,"tag":47,"props":202,"children":203},{},[204,209],{"type":39,"tag":53,"props":205,"children":206},{},[207],{"type":44,"value":208},"If you don't have preferences here, tell me what the assets are and I'll pick sensible defaults",{"type":44,"value":210}," — typically site-scoped with private access, served through an authenticated function.",{"type":39,"tag":114,"props":212,"children":214},{"id":213},"getting-a-store",[215],{"type":44,"value":216},"Getting a Store",{"type":39,"tag":80,"props":218,"children":222},{"className":219,"code":220,"language":221,"meta":85,"style":85},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { getStore } from \"@netlify\u002Fblobs\";\n\nconst store = getStore({ name: \"my-store\" });\n\n\u002F\u002F Use \"strong\" consistency when you need immediate reads after writes\nconst store = getStore({ name: \"my-store\", consistency: \"strong\" });\n","typescript",[223],{"type":39,"tag":71,"props":224,"children":225},{"__ignoreMap":85},[226,277,287,359,367,376],{"type":39,"tag":91,"props":227,"children":228},{"class":93,"line":94},[229,235,241,247,252,257,262,267,272],{"type":39,"tag":91,"props":230,"children":232},{"style":231},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[233],{"type":44,"value":234},"import",{"type":39,"tag":91,"props":236,"children":238},{"style":237},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[239],{"type":44,"value":240}," {",{"type":39,"tag":91,"props":242,"children":244},{"style":243},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[245],{"type":44,"value":246}," getStore",{"type":39,"tag":91,"props":248,"children":249},{"style":237},[250],{"type":44,"value":251}," }",{"type":39,"tag":91,"props":253,"children":254},{"style":231},[255],{"type":44,"value":256}," from",{"type":39,"tag":91,"props":258,"children":259},{"style":237},[260],{"type":44,"value":261}," \"",{"type":39,"tag":91,"props":263,"children":264},{"style":104},[265],{"type":44,"value":266},"@netlify\u002Fblobs",{"type":39,"tag":91,"props":268,"children":269},{"style":237},[270],{"type":44,"value":271},"\"",{"type":39,"tag":91,"props":273,"children":274},{"style":237},[275],{"type":44,"value":276},";\n",{"type":39,"tag":91,"props":278,"children":280},{"class":93,"line":279},2,[281],{"type":39,"tag":91,"props":282,"children":284},{"emptyLinePlaceholder":283},true,[285],{"type":44,"value":286},"\n",{"type":39,"tag":91,"props":288,"children":290},{"class":93,"line":289},3,[291,297,302,307,312,317,322,328,333,337,342,346,350,355],{"type":39,"tag":91,"props":292,"children":294},{"style":293},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[295],{"type":44,"value":296},"const",{"type":39,"tag":91,"props":298,"children":299},{"style":243},[300],{"type":44,"value":301}," store ",{"type":39,"tag":91,"props":303,"children":304},{"style":237},[305],{"type":44,"value":306},"=",{"type":39,"tag":91,"props":308,"children":310},{"style":309},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[311],{"type":44,"value":246},{"type":39,"tag":91,"props":313,"children":314},{"style":243},[315],{"type":44,"value":316},"(",{"type":39,"tag":91,"props":318,"children":319},{"style":237},[320],{"type":44,"value":321},"{",{"type":39,"tag":91,"props":323,"children":325},{"style":324},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[326],{"type":44,"value":327}," name",{"type":39,"tag":91,"props":329,"children":330},{"style":237},[331],{"type":44,"value":332},":",{"type":39,"tag":91,"props":334,"children":335},{"style":237},[336],{"type":44,"value":261},{"type":39,"tag":91,"props":338,"children":339},{"style":104},[340],{"type":44,"value":341},"my-store",{"type":39,"tag":91,"props":343,"children":344},{"style":237},[345],{"type":44,"value":271},{"type":39,"tag":91,"props":347,"children":348},{"style":237},[349],{"type":44,"value":251},{"type":39,"tag":91,"props":351,"children":352},{"style":243},[353],{"type":44,"value":354},")",{"type":39,"tag":91,"props":356,"children":357},{"style":237},[358],{"type":44,"value":276},{"type":39,"tag":91,"props":360,"children":362},{"class":93,"line":361},4,[363],{"type":39,"tag":91,"props":364,"children":365},{"emptyLinePlaceholder":283},[366],{"type":44,"value":286},{"type":39,"tag":91,"props":368,"children":369},{"class":93,"line":27},[370],{"type":39,"tag":91,"props":371,"children":373},{"style":372},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[374],{"type":44,"value":375},"\u002F\u002F Use \"strong\" consistency when you need immediate reads after writes\n",{"type":39,"tag":91,"props":377,"children":379},{"class":93,"line":378},6,[380,384,388,392,396,400,404,408,412,416,420,424,429,434,438,442,446,450,454,458],{"type":39,"tag":91,"props":381,"children":382},{"style":293},[383],{"type":44,"value":296},{"type":39,"tag":91,"props":385,"children":386},{"style":243},[387],{"type":44,"value":301},{"type":39,"tag":91,"props":389,"children":390},{"style":237},[391],{"type":44,"value":306},{"type":39,"tag":91,"props":393,"children":394},{"style":309},[395],{"type":44,"value":246},{"type":39,"tag":91,"props":397,"children":398},{"style":243},[399],{"type":44,"value":316},{"type":39,"tag":91,"props":401,"children":402},{"style":237},[403],{"type":44,"value":321},{"type":39,"tag":91,"props":405,"children":406},{"style":324},[407],{"type":44,"value":327},{"type":39,"tag":91,"props":409,"children":410},{"style":237},[411],{"type":44,"value":332},{"type":39,"tag":91,"props":413,"children":414},{"style":237},[415],{"type":44,"value":261},{"type":39,"tag":91,"props":417,"children":418},{"style":104},[419],{"type":44,"value":341},{"type":39,"tag":91,"props":421,"children":422},{"style":237},[423],{"type":44,"value":271},{"type":39,"tag":91,"props":425,"children":426},{"style":237},[427],{"type":44,"value":428},",",{"type":39,"tag":91,"props":430,"children":431},{"style":324},[432],{"type":44,"value":433}," consistency",{"type":39,"tag":91,"props":435,"children":436},{"style":237},[437],{"type":44,"value":332},{"type":39,"tag":91,"props":439,"children":440},{"style":237},[441],{"type":44,"value":261},{"type":39,"tag":91,"props":443,"children":444},{"style":104},[445],{"type":44,"value":53},{"type":39,"tag":91,"props":447,"children":448},{"style":237},[449],{"type":44,"value":271},{"type":39,"tag":91,"props":451,"children":452},{"style":237},[453],{"type":44,"value":251},{"type":39,"tag":91,"props":455,"children":456},{"style":243},[457],{"type":44,"value":354},{"type":39,"tag":91,"props":459,"children":460},{"style":237},[461],{"type":44,"value":276},{"type":39,"tag":114,"props":463,"children":465},{"id":464},"crud-operations",[466],{"type":44,"value":467},"CRUD Operations",{"type":39,"tag":47,"props":469,"children":470},{},[471,473,478],{"type":44,"value":472},"These are the ",{"type":39,"tag":53,"props":474,"children":475},{},[476],{"type":44,"value":477},"only",{"type":44,"value":479}," store methods. Do not invent others.",{"type":39,"tag":481,"props":482,"children":484},"h3",{"id":483},"create-update",[485],{"type":44,"value":486},"Create \u002F Update",{"type":39,"tag":80,"props":488,"children":490},{"className":219,"code":489,"language":221,"meta":85,"style":85},"\u002F\u002F String or binary data\nawait store.set(\"key\", \"value\");\nawait store.set(\"key\", fileBuffer);\n\n\u002F\u002F With metadata\nawait store.set(\"key\", data, {\n  metadata: { contentType: \"image\u002Fpng\", uploadedAt: new Date().toISOString() },\n});\n\n\u002F\u002F JSON data\nawait store.setJSON(\"key\", { name: \"Example\", count: 42 });\n",[491],{"type":39,"tag":71,"props":492,"children":493},{"__ignoreMap":85},[494,502,567,615,622,630,683,769,786,794,803],{"type":39,"tag":91,"props":495,"children":496},{"class":93,"line":94},[497],{"type":39,"tag":91,"props":498,"children":499},{"style":372},[500],{"type":44,"value":501},"\u002F\u002F String or binary data\n",{"type":39,"tag":91,"props":503,"children":504},{"class":93,"line":279},[505,510,515,520,525,529,533,538,542,546,550,555,559,563],{"type":39,"tag":91,"props":506,"children":507},{"style":231},[508],{"type":44,"value":509},"await",{"type":39,"tag":91,"props":511,"children":512},{"style":243},[513],{"type":44,"value":514}," store",{"type":39,"tag":91,"props":516,"children":517},{"style":237},[518],{"type":44,"value":519},".",{"type":39,"tag":91,"props":521,"children":522},{"style":309},[523],{"type":44,"value":524},"set",{"type":39,"tag":91,"props":526,"children":527},{"style":243},[528],{"type":44,"value":316},{"type":39,"tag":91,"props":530,"children":531},{"style":237},[532],{"type":44,"value":271},{"type":39,"tag":91,"props":534,"children":535},{"style":104},[536],{"type":44,"value":537},"key",{"type":39,"tag":91,"props":539,"children":540},{"style":237},[541],{"type":44,"value":271},{"type":39,"tag":91,"props":543,"children":544},{"style":237},[545],{"type":44,"value":428},{"type":39,"tag":91,"props":547,"children":548},{"style":237},[549],{"type":44,"value":261},{"type":39,"tag":91,"props":551,"children":552},{"style":104},[553],{"type":44,"value":554},"value",{"type":39,"tag":91,"props":556,"children":557},{"style":237},[558],{"type":44,"value":271},{"type":39,"tag":91,"props":560,"children":561},{"style":243},[562],{"type":44,"value":354},{"type":39,"tag":91,"props":564,"children":565},{"style":237},[566],{"type":44,"value":276},{"type":39,"tag":91,"props":568,"children":569},{"class":93,"line":289},[570,574,578,582,586,590,594,598,602,606,611],{"type":39,"tag":91,"props":571,"children":572},{"style":231},[573],{"type":44,"value":509},{"type":39,"tag":91,"props":575,"children":576},{"style":243},[577],{"type":44,"value":514},{"type":39,"tag":91,"props":579,"children":580},{"style":237},[581],{"type":44,"value":519},{"type":39,"tag":91,"props":583,"children":584},{"style":309},[585],{"type":44,"value":524},{"type":39,"tag":91,"props":587,"children":588},{"style":243},[589],{"type":44,"value":316},{"type":39,"tag":91,"props":591,"children":592},{"style":237},[593],{"type":44,"value":271},{"type":39,"tag":91,"props":595,"children":596},{"style":104},[597],{"type":44,"value":537},{"type":39,"tag":91,"props":599,"children":600},{"style":237},[601],{"type":44,"value":271},{"type":39,"tag":91,"props":603,"children":604},{"style":237},[605],{"type":44,"value":428},{"type":39,"tag":91,"props":607,"children":608},{"style":243},[609],{"type":44,"value":610}," fileBuffer)",{"type":39,"tag":91,"props":612,"children":613},{"style":237},[614],{"type":44,"value":276},{"type":39,"tag":91,"props":616,"children":617},{"class":93,"line":361},[618],{"type":39,"tag":91,"props":619,"children":620},{"emptyLinePlaceholder":283},[621],{"type":44,"value":286},{"type":39,"tag":91,"props":623,"children":624},{"class":93,"line":27},[625],{"type":39,"tag":91,"props":626,"children":627},{"style":372},[628],{"type":44,"value":629},"\u002F\u002F With metadata\n",{"type":39,"tag":91,"props":631,"children":632},{"class":93,"line":378},[633,637,641,645,649,653,657,661,665,669,674,678],{"type":39,"tag":91,"props":634,"children":635},{"style":231},[636],{"type":44,"value":509},{"type":39,"tag":91,"props":638,"children":639},{"style":243},[640],{"type":44,"value":514},{"type":39,"tag":91,"props":642,"children":643},{"style":237},[644],{"type":44,"value":519},{"type":39,"tag":91,"props":646,"children":647},{"style":309},[648],{"type":44,"value":524},{"type":39,"tag":91,"props":650,"children":651},{"style":243},[652],{"type":44,"value":316},{"type":39,"tag":91,"props":654,"children":655},{"style":237},[656],{"type":44,"value":271},{"type":39,"tag":91,"props":658,"children":659},{"style":104},[660],{"type":44,"value":537},{"type":39,"tag":91,"props":662,"children":663},{"style":237},[664],{"type":44,"value":271},{"type":39,"tag":91,"props":666,"children":667},{"style":237},[668],{"type":44,"value":428},{"type":39,"tag":91,"props":670,"children":671},{"style":243},[672],{"type":44,"value":673}," data",{"type":39,"tag":91,"props":675,"children":676},{"style":237},[677],{"type":44,"value":428},{"type":39,"tag":91,"props":679,"children":680},{"style":237},[681],{"type":44,"value":682}," {\n",{"type":39,"tag":91,"props":684,"children":686},{"class":93,"line":685},7,[687,692,696,700,705,709,713,718,722,726,731,735,740,745,750,754,759,764],{"type":39,"tag":91,"props":688,"children":689},{"style":324},[690],{"type":44,"value":691},"  metadata",{"type":39,"tag":91,"props":693,"children":694},{"style":237},[695],{"type":44,"value":332},{"type":39,"tag":91,"props":697,"children":698},{"style":237},[699],{"type":44,"value":240},{"type":39,"tag":91,"props":701,"children":702},{"style":324},[703],{"type":44,"value":704}," contentType",{"type":39,"tag":91,"props":706,"children":707},{"style":237},[708],{"type":44,"value":332},{"type":39,"tag":91,"props":710,"children":711},{"style":237},[712],{"type":44,"value":261},{"type":39,"tag":91,"props":714,"children":715},{"style":104},[716],{"type":44,"value":717},"image\u002Fpng",{"type":39,"tag":91,"props":719,"children":720},{"style":237},[721],{"type":44,"value":271},{"type":39,"tag":91,"props":723,"children":724},{"style":237},[725],{"type":44,"value":428},{"type":39,"tag":91,"props":727,"children":728},{"style":324},[729],{"type":44,"value":730}," uploadedAt",{"type":39,"tag":91,"props":732,"children":733},{"style":237},[734],{"type":44,"value":332},{"type":39,"tag":91,"props":736,"children":737},{"style":237},[738],{"type":44,"value":739}," new",{"type":39,"tag":91,"props":741,"children":742},{"style":309},[743],{"type":44,"value":744}," Date",{"type":39,"tag":91,"props":746,"children":747},{"style":243},[748],{"type":44,"value":749},"()",{"type":39,"tag":91,"props":751,"children":752},{"style":237},[753],{"type":44,"value":519},{"type":39,"tag":91,"props":755,"children":756},{"style":309},[757],{"type":44,"value":758},"toISOString",{"type":39,"tag":91,"props":760,"children":761},{"style":243},[762],{"type":44,"value":763},"() ",{"type":39,"tag":91,"props":765,"children":766},{"style":237},[767],{"type":44,"value":768},"},\n",{"type":39,"tag":91,"props":770,"children":772},{"class":93,"line":771},8,[773,778,782],{"type":39,"tag":91,"props":774,"children":775},{"style":237},[776],{"type":44,"value":777},"}",{"type":39,"tag":91,"props":779,"children":780},{"style":243},[781],{"type":44,"value":354},{"type":39,"tag":91,"props":783,"children":784},{"style":237},[785],{"type":44,"value":276},{"type":39,"tag":91,"props":787,"children":789},{"class":93,"line":788},9,[790],{"type":39,"tag":91,"props":791,"children":792},{"emptyLinePlaceholder":283},[793],{"type":44,"value":286},{"type":39,"tag":91,"props":795,"children":797},{"class":93,"line":796},10,[798],{"type":39,"tag":91,"props":799,"children":800},{"style":372},[801],{"type":44,"value":802},"\u002F\u002F JSON data\n",{"type":39,"tag":91,"props":804,"children":806},{"class":93,"line":805},11,[807,811,815,819,824,828,832,836,840,844,848,852,856,860,865,869,873,878,882,888,892,896],{"type":39,"tag":91,"props":808,"children":809},{"style":231},[810],{"type":44,"value":509},{"type":39,"tag":91,"props":812,"children":813},{"style":243},[814],{"type":44,"value":514},{"type":39,"tag":91,"props":816,"children":817},{"style":237},[818],{"type":44,"value":519},{"type":39,"tag":91,"props":820,"children":821},{"style":309},[822],{"type":44,"value":823},"setJSON",{"type":39,"tag":91,"props":825,"children":826},{"style":243},[827],{"type":44,"value":316},{"type":39,"tag":91,"props":829,"children":830},{"style":237},[831],{"type":44,"value":271},{"type":39,"tag":91,"props":833,"children":834},{"style":104},[835],{"type":44,"value":537},{"type":39,"tag":91,"props":837,"children":838},{"style":237},[839],{"type":44,"value":271},{"type":39,"tag":91,"props":841,"children":842},{"style":237},[843],{"type":44,"value":428},{"type":39,"tag":91,"props":845,"children":846},{"style":237},[847],{"type":44,"value":240},{"type":39,"tag":91,"props":849,"children":850},{"style":324},[851],{"type":44,"value":327},{"type":39,"tag":91,"props":853,"children":854},{"style":237},[855],{"type":44,"value":332},{"type":39,"tag":91,"props":857,"children":858},{"style":237},[859],{"type":44,"value":261},{"type":39,"tag":91,"props":861,"children":862},{"style":104},[863],{"type":44,"value":864},"Example",{"type":39,"tag":91,"props":866,"children":867},{"style":237},[868],{"type":44,"value":271},{"type":39,"tag":91,"props":870,"children":871},{"style":237},[872],{"type":44,"value":428},{"type":39,"tag":91,"props":874,"children":875},{"style":324},[876],{"type":44,"value":877}," count",{"type":39,"tag":91,"props":879,"children":880},{"style":237},[881],{"type":44,"value":332},{"type":39,"tag":91,"props":883,"children":885},{"style":884},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[886],{"type":44,"value":887}," 42",{"type":39,"tag":91,"props":889,"children":890},{"style":237},[891],{"type":44,"value":251},{"type":39,"tag":91,"props":893,"children":894},{"style":243},[895],{"type":44,"value":354},{"type":39,"tag":91,"props":897,"children":898},{"style":237},[899],{"type":44,"value":276},{"type":39,"tag":481,"props":901,"children":903},{"id":902},"read",[904],{"type":44,"value":905},"Read",{"type":39,"tag":80,"props":907,"children":909},{"className":219,"code":908,"language":221,"meta":85,"style":85},"\u002F\u002F Text (default)\nconst text = await store.get(\"key\");                    \u002F\u002F string | null\n\n\u002F\u002F Typed retrieval\nconst json = await store.get(\"key\", { type: \"json\" });  \u002F\u002F object | null\nconst stream = await store.get(\"key\", { type: \"stream\" });\nconst blob = await store.get(\"key\", { type: \"blob\" });\nconst buffer = await store.get(\"key\", { type: \"arrayBuffer\" });\n\n\u002F\u002F With metadata\nconst result = await store.getWithMetadata(\"key\");\n\u002F\u002F { data: any, etag: string, metadata: object } | null\n\n\u002F\u002F Metadata only (no data download)\nconst meta = await store.getMetadata(\"key\");\n\u002F\u002F { etag: string, metadata: object } | null\n",[910],{"type":39,"tag":71,"props":911,"children":912},{"__ignoreMap":85},[913,921,985,992,1000,1095,1184,1273,1362,1369,1376,1433,1442,1450,1459,1517],{"type":39,"tag":91,"props":914,"children":915},{"class":93,"line":94},[916],{"type":39,"tag":91,"props":917,"children":918},{"style":372},[919],{"type":44,"value":920},"\u002F\u002F Text (default)\n",{"type":39,"tag":91,"props":922,"children":923},{"class":93,"line":279},[924,928,933,937,942,946,950,955,959,963,967,971,975,980],{"type":39,"tag":91,"props":925,"children":926},{"style":293},[927],{"type":44,"value":296},{"type":39,"tag":91,"props":929,"children":930},{"style":243},[931],{"type":44,"value":932}," text ",{"type":39,"tag":91,"props":934,"children":935},{"style":237},[936],{"type":44,"value":306},{"type":39,"tag":91,"props":938,"children":939},{"style":231},[940],{"type":44,"value":941}," await",{"type":39,"tag":91,"props":943,"children":944},{"style":243},[945],{"type":44,"value":514},{"type":39,"tag":91,"props":947,"children":948},{"style":237},[949],{"type":44,"value":519},{"type":39,"tag":91,"props":951,"children":952},{"style":309},[953],{"type":44,"value":954},"get",{"type":39,"tag":91,"props":956,"children":957},{"style":243},[958],{"type":44,"value":316},{"type":39,"tag":91,"props":960,"children":961},{"style":237},[962],{"type":44,"value":271},{"type":39,"tag":91,"props":964,"children":965},{"style":104},[966],{"type":44,"value":537},{"type":39,"tag":91,"props":968,"children":969},{"style":237},[970],{"type":44,"value":271},{"type":39,"tag":91,"props":972,"children":973},{"style":243},[974],{"type":44,"value":354},{"type":39,"tag":91,"props":976,"children":977},{"style":237},[978],{"type":44,"value":979},";",{"type":39,"tag":91,"props":981,"children":982},{"style":372},[983],{"type":44,"value":984},"                    \u002F\u002F string | null\n",{"type":39,"tag":91,"props":986,"children":987},{"class":93,"line":289},[988],{"type":39,"tag":91,"props":989,"children":990},{"emptyLinePlaceholder":283},[991],{"type":44,"value":286},{"type":39,"tag":91,"props":993,"children":994},{"class":93,"line":361},[995],{"type":39,"tag":91,"props":996,"children":997},{"style":372},[998],{"type":44,"value":999},"\u002F\u002F Typed retrieval\n",{"type":39,"tag":91,"props":1001,"children":1002},{"class":93,"line":27},[1003,1007,1012,1016,1020,1024,1028,1032,1036,1040,1044,1048,1052,1056,1061,1065,1069,1074,1078,1082,1086,1090],{"type":39,"tag":91,"props":1004,"children":1005},{"style":293},[1006],{"type":44,"value":296},{"type":39,"tag":91,"props":1008,"children":1009},{"style":243},[1010],{"type":44,"value":1011}," json ",{"type":39,"tag":91,"props":1013,"children":1014},{"style":237},[1015],{"type":44,"value":306},{"type":39,"tag":91,"props":1017,"children":1018},{"style":231},[1019],{"type":44,"value":941},{"type":39,"tag":91,"props":1021,"children":1022},{"style":243},[1023],{"type":44,"value":514},{"type":39,"tag":91,"props":1025,"children":1026},{"style":237},[1027],{"type":44,"value":519},{"type":39,"tag":91,"props":1029,"children":1030},{"style":309},[1031],{"type":44,"value":954},{"type":39,"tag":91,"props":1033,"children":1034},{"style":243},[1035],{"type":44,"value":316},{"type":39,"tag":91,"props":1037,"children":1038},{"style":237},[1039],{"type":44,"value":271},{"type":39,"tag":91,"props":1041,"children":1042},{"style":104},[1043],{"type":44,"value":537},{"type":39,"tag":91,"props":1045,"children":1046},{"style":237},[1047],{"type":44,"value":271},{"type":39,"tag":91,"props":1049,"children":1050},{"style":237},[1051],{"type":44,"value":428},{"type":39,"tag":91,"props":1053,"children":1054},{"style":237},[1055],{"type":44,"value":240},{"type":39,"tag":91,"props":1057,"children":1058},{"style":324},[1059],{"type":44,"value":1060}," type",{"type":39,"tag":91,"props":1062,"children":1063},{"style":237},[1064],{"type":44,"value":332},{"type":39,"tag":91,"props":1066,"children":1067},{"style":237},[1068],{"type":44,"value":261},{"type":39,"tag":91,"props":1070,"children":1071},{"style":104},[1072],{"type":44,"value":1073},"json",{"type":39,"tag":91,"props":1075,"children":1076},{"style":237},[1077],{"type":44,"value":271},{"type":39,"tag":91,"props":1079,"children":1080},{"style":237},[1081],{"type":44,"value":251},{"type":39,"tag":91,"props":1083,"children":1084},{"style":243},[1085],{"type":44,"value":354},{"type":39,"tag":91,"props":1087,"children":1088},{"style":237},[1089],{"type":44,"value":979},{"type":39,"tag":91,"props":1091,"children":1092},{"style":372},[1093],{"type":44,"value":1094},"  \u002F\u002F object | null\n",{"type":39,"tag":91,"props":1096,"children":1097},{"class":93,"line":378},[1098,1102,1107,1111,1115,1119,1123,1127,1131,1135,1139,1143,1147,1151,1155,1159,1163,1168,1172,1176,1180],{"type":39,"tag":91,"props":1099,"children":1100},{"style":293},[1101],{"type":44,"value":296},{"type":39,"tag":91,"props":1103,"children":1104},{"style":243},[1105],{"type":44,"value":1106}," stream ",{"type":39,"tag":91,"props":1108,"children":1109},{"style":237},[1110],{"type":44,"value":306},{"type":39,"tag":91,"props":1112,"children":1113},{"style":231},[1114],{"type":44,"value":941},{"type":39,"tag":91,"props":1116,"children":1117},{"style":243},[1118],{"type":44,"value":514},{"type":39,"tag":91,"props":1120,"children":1121},{"style":237},[1122],{"type":44,"value":519},{"type":39,"tag":91,"props":1124,"children":1125},{"style":309},[1126],{"type":44,"value":954},{"type":39,"tag":91,"props":1128,"children":1129},{"style":243},[1130],{"type":44,"value":316},{"type":39,"tag":91,"props":1132,"children":1133},{"style":237},[1134],{"type":44,"value":271},{"type":39,"tag":91,"props":1136,"children":1137},{"style":104},[1138],{"type":44,"value":537},{"type":39,"tag":91,"props":1140,"children":1141},{"style":237},[1142],{"type":44,"value":271},{"type":39,"tag":91,"props":1144,"children":1145},{"style":237},[1146],{"type":44,"value":428},{"type":39,"tag":91,"props":1148,"children":1149},{"style":237},[1150],{"type":44,"value":240},{"type":39,"tag":91,"props":1152,"children":1153},{"style":324},[1154],{"type":44,"value":1060},{"type":39,"tag":91,"props":1156,"children":1157},{"style":237},[1158],{"type":44,"value":332},{"type":39,"tag":91,"props":1160,"children":1161},{"style":237},[1162],{"type":44,"value":261},{"type":39,"tag":91,"props":1164,"children":1165},{"style":104},[1166],{"type":44,"value":1167},"stream",{"type":39,"tag":91,"props":1169,"children":1170},{"style":237},[1171],{"type":44,"value":271},{"type":39,"tag":91,"props":1173,"children":1174},{"style":237},[1175],{"type":44,"value":251},{"type":39,"tag":91,"props":1177,"children":1178},{"style":243},[1179],{"type":44,"value":354},{"type":39,"tag":91,"props":1181,"children":1182},{"style":237},[1183],{"type":44,"value":276},{"type":39,"tag":91,"props":1185,"children":1186},{"class":93,"line":685},[1187,1191,1196,1200,1204,1208,1212,1216,1220,1224,1228,1232,1236,1240,1244,1248,1252,1257,1261,1265,1269],{"type":39,"tag":91,"props":1188,"children":1189},{"style":293},[1190],{"type":44,"value":296},{"type":39,"tag":91,"props":1192,"children":1193},{"style":243},[1194],{"type":44,"value":1195}," blob ",{"type":39,"tag":91,"props":1197,"children":1198},{"style":237},[1199],{"type":44,"value":306},{"type":39,"tag":91,"props":1201,"children":1202},{"style":231},[1203],{"type":44,"value":941},{"type":39,"tag":91,"props":1205,"children":1206},{"style":243},[1207],{"type":44,"value":514},{"type":39,"tag":91,"props":1209,"children":1210},{"style":237},[1211],{"type":44,"value":519},{"type":39,"tag":91,"props":1213,"children":1214},{"style":309},[1215],{"type":44,"value":954},{"type":39,"tag":91,"props":1217,"children":1218},{"style":243},[1219],{"type":44,"value":316},{"type":39,"tag":91,"props":1221,"children":1222},{"style":237},[1223],{"type":44,"value":271},{"type":39,"tag":91,"props":1225,"children":1226},{"style":104},[1227],{"type":44,"value":537},{"type":39,"tag":91,"props":1229,"children":1230},{"style":237},[1231],{"type":44,"value":271},{"type":39,"tag":91,"props":1233,"children":1234},{"style":237},[1235],{"type":44,"value":428},{"type":39,"tag":91,"props":1237,"children":1238},{"style":237},[1239],{"type":44,"value":240},{"type":39,"tag":91,"props":1241,"children":1242},{"style":324},[1243],{"type":44,"value":1060},{"type":39,"tag":91,"props":1245,"children":1246},{"style":237},[1247],{"type":44,"value":332},{"type":39,"tag":91,"props":1249,"children":1250},{"style":237},[1251],{"type":44,"value":261},{"type":39,"tag":91,"props":1253,"children":1254},{"style":104},[1255],{"type":44,"value":1256},"blob",{"type":39,"tag":91,"props":1258,"children":1259},{"style":237},[1260],{"type":44,"value":271},{"type":39,"tag":91,"props":1262,"children":1263},{"style":237},[1264],{"type":44,"value":251},{"type":39,"tag":91,"props":1266,"children":1267},{"style":243},[1268],{"type":44,"value":354},{"type":39,"tag":91,"props":1270,"children":1271},{"style":237},[1272],{"type":44,"value":276},{"type":39,"tag":91,"props":1274,"children":1275},{"class":93,"line":771},[1276,1280,1285,1289,1293,1297,1301,1305,1309,1313,1317,1321,1325,1329,1333,1337,1341,1346,1350,1354,1358],{"type":39,"tag":91,"props":1277,"children":1278},{"style":293},[1279],{"type":44,"value":296},{"type":39,"tag":91,"props":1281,"children":1282},{"style":243},[1283],{"type":44,"value":1284}," buffer ",{"type":39,"tag":91,"props":1286,"children":1287},{"style":237},[1288],{"type":44,"value":306},{"type":39,"tag":91,"props":1290,"children":1291},{"style":231},[1292],{"type":44,"value":941},{"type":39,"tag":91,"props":1294,"children":1295},{"style":243},[1296],{"type":44,"value":514},{"type":39,"tag":91,"props":1298,"children":1299},{"style":237},[1300],{"type":44,"value":519},{"type":39,"tag":91,"props":1302,"children":1303},{"style":309},[1304],{"type":44,"value":954},{"type":39,"tag":91,"props":1306,"children":1307},{"style":243},[1308],{"type":44,"value":316},{"type":39,"tag":91,"props":1310,"children":1311},{"style":237},[1312],{"type":44,"value":271},{"type":39,"tag":91,"props":1314,"children":1315},{"style":104},[1316],{"type":44,"value":537},{"type":39,"tag":91,"props":1318,"children":1319},{"style":237},[1320],{"type":44,"value":271},{"type":39,"tag":91,"props":1322,"children":1323},{"style":237},[1324],{"type":44,"value":428},{"type":39,"tag":91,"props":1326,"children":1327},{"style":237},[1328],{"type":44,"value":240},{"type":39,"tag":91,"props":1330,"children":1331},{"style":324},[1332],{"type":44,"value":1060},{"type":39,"tag":91,"props":1334,"children":1335},{"style":237},[1336],{"type":44,"value":332},{"type":39,"tag":91,"props":1338,"children":1339},{"style":237},[1340],{"type":44,"value":261},{"type":39,"tag":91,"props":1342,"children":1343},{"style":104},[1344],{"type":44,"value":1345},"arrayBuffer",{"type":39,"tag":91,"props":1347,"children":1348},{"style":237},[1349],{"type":44,"value":271},{"type":39,"tag":91,"props":1351,"children":1352},{"style":237},[1353],{"type":44,"value":251},{"type":39,"tag":91,"props":1355,"children":1356},{"style":243},[1357],{"type":44,"value":354},{"type":39,"tag":91,"props":1359,"children":1360},{"style":237},[1361],{"type":44,"value":276},{"type":39,"tag":91,"props":1363,"children":1364},{"class":93,"line":788},[1365],{"type":39,"tag":91,"props":1366,"children":1367},{"emptyLinePlaceholder":283},[1368],{"type":44,"value":286},{"type":39,"tag":91,"props":1370,"children":1371},{"class":93,"line":796},[1372],{"type":39,"tag":91,"props":1373,"children":1374},{"style":372},[1375],{"type":44,"value":629},{"type":39,"tag":91,"props":1377,"children":1378},{"class":93,"line":805},[1379,1383,1388,1392,1396,1400,1404,1409,1413,1417,1421,1425,1429],{"type":39,"tag":91,"props":1380,"children":1381},{"style":293},[1382],{"type":44,"value":296},{"type":39,"tag":91,"props":1384,"children":1385},{"style":243},[1386],{"type":44,"value":1387}," result ",{"type":39,"tag":91,"props":1389,"children":1390},{"style":237},[1391],{"type":44,"value":306},{"type":39,"tag":91,"props":1393,"children":1394},{"style":231},[1395],{"type":44,"value":941},{"type":39,"tag":91,"props":1397,"children":1398},{"style":243},[1399],{"type":44,"value":514},{"type":39,"tag":91,"props":1401,"children":1402},{"style":237},[1403],{"type":44,"value":519},{"type":39,"tag":91,"props":1405,"children":1406},{"style":309},[1407],{"type":44,"value":1408},"getWithMetadata",{"type":39,"tag":91,"props":1410,"children":1411},{"style":243},[1412],{"type":44,"value":316},{"type":39,"tag":91,"props":1414,"children":1415},{"style":237},[1416],{"type":44,"value":271},{"type":39,"tag":91,"props":1418,"children":1419},{"style":104},[1420],{"type":44,"value":537},{"type":39,"tag":91,"props":1422,"children":1423},{"style":237},[1424],{"type":44,"value":271},{"type":39,"tag":91,"props":1426,"children":1427},{"style":243},[1428],{"type":44,"value":354},{"type":39,"tag":91,"props":1430,"children":1431},{"style":237},[1432],{"type":44,"value":276},{"type":39,"tag":91,"props":1434,"children":1436},{"class":93,"line":1435},12,[1437],{"type":39,"tag":91,"props":1438,"children":1439},{"style":372},[1440],{"type":44,"value":1441},"\u002F\u002F { data: any, etag: string, metadata: object } | null\n",{"type":39,"tag":91,"props":1443,"children":1445},{"class":93,"line":1444},13,[1446],{"type":39,"tag":91,"props":1447,"children":1448},{"emptyLinePlaceholder":283},[1449],{"type":44,"value":286},{"type":39,"tag":91,"props":1451,"children":1453},{"class":93,"line":1452},14,[1454],{"type":39,"tag":91,"props":1455,"children":1456},{"style":372},[1457],{"type":44,"value":1458},"\u002F\u002F Metadata only (no data download)\n",{"type":39,"tag":91,"props":1460,"children":1462},{"class":93,"line":1461},15,[1463,1467,1472,1476,1480,1484,1488,1493,1497,1501,1505,1509,1513],{"type":39,"tag":91,"props":1464,"children":1465},{"style":293},[1466],{"type":44,"value":296},{"type":39,"tag":91,"props":1468,"children":1469},{"style":243},[1470],{"type":44,"value":1471}," meta ",{"type":39,"tag":91,"props":1473,"children":1474},{"style":237},[1475],{"type":44,"value":306},{"type":39,"tag":91,"props":1477,"children":1478},{"style":231},[1479],{"type":44,"value":941},{"type":39,"tag":91,"props":1481,"children":1482},{"style":243},[1483],{"type":44,"value":514},{"type":39,"tag":91,"props":1485,"children":1486},{"style":237},[1487],{"type":44,"value":519},{"type":39,"tag":91,"props":1489,"children":1490},{"style":309},[1491],{"type":44,"value":1492},"getMetadata",{"type":39,"tag":91,"props":1494,"children":1495},{"style":243},[1496],{"type":44,"value":316},{"type":39,"tag":91,"props":1498,"children":1499},{"style":237},[1500],{"type":44,"value":271},{"type":39,"tag":91,"props":1502,"children":1503},{"style":104},[1504],{"type":44,"value":537},{"type":39,"tag":91,"props":1506,"children":1507},{"style":237},[1508],{"type":44,"value":271},{"type":39,"tag":91,"props":1510,"children":1511},{"style":243},[1512],{"type":44,"value":354},{"type":39,"tag":91,"props":1514,"children":1515},{"style":237},[1516],{"type":44,"value":276},{"type":39,"tag":91,"props":1518,"children":1520},{"class":93,"line":1519},16,[1521],{"type":39,"tag":91,"props":1522,"children":1523},{"style":372},[1524],{"type":44,"value":1525},"\u002F\u002F { etag: string, metadata: object } | null\n",{"type":39,"tag":481,"props":1527,"children":1529},{"id":1528},"delete",[1530],{"type":44,"value":1531},"Delete",{"type":39,"tag":80,"props":1533,"children":1535},{"className":219,"code":1534,"language":221,"meta":85,"style":85},"await store.delete(\"key\");\n",[1536],{"type":39,"tag":71,"props":1537,"children":1538},{"__ignoreMap":85},[1539],{"type":39,"tag":91,"props":1540,"children":1541},{"class":93,"line":94},[1542,1546,1550,1554,1558,1562,1566,1570,1574,1578],{"type":39,"tag":91,"props":1543,"children":1544},{"style":231},[1545],{"type":44,"value":509},{"type":39,"tag":91,"props":1547,"children":1548},{"style":243},[1549],{"type":44,"value":514},{"type":39,"tag":91,"props":1551,"children":1552},{"style":237},[1553],{"type":44,"value":519},{"type":39,"tag":91,"props":1555,"children":1556},{"style":309},[1557],{"type":44,"value":1528},{"type":39,"tag":91,"props":1559,"children":1560},{"style":243},[1561],{"type":44,"value":316},{"type":39,"tag":91,"props":1563,"children":1564},{"style":237},[1565],{"type":44,"value":271},{"type":39,"tag":91,"props":1567,"children":1568},{"style":104},[1569],{"type":44,"value":537},{"type":39,"tag":91,"props":1571,"children":1572},{"style":237},[1573],{"type":44,"value":271},{"type":39,"tag":91,"props":1575,"children":1576},{"style":243},[1577],{"type":44,"value":354},{"type":39,"tag":91,"props":1579,"children":1580},{"style":237},[1581],{"type":44,"value":276},{"type":39,"tag":481,"props":1583,"children":1585},{"id":1584},"list",[1586],{"type":44,"value":1587},"List",{"type":39,"tag":80,"props":1589,"children":1591},{"className":219,"code":1590,"language":221,"meta":85,"style":85},"const { blobs } = await store.list();\n\u002F\u002F blobs: [{ etag: string, key: string }, ...]\n\n\u002F\u002F Filter by prefix\nconst { blobs } = await store.list({ prefix: \"uploads\u002F\" });\n",[1592],{"type":39,"tag":71,"props":1593,"children":1594},{"__ignoreMap":85},[1595,1644,1652,1659,1667],{"type":39,"tag":91,"props":1596,"children":1597},{"class":93,"line":94},[1598,1602,1606,1611,1615,1620,1624,1628,1632,1636,1640],{"type":39,"tag":91,"props":1599,"children":1600},{"style":293},[1601],{"type":44,"value":296},{"type":39,"tag":91,"props":1603,"children":1604},{"style":237},[1605],{"type":44,"value":240},{"type":39,"tag":91,"props":1607,"children":1608},{"style":243},[1609],{"type":44,"value":1610}," blobs ",{"type":39,"tag":91,"props":1612,"children":1613},{"style":237},[1614],{"type":44,"value":777},{"type":39,"tag":91,"props":1616,"children":1617},{"style":237},[1618],{"type":44,"value":1619}," =",{"type":39,"tag":91,"props":1621,"children":1622},{"style":231},[1623],{"type":44,"value":941},{"type":39,"tag":91,"props":1625,"children":1626},{"style":243},[1627],{"type":44,"value":514},{"type":39,"tag":91,"props":1629,"children":1630},{"style":237},[1631],{"type":44,"value":519},{"type":39,"tag":91,"props":1633,"children":1634},{"style":309},[1635],{"type":44,"value":1584},{"type":39,"tag":91,"props":1637,"children":1638},{"style":243},[1639],{"type":44,"value":749},{"type":39,"tag":91,"props":1641,"children":1642},{"style":237},[1643],{"type":44,"value":276},{"type":39,"tag":91,"props":1645,"children":1646},{"class":93,"line":279},[1647],{"type":39,"tag":91,"props":1648,"children":1649},{"style":372},[1650],{"type":44,"value":1651},"\u002F\u002F blobs: [{ etag: string, key: string }, ...]\n",{"type":39,"tag":91,"props":1653,"children":1654},{"class":93,"line":289},[1655],{"type":39,"tag":91,"props":1656,"children":1657},{"emptyLinePlaceholder":283},[1658],{"type":44,"value":286},{"type":39,"tag":91,"props":1660,"children":1661},{"class":93,"line":361},[1662],{"type":39,"tag":91,"props":1663,"children":1664},{"style":372},[1665],{"type":44,"value":1666},"\u002F\u002F Filter by prefix\n",{"type":39,"tag":91,"props":1668,"children":1669},{"class":93,"line":27},[1670,1674,1678,1682,1686,1690,1694,1698,1702,1706,1710,1714,1719,1723,1727,1732,1736,1740,1744],{"type":39,"tag":91,"props":1671,"children":1672},{"style":293},[1673],{"type":44,"value":296},{"type":39,"tag":91,"props":1675,"children":1676},{"style":237},[1677],{"type":44,"value":240},{"type":39,"tag":91,"props":1679,"children":1680},{"style":243},[1681],{"type":44,"value":1610},{"type":39,"tag":91,"props":1683,"children":1684},{"style":237},[1685],{"type":44,"value":777},{"type":39,"tag":91,"props":1687,"children":1688},{"style":237},[1689],{"type":44,"value":1619},{"type":39,"tag":91,"props":1691,"children":1692},{"style":231},[1693],{"type":44,"value":941},{"type":39,"tag":91,"props":1695,"children":1696},{"style":243},[1697],{"type":44,"value":514},{"type":39,"tag":91,"props":1699,"children":1700},{"style":237},[1701],{"type":44,"value":519},{"type":39,"tag":91,"props":1703,"children":1704},{"style":309},[1705],{"type":44,"value":1584},{"type":39,"tag":91,"props":1707,"children":1708},{"style":243},[1709],{"type":44,"value":316},{"type":39,"tag":91,"props":1711,"children":1712},{"style":237},[1713],{"type":44,"value":321},{"type":39,"tag":91,"props":1715,"children":1716},{"style":324},[1717],{"type":44,"value":1718}," prefix",{"type":39,"tag":91,"props":1720,"children":1721},{"style":237},[1722],{"type":44,"value":332},{"type":39,"tag":91,"props":1724,"children":1725},{"style":237},[1726],{"type":44,"value":261},{"type":39,"tag":91,"props":1728,"children":1729},{"style":104},[1730],{"type":44,"value":1731},"uploads\u002F",{"type":39,"tag":91,"props":1733,"children":1734},{"style":237},[1735],{"type":44,"value":271},{"type":39,"tag":91,"props":1737,"children":1738},{"style":237},[1739],{"type":44,"value":251},{"type":39,"tag":91,"props":1741,"children":1742},{"style":243},[1743],{"type":44,"value":354},{"type":39,"tag":91,"props":1745,"children":1746},{"style":237},[1747],{"type":44,"value":276},{"type":39,"tag":47,"props":1749,"children":1750},{},[1751,1757,1759,1764,1766,1772,1774,1780,1782,1788],{"type":39,"tag":71,"props":1752,"children":1754},{"className":1753},[],[1755],{"type":44,"value":1756},"store.list()",{"type":44,"value":1758}," ",{"type":39,"tag":53,"props":1760,"children":1761},{},[1762],{"type":44,"value":1763},"auto-paginates",{"type":44,"value":1765},": a plain ",{"type":39,"tag":71,"props":1767,"children":1769},{"className":1768},[],[1770],{"type":44,"value":1771},"await store.list()",{"type":44,"value":1773}," transparently fetches every page and returns the complete ",{"type":39,"tag":71,"props":1775,"children":1777},{"className":1776},[],[1778],{"type":44,"value":1779},"blobs",{"type":44,"value":1781}," array — you do NOT hand-roll page cursors or offsets. For a very large store, pass ",{"type":39,"tag":71,"props":1783,"children":1785},{"className":1784},[],[1786],{"type":44,"value":1787},"{ paginate: true }",{"type":44,"value":1789}," to get an async iterator and stream results a page at a time instead of buffering every key in memory:",{"type":39,"tag":80,"props":1791,"children":1793},{"className":219,"code":1792,"language":221,"meta":85,"style":85},"for await (const page of store.list({ paginate: true })) {\n  for (const { key } of page.blobs) {\n    \u002F\u002F handle each key\n  }\n}\n",[1794],{"type":39,"tag":71,"props":1795,"children":1796},{"__ignoreMap":85},[1797,1877,1933,1941,1949],{"type":39,"tag":91,"props":1798,"children":1799},{"class":93,"line":94},[1800,1805,1809,1814,1818,1823,1828,1832,1836,1840,1844,1848,1853,1857,1863,1867,1872],{"type":39,"tag":91,"props":1801,"children":1802},{"style":231},[1803],{"type":44,"value":1804},"for",{"type":39,"tag":91,"props":1806,"children":1807},{"style":231},[1808],{"type":44,"value":941},{"type":39,"tag":91,"props":1810,"children":1811},{"style":243},[1812],{"type":44,"value":1813}," (",{"type":39,"tag":91,"props":1815,"children":1816},{"style":293},[1817],{"type":44,"value":296},{"type":39,"tag":91,"props":1819,"children":1820},{"style":243},[1821],{"type":44,"value":1822}," page ",{"type":39,"tag":91,"props":1824,"children":1825},{"style":237},[1826],{"type":44,"value":1827},"of",{"type":39,"tag":91,"props":1829,"children":1830},{"style":243},[1831],{"type":44,"value":514},{"type":39,"tag":91,"props":1833,"children":1834},{"style":237},[1835],{"type":44,"value":519},{"type":39,"tag":91,"props":1837,"children":1838},{"style":309},[1839],{"type":44,"value":1584},{"type":39,"tag":91,"props":1841,"children":1842},{"style":243},[1843],{"type":44,"value":316},{"type":39,"tag":91,"props":1845,"children":1846},{"style":237},[1847],{"type":44,"value":321},{"type":39,"tag":91,"props":1849,"children":1850},{"style":324},[1851],{"type":44,"value":1852}," paginate",{"type":39,"tag":91,"props":1854,"children":1855},{"style":237},[1856],{"type":44,"value":332},{"type":39,"tag":91,"props":1858,"children":1860},{"style":1859},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1861],{"type":44,"value":1862}," true",{"type":39,"tag":91,"props":1864,"children":1865},{"style":237},[1866],{"type":44,"value":251},{"type":39,"tag":91,"props":1868,"children":1869},{"style":243},[1870],{"type":44,"value":1871},")) ",{"type":39,"tag":91,"props":1873,"children":1874},{"style":237},[1875],{"type":44,"value":1876},"{\n",{"type":39,"tag":91,"props":1878,"children":1879},{"class":93,"line":279},[1880,1885,1889,1893,1897,1902,1906,1911,1916,1920,1924,1929],{"type":39,"tag":91,"props":1881,"children":1882},{"style":231},[1883],{"type":44,"value":1884},"  for",{"type":39,"tag":91,"props":1886,"children":1887},{"style":324},[1888],{"type":44,"value":1813},{"type":39,"tag":91,"props":1890,"children":1891},{"style":293},[1892],{"type":44,"value":296},{"type":39,"tag":91,"props":1894,"children":1895},{"style":237},[1896],{"type":44,"value":240},{"type":39,"tag":91,"props":1898,"children":1899},{"style":243},[1900],{"type":44,"value":1901}," key",{"type":39,"tag":91,"props":1903,"children":1904},{"style":237},[1905],{"type":44,"value":251},{"type":39,"tag":91,"props":1907,"children":1908},{"style":237},[1909],{"type":44,"value":1910}," of",{"type":39,"tag":91,"props":1912,"children":1913},{"style":243},[1914],{"type":44,"value":1915}," page",{"type":39,"tag":91,"props":1917,"children":1918},{"style":237},[1919],{"type":44,"value":519},{"type":39,"tag":91,"props":1921,"children":1922},{"style":243},[1923],{"type":44,"value":1779},{"type":39,"tag":91,"props":1925,"children":1926},{"style":324},[1927],{"type":44,"value":1928},") ",{"type":39,"tag":91,"props":1930,"children":1931},{"style":237},[1932],{"type":44,"value":1876},{"type":39,"tag":91,"props":1934,"children":1935},{"class":93,"line":289},[1936],{"type":39,"tag":91,"props":1937,"children":1938},{"style":372},[1939],{"type":44,"value":1940},"    \u002F\u002F handle each key\n",{"type":39,"tag":91,"props":1942,"children":1943},{"class":93,"line":361},[1944],{"type":39,"tag":91,"props":1945,"children":1946},{"style":237},[1947],{"type":44,"value":1948},"  }\n",{"type":39,"tag":91,"props":1950,"children":1951},{"class":93,"line":27},[1952],{"type":39,"tag":91,"props":1953,"children":1954},{"style":237},[1955],{"type":44,"value":1956},"}\n",{"type":39,"tag":47,"props":1958,"children":1959},{},[1960,1962,1968,1970,1976,1978,1983,1985,1991,1993,1999,2001,2006,2008,2013,2015,2020],{"type":44,"value":1961},"Pass ",{"type":39,"tag":71,"props":1963,"children":1965},{"className":1964},[],[1966],{"type":44,"value":1967},"{ directories: true }",{"type":44,"value":1969}," to group keys by the ",{"type":39,"tag":71,"props":1971,"children":1973},{"className":1972},[],[1974],{"type":44,"value":1975},"\u002F",{"type":44,"value":1977}," delimiter (folder-style): the result's ",{"type":39,"tag":71,"props":1979,"children":1981},{"className":1980},[],[1982],{"type":44,"value":1779},{"type":44,"value":1984}," holds keys at the current level and ",{"type":39,"tag":71,"props":1986,"children":1988},{"className":1987},[],[1989],{"type":44,"value":1990},"directories",{"type":44,"value":1992}," holds the common prefixes, which you drill into with ",{"type":39,"tag":71,"props":1994,"children":1996},{"className":1995},[],[1997],{"type":44,"value":1998},"prefix",{"type":44,"value":2000},". Keys are a flat namespace — ",{"type":39,"tag":71,"props":2002,"children":2004},{"className":2003},[],[2005],{"type":44,"value":1975},{"type":44,"value":2007}," is only a naming convention that ",{"type":39,"tag":71,"props":2009,"children":2011},{"className":2010},[],[2012],{"type":44,"value":1998},{"type":44,"value":2014}," and ",{"type":39,"tag":71,"props":2016,"children":2018},{"className":2017},[],[2019],{"type":44,"value":1990},{"type":44,"value":2021}," let you navigate.",{"type":39,"tag":114,"props":2023,"children":2025},{"id":2024},"store-types",[2026],{"type":44,"value":2027},"Store Types",{"type":39,"tag":126,"props":2029,"children":2030},{},[2031,2047],{"type":39,"tag":130,"props":2032,"children":2033},{},[2034,2039,2040,2045],{"type":39,"tag":53,"props":2035,"children":2036},{},[2037],{"type":44,"value":2038},"Site-scoped",{"type":44,"value":1813},{"type":39,"tag":71,"props":2041,"children":2043},{"className":2042},[],[2044],{"type":44,"value":172},{"type":44,"value":2046},"): Persist across all deploys. Use for most cases.",{"type":39,"tag":130,"props":2048,"children":2049},{},[2050,2055,2056,2061],{"type":39,"tag":53,"props":2051,"children":2052},{},[2053],{"type":44,"value":2054},"Deploy-scoped",{"type":44,"value":1813},{"type":39,"tag":71,"props":2057,"children":2059},{"className":2058},[],[2060],{"type":44,"value":180},{"type":44,"value":2062},"): Tied to a specific deploy lifecycle.",{"type":39,"tag":47,"props":2064,"children":2065},{},[2066,2071,2073,2079,2080,2085,2087,2092,2094,2099,2101,2107],{"type":39,"tag":53,"props":2067,"children":2068},{},[2069],{"type":44,"value":2070},"A site-scoped store is shared across ALL deploy contexts.",{"type":44,"value":2072}," Production, deploy previews, and branch deploys all read and write the ",{"type":39,"tag":2074,"props":2075,"children":2076},"em",{},[2077],{"type":44,"value":2078},"same",{"type":44,"value":1758},{"type":39,"tag":71,"props":2081,"children":2083},{"className":2082},[],[2084],{"type":44,"value":172},{"type":44,"value":2086}," store — unlike Netlify Database, which forks a separate branch per preview, Blobs does not isolate previews. Code running on a deploy preview reads, overwrites, and deletes the same production data. Don't run destructive tests or seed throwaway data against a ",{"type":39,"tag":71,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":44,"value":172},{"type":44,"value":2093}," store from a preview — it hits production. When you need per-context isolation, use ",{"type":39,"tag":71,"props":2095,"children":2097},{"className":2096},[],[2098],{"type":44,"value":180},{"type":44,"value":2100},", or partition by deploy context with a context-specific store ",{"type":39,"tag":71,"props":2102,"children":2104},{"className":2103},[],[2105],{"type":44,"value":2106},"name",{"type":44,"value":2108}," or key prefix.",{"type":39,"tag":114,"props":2110,"children":2112},{"id":2111},"consistency-and-concurrency",[2113],{"type":44,"value":2114},"Consistency and concurrency",{"type":39,"tag":47,"props":2116,"children":2117},{},[2118,2120,2125,2127,2133,2135,2139],{"type":44,"value":2119},"Blobs are ",{"type":39,"tag":53,"props":2121,"children":2122},{},[2123],{"type":44,"value":2124},"eventually consistent by default",{"type":44,"value":2126},": an immediate read right after a write may return the previous value or ",{"type":39,"tag":71,"props":2128,"children":2130},{"className":2129},[],[2131],{"type":44,"value":2132},"null",{"type":44,"value":2134},". Opt into ",{"type":39,"tag":53,"props":2136,"children":2137},{},[2138],{"type":44,"value":53},{"type":44,"value":2140}," consistency when you need read-your-writes. You can set it once on the store, or request it per read:",{"type":39,"tag":80,"props":2142,"children":2144},{"className":219,"code":2143,"language":221,"meta":85,"style":85},"import { getStore } from \"@netlify\u002Fblobs\";\n\nconst store = getStore({ name: \"my-store\", consistency: \"strong\" });\n\n\u002F\u002F or just for a single read that must see the latest write:\nconst fresh = await store.get(\"key\", { consistency: \"strong\" });\n",[2145],{"type":39,"tag":71,"props":2146,"children":2147},{"__ignoreMap":85},[2148,2187,2194,2277,2284,2292],{"type":39,"tag":91,"props":2149,"children":2150},{"class":93,"line":94},[2151,2155,2159,2163,2167,2171,2175,2179,2183],{"type":39,"tag":91,"props":2152,"children":2153},{"style":231},[2154],{"type":44,"value":234},{"type":39,"tag":91,"props":2156,"children":2157},{"style":237},[2158],{"type":44,"value":240},{"type":39,"tag":91,"props":2160,"children":2161},{"style":243},[2162],{"type":44,"value":246},{"type":39,"tag":91,"props":2164,"children":2165},{"style":237},[2166],{"type":44,"value":251},{"type":39,"tag":91,"props":2168,"children":2169},{"style":231},[2170],{"type":44,"value":256},{"type":39,"tag":91,"props":2172,"children":2173},{"style":237},[2174],{"type":44,"value":261},{"type":39,"tag":91,"props":2176,"children":2177},{"style":104},[2178],{"type":44,"value":266},{"type":39,"tag":91,"props":2180,"children":2181},{"style":237},[2182],{"type":44,"value":271},{"type":39,"tag":91,"props":2184,"children":2185},{"style":237},[2186],{"type":44,"value":276},{"type":39,"tag":91,"props":2188,"children":2189},{"class":93,"line":279},[2190],{"type":39,"tag":91,"props":2191,"children":2192},{"emptyLinePlaceholder":283},[2193],{"type":44,"value":286},{"type":39,"tag":91,"props":2195,"children":2196},{"class":93,"line":289},[2197,2201,2205,2209,2213,2217,2221,2225,2229,2233,2237,2241,2245,2249,2253,2257,2261,2265,2269,2273],{"type":39,"tag":91,"props":2198,"children":2199},{"style":293},[2200],{"type":44,"value":296},{"type":39,"tag":91,"props":2202,"children":2203},{"style":243},[2204],{"type":44,"value":301},{"type":39,"tag":91,"props":2206,"children":2207},{"style":237},[2208],{"type":44,"value":306},{"type":39,"tag":91,"props":2210,"children":2211},{"style":309},[2212],{"type":44,"value":246},{"type":39,"tag":91,"props":2214,"children":2215},{"style":243},[2216],{"type":44,"value":316},{"type":39,"tag":91,"props":2218,"children":2219},{"style":237},[2220],{"type":44,"value":321},{"type":39,"tag":91,"props":2222,"children":2223},{"style":324},[2224],{"type":44,"value":327},{"type":39,"tag":91,"props":2226,"children":2227},{"style":237},[2228],{"type":44,"value":332},{"type":39,"tag":91,"props":2230,"children":2231},{"style":237},[2232],{"type":44,"value":261},{"type":39,"tag":91,"props":2234,"children":2235},{"style":104},[2236],{"type":44,"value":341},{"type":39,"tag":91,"props":2238,"children":2239},{"style":237},[2240],{"type":44,"value":271},{"type":39,"tag":91,"props":2242,"children":2243},{"style":237},[2244],{"type":44,"value":428},{"type":39,"tag":91,"props":2246,"children":2247},{"style":324},[2248],{"type":44,"value":433},{"type":39,"tag":91,"props":2250,"children":2251},{"style":237},[2252],{"type":44,"value":332},{"type":39,"tag":91,"props":2254,"children":2255},{"style":237},[2256],{"type":44,"value":261},{"type":39,"tag":91,"props":2258,"children":2259},{"style":104},[2260],{"type":44,"value":53},{"type":39,"tag":91,"props":2262,"children":2263},{"style":237},[2264],{"type":44,"value":271},{"type":39,"tag":91,"props":2266,"children":2267},{"style":237},[2268],{"type":44,"value":251},{"type":39,"tag":91,"props":2270,"children":2271},{"style":243},[2272],{"type":44,"value":354},{"type":39,"tag":91,"props":2274,"children":2275},{"style":237},[2276],{"type":44,"value":276},{"type":39,"tag":91,"props":2278,"children":2279},{"class":93,"line":361},[2280],{"type":39,"tag":91,"props":2281,"children":2282},{"emptyLinePlaceholder":283},[2283],{"type":44,"value":286},{"type":39,"tag":91,"props":2285,"children":2286},{"class":93,"line":27},[2287],{"type":39,"tag":91,"props":2288,"children":2289},{"style":372},[2290],{"type":44,"value":2291},"\u002F\u002F or just for a single read that must see the latest write:\n",{"type":39,"tag":91,"props":2293,"children":2294},{"class":93,"line":378},[2295,2299,2304,2308,2312,2316,2320,2324,2328,2332,2336,2340,2344,2348,2352,2356,2360,2364,2368,2372,2376],{"type":39,"tag":91,"props":2296,"children":2297},{"style":293},[2298],{"type":44,"value":296},{"type":39,"tag":91,"props":2300,"children":2301},{"style":243},[2302],{"type":44,"value":2303}," fresh ",{"type":39,"tag":91,"props":2305,"children":2306},{"style":237},[2307],{"type":44,"value":306},{"type":39,"tag":91,"props":2309,"children":2310},{"style":231},[2311],{"type":44,"value":941},{"type":39,"tag":91,"props":2313,"children":2314},{"style":243},[2315],{"type":44,"value":514},{"type":39,"tag":91,"props":2317,"children":2318},{"style":237},[2319],{"type":44,"value":519},{"type":39,"tag":91,"props":2321,"children":2322},{"style":309},[2323],{"type":44,"value":954},{"type":39,"tag":91,"props":2325,"children":2326},{"style":243},[2327],{"type":44,"value":316},{"type":39,"tag":91,"props":2329,"children":2330},{"style":237},[2331],{"type":44,"value":271},{"type":39,"tag":91,"props":2333,"children":2334},{"style":104},[2335],{"type":44,"value":537},{"type":39,"tag":91,"props":2337,"children":2338},{"style":237},[2339],{"type":44,"value":271},{"type":39,"tag":91,"props":2341,"children":2342},{"style":237},[2343],{"type":44,"value":428},{"type":39,"tag":91,"props":2345,"children":2346},{"style":237},[2347],{"type":44,"value":240},{"type":39,"tag":91,"props":2349,"children":2350},{"style":324},[2351],{"type":44,"value":433},{"type":39,"tag":91,"props":2353,"children":2354},{"style":237},[2355],{"type":44,"value":332},{"type":39,"tag":91,"props":2357,"children":2358},{"style":237},[2359],{"type":44,"value":261},{"type":39,"tag":91,"props":2361,"children":2362},{"style":104},[2363],{"type":44,"value":53},{"type":39,"tag":91,"props":2365,"children":2366},{"style":237},[2367],{"type":44,"value":271},{"type":39,"tag":91,"props":2369,"children":2370},{"style":237},[2371],{"type":44,"value":251},{"type":39,"tag":91,"props":2373,"children":2374},{"style":243},[2375],{"type":44,"value":354},{"type":39,"tag":91,"props":2377,"children":2378},{"style":237},[2379],{"type":44,"value":276},{"type":39,"tag":47,"props":2381,"children":2382},{},[2383,2385,2390],{"type":44,"value":2384},"Strong reads are ",{"type":39,"tag":53,"props":2386,"children":2387},{},[2388],{"type":44,"value":2389},"slower",{"type":44,"value":2391}," than eventual reads, so don't make everything strong \"to be safe\" — reserve it for the reads that genuinely need the latest write (typically a read right after a write in the same request). For read-heavy access to data that rarely changes, the default eventual consistency is faster and is the right choice.",{"type":39,"tag":47,"props":2393,"children":2394},{},[2395,2397,2402,2404,2409,2411,2416],{"type":44,"value":2396},"Blobs has ",{"type":39,"tag":53,"props":2398,"children":2399},{},[2400],{"type":44,"value":2401},"no concurrency control",{"type":44,"value":2403},": there is no locking and there are no transactions, and concurrent writes to the same key are ",{"type":39,"tag":53,"props":2405,"children":2406},{},[2407],{"type":44,"value":2408},"last-write-wins",{"type":44,"value":2410}," — one silently overwrites the other. Do NOT build counters, balances, or any read-modify-write logic over a single blob key and expect it to be correct under concurrent traffic (two requests can both read the old value and both write back, losing an update). When you need atomic or transactional updates, use Netlify Database (see ",{"type":39,"tag":71,"props":2412,"children":2414},{"className":2413},[],[2415],{"type":44,"value":76},{"type":44,"value":2417},"), which provides real transactions — not Blobs.",{"type":39,"tag":114,"props":2419,"children":2421},{"id":2420},"limits",[2422],{"type":44,"value":2423},"Limits",{"type":39,"tag":2425,"props":2426,"children":2427},"table",{},[2428,2447],{"type":39,"tag":2429,"props":2430,"children":2431},"thead",{},[2432],{"type":39,"tag":2433,"props":2434,"children":2435},"tr",{},[2436,2442],{"type":39,"tag":2437,"props":2438,"children":2439},"th",{},[2440],{"type":44,"value":2441},"Limit",{"type":39,"tag":2437,"props":2443,"children":2444},{},[2445],{"type":44,"value":2446},"Value",{"type":39,"tag":2448,"props":2449,"children":2450},"tbody",{},[2451,2465,2478,2491],{"type":39,"tag":2433,"props":2452,"children":2453},{},[2454,2460],{"type":39,"tag":2455,"props":2456,"children":2457},"td",{},[2458],{"type":44,"value":2459},"Max object size",{"type":39,"tag":2455,"props":2461,"children":2462},{},[2463],{"type":44,"value":2464},"5 GB",{"type":39,"tag":2433,"props":2466,"children":2467},{},[2468,2473],{"type":39,"tag":2455,"props":2469,"children":2470},{},[2471],{"type":44,"value":2472},"Metadata per object",{"type":39,"tag":2455,"props":2474,"children":2475},{},[2476],{"type":44,"value":2477},"2 KB",{"type":39,"tag":2433,"props":2479,"children":2480},{},[2481,2486],{"type":39,"tag":2455,"props":2482,"children":2483},{},[2484],{"type":44,"value":2485},"Store name max length",{"type":39,"tag":2455,"props":2487,"children":2488},{},[2489],{"type":44,"value":2490},"64 bytes",{"type":39,"tag":2433,"props":2492,"children":2493},{},[2494,2499],{"type":39,"tag":2455,"props":2495,"children":2496},{},[2497],{"type":44,"value":2498},"Key max length",{"type":39,"tag":2455,"props":2500,"children":2501},{},[2502],{"type":44,"value":2503},"600 bytes",{"type":39,"tag":47,"props":2505,"children":2506},{},[2507,2509,2514,2516,2522],{"type":44,"value":2508},"Object metadata is capped at ",{"type":39,"tag":53,"props":2510,"children":2511},{},[2512],{"type":44,"value":2513},"2 KB per object",{"type":44,"value":2515}," — it's for small descriptors (content type, size, timestamps, a status flag), not a place to stash large JSON. Anything bigger belongs in the blob value itself, not in ",{"type":39,"tag":71,"props":2517,"children":2519},{"className":2518},[],[2520],{"type":44,"value":2521},"metadata",{"type":44,"value":519},{"type":39,"tag":114,"props":2524,"children":2526},{"id":2525},"local-development",[2527],{"type":44,"value":2528},"Local Development",{"type":39,"tag":47,"props":2530,"children":2531},{},[2532,2534,2540,2542,2548],{"type":44,"value":2533},"Local dev uses a sandboxed store (separate from production). For Vite-based projects, install ",{"type":39,"tag":71,"props":2535,"children":2537},{"className":2536},[],[2538],{"type":44,"value":2539},"@netlify\u002Fvite-plugin",{"type":44,"value":2541}," to enable local Blobs access. Otherwise, use ",{"type":39,"tag":71,"props":2543,"children":2545},{"className":2544},[],[2546],{"type":44,"value":2547},"netlify dev",{"type":44,"value":519},{"type":39,"tag":47,"props":2550,"children":2551},{},[2552,2557,2559,2564,2566,2571],{"type":39,"tag":53,"props":2553,"children":2554},{},[2555],{"type":44,"value":2556},"Common error",{"type":44,"value":2558},": \"The environment has not been configured to use Netlify Blobs\" — install ",{"type":39,"tag":71,"props":2560,"children":2562},{"className":2561},[],[2563],{"type":44,"value":2539},{"type":44,"value":2565}," or run via ",{"type":39,"tag":71,"props":2567,"children":2569},{"className":2568},[],[2570],{"type":44,"value":2547},{"type":44,"value":519},{"type":39,"tag":114,"props":2573,"children":2575},{"id":2574},"inspecting-blobs-from-the-cli",[2576],{"type":44,"value":2577},"Inspecting blobs from the CLI",{"type":39,"tag":47,"props":2579,"children":2580},{},[2581],{"type":44,"value":2582},"The Netlify CLI can read and write blobs directly — useful for debugging, seeding, or a one-off fix without writing and deploying a function:",{"type":39,"tag":80,"props":2584,"children":2586},{"className":82,"code":2585,"language":84,"meta":85,"style":85},"netlify blobs:list \u003Cstore-name>\nnetlify blobs:get \u003Cstore-name> \u003Ckey>\nnetlify blobs:set \u003Cstore-name> \u003Ckey> \u003Cvalue>\nnetlify blobs:delete \u003Cstore-name> \u003Ckey>\n",[2587],{"type":39,"tag":71,"props":2588,"children":2589},{"__ignoreMap":85},[2590,2622,2669,2730],{"type":39,"tag":91,"props":2591,"children":2592},{"class":93,"line":94},[2593,2597,2602,2607,2612,2617],{"type":39,"tag":91,"props":2594,"children":2595},{"style":98},[2596],{"type":44,"value":8},{"type":39,"tag":91,"props":2598,"children":2599},{"style":104},[2600],{"type":44,"value":2601}," blobs:list",{"type":39,"tag":91,"props":2603,"children":2604},{"style":237},[2605],{"type":44,"value":2606}," \u003C",{"type":39,"tag":91,"props":2608,"children":2609},{"style":104},[2610],{"type":44,"value":2611},"store-nam",{"type":39,"tag":91,"props":2613,"children":2614},{"style":243},[2615],{"type":44,"value":2616},"e",{"type":39,"tag":91,"props":2618,"children":2619},{"style":237},[2620],{"type":44,"value":2621},">\n",{"type":39,"tag":91,"props":2623,"children":2624},{"class":93,"line":279},[2625,2629,2634,2638,2642,2646,2651,2655,2660,2665],{"type":39,"tag":91,"props":2626,"children":2627},{"style":98},[2628],{"type":44,"value":8},{"type":39,"tag":91,"props":2630,"children":2631},{"style":104},[2632],{"type":44,"value":2633}," blobs:get",{"type":39,"tag":91,"props":2635,"children":2636},{"style":237},[2637],{"type":44,"value":2606},{"type":39,"tag":91,"props":2639,"children":2640},{"style":104},[2641],{"type":44,"value":2611},{"type":39,"tag":91,"props":2643,"children":2644},{"style":243},[2645],{"type":44,"value":2616},{"type":39,"tag":91,"props":2647,"children":2648},{"style":237},[2649],{"type":44,"value":2650},">",{"type":39,"tag":91,"props":2652,"children":2653},{"style":237},[2654],{"type":44,"value":2606},{"type":39,"tag":91,"props":2656,"children":2657},{"style":104},[2658],{"type":44,"value":2659},"ke",{"type":39,"tag":91,"props":2661,"children":2662},{"style":243},[2663],{"type":44,"value":2664},"y",{"type":39,"tag":91,"props":2666,"children":2667},{"style":237},[2668],{"type":44,"value":2621},{"type":39,"tag":91,"props":2670,"children":2671},{"class":93,"line":289},[2672,2676,2681,2685,2689,2693,2697,2701,2705,2709,2713,2717,2722,2726],{"type":39,"tag":91,"props":2673,"children":2674},{"style":98},[2675],{"type":44,"value":8},{"type":39,"tag":91,"props":2677,"children":2678},{"style":104},[2679],{"type":44,"value":2680}," blobs:set",{"type":39,"tag":91,"props":2682,"children":2683},{"style":237},[2684],{"type":44,"value":2606},{"type":39,"tag":91,"props":2686,"children":2687},{"style":104},[2688],{"type":44,"value":2611},{"type":39,"tag":91,"props":2690,"children":2691},{"style":243},[2692],{"type":44,"value":2616},{"type":39,"tag":91,"props":2694,"children":2695},{"style":237},[2696],{"type":44,"value":2650},{"type":39,"tag":91,"props":2698,"children":2699},{"style":237},[2700],{"type":44,"value":2606},{"type":39,"tag":91,"props":2702,"children":2703},{"style":104},[2704],{"type":44,"value":2659},{"type":39,"tag":91,"props":2706,"children":2707},{"style":243},[2708],{"type":44,"value":2664},{"type":39,"tag":91,"props":2710,"children":2711},{"style":237},[2712],{"type":44,"value":2650},{"type":39,"tag":91,"props":2714,"children":2715},{"style":237},[2716],{"type":44,"value":2606},{"type":39,"tag":91,"props":2718,"children":2719},{"style":104},[2720],{"type":44,"value":2721},"valu",{"type":39,"tag":91,"props":2723,"children":2724},{"style":243},[2725],{"type":44,"value":2616},{"type":39,"tag":91,"props":2727,"children":2728},{"style":237},[2729],{"type":44,"value":2621},{"type":39,"tag":91,"props":2731,"children":2732},{"class":93,"line":361},[2733,2737,2742,2746,2750,2754,2758,2762,2766,2770],{"type":39,"tag":91,"props":2734,"children":2735},{"style":98},[2736],{"type":44,"value":8},{"type":39,"tag":91,"props":2738,"children":2739},{"style":104},[2740],{"type":44,"value":2741}," blobs:delete",{"type":39,"tag":91,"props":2743,"children":2744},{"style":237},[2745],{"type":44,"value":2606},{"type":39,"tag":91,"props":2747,"children":2748},{"style":104},[2749],{"type":44,"value":2611},{"type":39,"tag":91,"props":2751,"children":2752},{"style":243},[2753],{"type":44,"value":2616},{"type":39,"tag":91,"props":2755,"children":2756},{"style":237},[2757],{"type":44,"value":2650},{"type":39,"tag":91,"props":2759,"children":2760},{"style":237},[2761],{"type":44,"value":2606},{"type":39,"tag":91,"props":2763,"children":2764},{"style":104},[2765],{"type":44,"value":2659},{"type":39,"tag":91,"props":2767,"children":2768},{"style":243},[2769],{"type":44,"value":2664},{"type":39,"tag":91,"props":2771,"children":2772},{"style":237},[2773],{"type":44,"value":2621},{"type":39,"tag":47,"props":2775,"children":2776},{},[2777,2779,2785],{"type":44,"value":2778},"These act on the linked site's store, so link the project first (",{"type":39,"tag":71,"props":2780,"children":2782},{"className":2781},[],[2783],{"type":44,"value":2784},"netlify link",{"type":44,"value":2786},"). Reach for these documented subcommands for manual inspection or repair rather than the raw API.",{"type":39,"tag":114,"props":2788,"children":2790},{"id":2789},"uploading-blobs-at-build-time",[2791],{"type":44,"value":2792},"Uploading blobs at build time",{"type":39,"tag":47,"props":2794,"children":2795},{},[2796,2798,2804,2806,2811,2813,2818,2820,2826,2828,2834,2836,2842],{"type":44,"value":2797},"You don't have to write blobs from runtime code — you can seed a store during the build by writing files into a special directory. Files placed in ",{"type":39,"tag":71,"props":2799,"children":2801},{"className":2800},[],[2802],{"type":44,"value":2803},".netlify\u002Fblobs\u002Fdeploy\u002F",{"type":44,"value":2805}," during the build are uploaded to a ",{"type":39,"tag":53,"props":2807,"children":2808},{},[2809],{"type":44,"value":2810},"deploy-scoped",{"type":44,"value":2812}," store and are then readable at runtime via ",{"type":39,"tag":71,"props":2814,"children":2816},{"className":2815},[],[2817],{"type":44,"value":180},{"type":44,"value":2819},". The path under that directory becomes the blob key (so ",{"type":39,"tag":71,"props":2821,"children":2823},{"className":2822},[],[2824],{"type":44,"value":2825},".netlify\u002Fblobs\u002Fdeploy\u002Fproducts\u002F1.json",{"type":44,"value":2827}," is stored under the key ",{"type":39,"tag":71,"props":2829,"children":2831},{"className":2830},[],[2832],{"type":44,"value":2833},"products\u002F1.json",{"type":44,"value":2835},"). This avoids a runtime function looping over ",{"type":39,"tag":71,"props":2837,"children":2839},{"className":2838},[],[2840],{"type":44,"value":2841},"store.set",{"type":44,"value":2843}," on a cold start.",{"type":39,"tag":47,"props":2845,"children":2846},{},[2847,2849,2855,2857,2863,2865,2871,2873,2879,2881,2886,2888,2893],{"type":44,"value":2848},"To attach metadata to a build-time blob, add a JSON sidecar whose name is the blob's filename prefixed with ",{"type":39,"tag":71,"props":2850,"children":2852},{"className":2851},[],[2853],{"type":44,"value":2854},"$",{"type":44,"value":2856}," and suffixed with ",{"type":39,"tag":71,"props":2858,"children":2860},{"className":2859},[],[2861],{"type":44,"value":2862},".json",{"type":44,"value":2864}," — metadata for ",{"type":39,"tag":71,"props":2866,"children":2868},{"className":2867},[],[2869],{"type":44,"value":2870},"logo.png",{"type":44,"value":2872}," goes in ",{"type":39,"tag":71,"props":2874,"children":2876},{"className":2875},[],[2877],{"type":44,"value":2878},"$logo.png.json",{"type":44,"value":2880},". Read these blobs back with ",{"type":39,"tag":71,"props":2882,"children":2884},{"className":2883},[],[2885],{"type":44,"value":180},{"type":44,"value":2887},", not ",{"type":39,"tag":71,"props":2889,"children":2891},{"className":2890},[],[2892],{"type":44,"value":172},{"type":44,"value":2894},": they live in the deploy-scoped store and are replaced when the deploy is replaced.",{"type":39,"tag":114,"props":2896,"children":2898},{"id":2897},"when-a-store-operation-fails",[2899],{"type":44,"value":2900},"When a store operation fails",{"type":39,"tag":47,"props":2902,"children":2903},{},[2904,2906,2911,2912,2917,2919,2924,2926,2931,2933,2939],{"type":44,"value":2905},"If a ",{"type":39,"tag":71,"props":2907,"children":2909},{"className":2908},[],[2910],{"type":44,"value":954},{"type":44,"value":1975},{"type":39,"tag":71,"props":2913,"children":2915},{"className":2914},[],[2916],{"type":44,"value":524},{"type":44,"value":2918}," call throws in a deployed function, don't guess at a fix or route around it — the exact error is in the ",{"type":39,"tag":53,"props":2920,"children":2921},{},[2922],{"type":44,"value":2923},"function logs",{"type":44,"value":2925},", and it almost always names the cause. Read it first. Common causes: the store isn't reachable from the calling context, a missing or mismatched store ",{"type":39,"tag":71,"props":2927,"children":2929},{"className":2928},[],[2930],{"type":44,"value":2106},{"type":44,"value":2932},", or a read-after-write timing gap (an immediate read of a just-written key — use ",{"type":39,"tag":71,"props":2934,"children":2936},{"className":2935},[],[2937],{"type":44,"value":2938},"consistency: \"strong\"",{"type":44,"value":2940}," when you need read-your-writes).",{"type":39,"tag":47,"props":2942,"children":2943},{},[2944,2946,2952],{"type":44,"value":2945},"The store exposes only the documented methods above; there is no lower-level REST endpoint to fall back on. If the logs don't resolve it, report the exact error plus the affected site\u002Fdeploy to the user and stop. Reaching around a failing store — direct ",{"type":39,"tag":71,"props":2947,"children":2949},{"className":2948},[],[2950],{"type":44,"value":2951},"https:\u002F\u002Fapi.netlify.com\u002F...",{"type":44,"value":2953}," calls, reading auth tokens off disk, or inventing endpoints — can't work (those aren't supported surfaces) and risks corrupting or losing the very data you're trying to save.",{"type":39,"tag":2955,"props":2956,"children":2957},"style",{},[2958],{"type":44,"value":2959},"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 .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);}",{"items":2961,"total":1461},[2962,2979,2996,3011,3018,3035,3047],{"slug":2963,"name":2963,"fn":2964,"description":2965,"org":2966,"tags":2967,"stars":23,"repoUrl":24,"updatedAt":2978},"netlify-access-control","manage Netlify site access control","Use when the task involves controlling who can reach a Netlify site, or telling Netlify Identity apart from Secure Access. Trigger whenever the user wants to lock a site or deploy to their company\u002Fteam, restrict access to employees only, build an internal or employees-only app, set up password protection, SSO, or SAML, asks \"who can access my site\", or is confused about Netlify Identity vs Secure Access vs team login vs OAuth providers. Routes the request to the right layer — app-level Identity, site-visitor Password Protection, the Auth0 extension, or Team\u002FOrg SAML SSO — and explains the two-layer (perimeter + in-app identity) pattern and its double-login tradeoff. For building the app-level auth itself, use the netlify-identity skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2968,2971,2972,2975],{"name":2969,"slug":2970,"type":15},"Access Control","access-control",{"name":9,"slug":8,"type":15},{"name":2973,"slug":2974,"type":15},"Permissions","permissions",{"name":2976,"slug":2977,"type":15},"Security","security","2026-07-14T05:40:29.082149",{"slug":2980,"name":2980,"fn":2981,"description":2982,"org":2983,"tags":2984,"stars":23,"repoUrl":24,"updatedAt":2995},"netlify-agent-runner","run AI agent tasks on Netlify","Run AI agent tasks remotely on Netlify using Claude, Codex, or Gemini. Use when the user wants to run an AI agent on their site, get a second opinion from another model, or delegate development tasks to run remotely against their repo.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2985,2988,2991,2994],{"name":2986,"slug":2987,"type":15},"Agents","agents",{"name":2989,"slug":2990,"type":15},"Automation","automation",{"name":2992,"slug":2993,"type":15},"LLM","llm",{"name":9,"slug":8,"type":15},"2026-07-17T05:30:19.462913",{"slug":2997,"name":2997,"fn":2998,"description":2999,"org":3000,"tags":3001,"stars":23,"repoUrl":24,"updatedAt":3010},"netlify-ai-gateway","route AI requests via Netlify AI Gateway","Reference for Netlify AI Gateway — the managed proxy that routes calls to OpenAI, Anthropic, and Google Gemini SDKs without provider API keys. Use this skill any time the user wants to add AI on a Netlify site (chat, completion, reasoning, image generation, image-to-image edit\u002Fstylize), choose or change a model, wire up the OpenAI \u002F Anthropic \u002F @google\u002Fgenai SDK, decide which provider to use for an image-gen feature (it's Gemini-only on the gateway), or debug \"model not found\" \u002F \"API key missing\" against the gateway. Required reading before pinning a model — the gateway exposes a curated subset, not every provider model.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3002,3005,3008,3009],{"name":3003,"slug":3004,"type":15},"AI Infrastructure","ai-infrastructure",{"name":3006,"slug":3007,"type":15},"API Development","api-development",{"name":2992,"slug":2993,"type":15},{"name":9,"slug":8,"type":15},"2026-07-17T05:30:13.14555",{"slug":4,"name":4,"fn":5,"description":6,"org":3012,"tags":3013,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3014,3015,3016,3017],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"slug":3019,"name":3019,"fn":3020,"description":3021,"org":3022,"tags":3023,"stars":23,"repoUrl":24,"updatedAt":3034},"netlify-caching","configure CDN caching on Netlify","Guide for controlling caching on Netlify's CDN. Use when configuring cache headers, setting up stale-while-revalidate, implementing on-demand cache purge, or understanding Netlify's CDN caching behavior. Covers Cache-Control, Netlify-CDN-Cache-Control, cache tags, durable cache, and framework-specific caching patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3024,3027,3030,3031],{"name":3025,"slug":3026,"type":15},"Caching","caching",{"name":3028,"slug":3029,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":3032,"slug":3033,"type":15},"Performance","performance","2026-07-14T05:40:20.066717",{"slug":3036,"name":3036,"fn":3037,"description":3038,"org":3039,"tags":3040,"stars":23,"repoUrl":24,"updatedAt":3046},"netlify-config","configure Netlify site settings","Reference for netlify.toml configuration and site environment variables. Use when configuring build settings, redirects, rewrites, headers, deploy contexts, the `[dev]` block that controls `netlify dev` (command, port, targetPort, framework), or any site-level configuration — and when managing environment variables or secrets with the Netlify CLI, including scoping values to specific deploy contexts. Covers the complete netlify.toml syntax including redirects with splats\u002Fconditions, headers, deploy contexts, functions config, edge functions config, and the `[dev]` block (including when `framework` must be `\"#custom\"` — required when both a custom `command` and `targetPort` are set).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3041,3044,3045],{"name":3042,"slug":3043,"type":15},"Configuration","configuration",{"name":3028,"slug":3029,"type":15},{"name":9,"slug":8,"type":15},"2026-07-17T05:30:21.284801",{"slug":3048,"name":3048,"fn":3049,"description":3050,"org":3051,"tags":3052,"stars":23,"repoUrl":24,"updatedAt":3061},"netlify-database","provision and manage Netlify Database","Guide for using Netlify Database — the GA managed Postgres product built into Netlify. Use when a project needs any kind of dynamic, structured, or relational data. Covers provisioning via @netlify\u002Fdatabase, Drizzle ORM (@beta) setup, migrations, preview branching, and safe production data handling. Blobs is only for file\u002Fasset storage — any dynamic data belongs in the database.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3053,3054,3057,3058],{"name":13,"slug":14,"type":15},{"name":3055,"slug":3056,"type":15},"Database","database",{"name":9,"slug":8,"type":15},{"name":3059,"slug":3060,"type":15},"PostgreSQL","postgresql","2026-07-20T05:58:58.934045",{"items":3063,"total":3182},[3064,3079,3091,3098,3105,3112,3119,3126,3132,3139,3152,3167],{"slug":3065,"name":3065,"fn":3066,"description":3067,"org":3068,"tags":3069,"stars":3076,"repoUrl":3077,"updatedAt":3078},"configure-axis","configure AXIS agent evaluation scenarios","Author AXIS (Agent Experience Index Score) scenarios and axis.config.json for a project. Use when the user asks to set up AXIS, add a scenario, write or edit axis.config.json, or evaluate an AI agent with AXIS.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3070,3071,3072,3075],{"name":2986,"slug":2987,"type":15},{"name":3042,"slug":3043,"type":15},{"name":3073,"slug":3074,"type":15},"Evals","evals",{"name":9,"slug":8,"type":15},32,"https:\u002F\u002Fgithub.com\u002Fnetlify\u002Faxis","2026-07-20T05:59:47.468757",{"slug":3080,"name":3080,"fn":3081,"description":3082,"org":3083,"tags":3084,"stars":3076,"repoUrl":3077,"updatedAt":3090},"using-axis","run and interpret AXIS reports","Run AXIS, read its reports, navigate its project layout, and interpret scores. Use when the user asks to run AXIS, invoke the CLI, compare runs, explain a score, find a regression, manage baselines, or understand where AXIS writes its files.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3085,3088,3089],{"name":3086,"slug":3087,"type":15},"CLI","cli",{"name":3073,"slug":3074,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:40:13.443461",{"slug":2963,"name":2963,"fn":2964,"description":2965,"org":3092,"tags":3093,"stars":23,"repoUrl":24,"updatedAt":2978},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3094,3095,3096,3097],{"name":2969,"slug":2970,"type":15},{"name":9,"slug":8,"type":15},{"name":2973,"slug":2974,"type":15},{"name":2976,"slug":2977,"type":15},{"slug":2980,"name":2980,"fn":2981,"description":2982,"org":3099,"tags":3100,"stars":23,"repoUrl":24,"updatedAt":2995},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3101,3102,3103,3104],{"name":2986,"slug":2987,"type":15},{"name":2989,"slug":2990,"type":15},{"name":2992,"slug":2993,"type":15},{"name":9,"slug":8,"type":15},{"slug":2997,"name":2997,"fn":2998,"description":2999,"org":3106,"tags":3107,"stars":23,"repoUrl":24,"updatedAt":3010},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3108,3109,3110,3111],{"name":3003,"slug":3004,"type":15},{"name":3006,"slug":3007,"type":15},{"name":2992,"slug":2993,"type":15},{"name":9,"slug":8,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":3113,"tags":3114,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3115,3116,3117,3118],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"slug":3019,"name":3019,"fn":3020,"description":3021,"org":3120,"tags":3121,"stars":23,"repoUrl":24,"updatedAt":3034},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3122,3123,3124,3125],{"name":3025,"slug":3026,"type":15},{"name":3028,"slug":3029,"type":15},{"name":9,"slug":8,"type":15},{"name":3032,"slug":3033,"type":15},{"slug":3036,"name":3036,"fn":3037,"description":3038,"org":3127,"tags":3128,"stars":23,"repoUrl":24,"updatedAt":3046},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3129,3130,3131],{"name":3042,"slug":3043,"type":15},{"name":3028,"slug":3029,"type":15},{"name":9,"slug":8,"type":15},{"slug":3048,"name":3048,"fn":3049,"description":3050,"org":3133,"tags":3134,"stars":23,"repoUrl":24,"updatedAt":3061},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3135,3136,3137,3138],{"name":13,"slug":14,"type":15},{"name":3055,"slug":3056,"type":15},{"name":9,"slug":8,"type":15},{"name":3059,"slug":3060,"type":15},{"slug":3140,"name":3140,"fn":3141,"description":3142,"org":3143,"tags":3144,"stars":23,"repoUrl":24,"updatedAt":3151},"netlify-deploy","deploy and host projects on Netlify","Deploy, host, and publish web projects on Netlify with the Netlify CLI. Use when the user wants to deploy a site or repository to Netlify, link a local project to a Netlify site, ship a production or preview\u002Fdraft deploy, set up Git-based continuous deployment, run a manual or local deploy, configure CI deploys, or troubleshoot a failed or misconfigured deploy. Also use to view or tail a deployed site's runtime logs — function and edge-function output, deploy logs — via `netlify logs` when debugging what a live site is doing (recent errors, recent activity, streaming output).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3145,3146,3147,3148],{"name":3086,"slug":3087,"type":15},{"name":3028,"slug":3029,"type":15},{"name":9,"slug":8,"type":15},{"name":3149,"slug":3150,"type":15},"Web Development","web-development","2026-07-17T05:30:14.218977",{"slug":3153,"name":3153,"fn":3154,"description":3155,"org":3156,"tags":3157,"stars":23,"repoUrl":24,"updatedAt":3166},"netlify-edge-functions","write Netlify Edge Functions","Guide for writing Netlify Edge Functions. Use when building middleware, geolocation-based logic, request\u002Fresponse manipulation, authentication checks, A\u002FB testing, or any low-latency edge compute. Covers Deno runtime, context.next() middleware pattern, geolocation, and when to choose edge vs serverless.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3158,3161,3164,3165],{"name":3159,"slug":3160,"type":15},"Edge Functions","edge-functions",{"name":3162,"slug":3163,"type":15},"Middleware","middleware",{"name":9,"slug":8,"type":15},{"name":3032,"slug":3033,"type":15},"2026-07-14T05:40:34.147865",{"slug":3168,"name":3168,"fn":3169,"description":3170,"org":3171,"tags":3172,"stars":23,"repoUrl":24,"updatedAt":3181},"netlify-forms","handle HTML forms with Netlify","Guide for using Netlify Forms for HTML form handling. Use when adding contact forms, feedback forms, file upload forms, or any form that should be collected by Netlify. Covers the data-netlify attribute, spam filtering, AJAX submissions, file uploads, notifications, and the submissions API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3173,3176,3179,3180],{"name":3174,"slug":3175,"type":15},"Forms","forms",{"name":3177,"slug":3178,"type":15},"HTML","html",{"name":9,"slug":8,"type":15},{"name":3149,"slug":3150,"type":15},"2026-07-14T05:40:16.075367",17]