[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-encore-encore-bucket":3,"mdc-381fzz-key":40,"related-repo-encore-encore-bucket":1522,"related-org-encore-encore-bucket":1616},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":27,"repoUrl":28,"updatedAt":29,"license":30,"forks":31,"topics":32,"repo":35,"sourceUrl":38,"mdContent":39},"encore-bucket","store files in Encore.ts buckets","Store unstructured files in Encore.ts using `Bucket` from `encore.dev\u002Fstorage\u002Fobjects` — uploads, images, documents, blobs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"encore","Encore","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fencore.png","encoredev",[13,17,20,23,24],{"name":14,"slug":15,"type":16},"Backend","backend","tag",{"name":18,"slug":19,"type":16},"File Storage","file-storage",{"name":21,"slug":22,"type":16},"TypeScript","typescript",{"name":9,"slug":8,"type":16},{"name":25,"slug":26,"type":16},"File Uploads","file-uploads",26,"https:\u002F\u002Fgithub.com\u002Fencoredev\u002Fskills","2026-05-16T05:59:52.813772",null,5,[33,34],"claude-code","skills",{"repoUrl":28,"stars":27,"forks":31,"topics":36,"description":37},[33,34],"Agent Skills for development with Encore.","https:\u002F\u002Fgithub.com\u002Fencoredev\u002Fskills\u002Ftree\u002FHEAD\u002Fencore\u002Fbucket","---\nname: encore-bucket\ndescription: Store unstructured files in Encore.ts using `Bucket` from `encore.dev\u002Fstorage\u002Fobjects` — uploads, images, documents, blobs.\nwhen_to_use: >-\n  User wants to upload, download, list, or delete files — profile pictures, avatars, document uploads, image storage, media assets, generated reports, blob data. Covers public vs private buckets, signed upload\u002Fdownload URLs, bucket references with permission types (Uploader, Downloader, Lister, Attrser, Remover), and operations like `upload()`, `download()`, `list()`, `signedUploadUrl()`. Trigger phrases: \"object storage\", \"bucket\", \"S3\", \"GCS\", \"blob\", \"user uploads\", \"profile picture\", \"image upload\", \"store a file\", \"file storage\".\n---\n\n# Encore Object Storage\n\n## Instructions\n\nA `Bucket` is a logical store for files. Encore provisions the underlying object storage (S3 on AWS, GCS on GCP, in-memory locally). Declare buckets at package level.\n\n```typescript\nimport { Bucket } from \"encore.dev\u002Fstorage\u002Fobjects\";\n\n\u002F\u002F Private bucket (default)\nexport const uploads = new Bucket(\"user-uploads\", {\n  versioned: false,  \u002F\u002F Set to true to keep multiple versions\n});\n\n\u002F\u002F Public bucket — files accessible via public URL\nexport const publicAssets = new Bucket(\"public-assets\", {\n  public: true,\n  versioned: false,\n});\n```\n\n## Operations\n\n```typescript\n\u002F\u002F Upload\nconst attrs = await uploads.upload(\"path\u002Fto\u002Ffile.jpg\", buffer, {\n  contentType: \"image\u002Fjpeg\",\n});\n\n\u002F\u002F Download\nconst data = await uploads.download(\"path\u002Fto\u002Ffile.jpg\");\n\n\u002F\u002F Existence check\nconst exists = await uploads.exists(\"path\u002Fto\u002Ffile.jpg\");\n\n\u002F\u002F Attributes (size, content type, ETag)\nconst meta = await uploads.attrs(\"path\u002Fto\u002Ffile.jpg\");\n\n\u002F\u002F Delete\nawait uploads.remove(\"path\u002Fto\u002Ffile.jpg\");\n\n\u002F\u002F List\nfor await (const entry of uploads.list({})) {\n  console.log(entry.key, entry.size);\n}\n\n\u002F\u002F Public URL (only for public buckets)\nconst url = publicAssets.publicUrl(\"image.jpg\");\n```\n\n## Signed URLs\n\nGenerate temporary URLs so clients can upload\u002Fdownload directly without going through your service:\n\n```typescript\nconst uploadUrl = await uploads.signedUploadUrl(\"user-uploads\u002Favatar.jpg\", { ttl: 7200 });\nconst downloadUrl = await uploads.signedDownloadUrl(\"documents\u002Freport.pdf\", { ttl: 7200 });\n```\n\n## Bucket References\n\nPass bucket access to other code with a specific permission set:\n\n```typescript\nimport { Uploader, Downloader } from \"encore.dev\u002Fstorage\u002Fobjects\";\n\nconst uploaderRef = uploads.ref\u003CUploader>();\nconst downloaderRef = uploads.ref\u003CDownloader>();\n\n\u002F\u002F Permission types: Downloader, Uploader, Lister, Attrser, Remover,\n\u002F\u002F SignedDownloader, SignedUploader, ReadWriter\n```\n\n## Errors\n\n- `ObjectNotFound` — object doesn't exist\n- `PreconditionFailed` — upload preconditions not met (e.g. `setIfNotExists`)\n- `ObjectsError` — base error type\n\n## Guidelines\n\n- Declare buckets at package level.\n- Default to private buckets; opt into `public: true` only for assets meant for unauthenticated download.\n- Use signed URLs for browser uploads\u002Fdownloads instead of streaming through your service.\n- Use bucket references when passing access to helpers — they encode the permission contract in the type system.\n",{"data":41,"body":43},{"name":4,"description":6,"when_to_use":42},"User wants to upload, download, list, or delete files — profile pictures, avatars, document uploads, image storage, media assets, generated reports, blob data. Covers public vs private buckets, signed upload\u002Fdownload URLs, bucket references with permission types (Uploader, Downloader, Lister, Attrser, Remover), and operations like `upload()`, `download()`, `list()`, `signedUploadUrl()`. Trigger phrases: \"object storage\", \"bucket\", \"S3\", \"GCS\", \"blob\", \"user uploads\", \"profile picture\", \"image upload\", \"store a file\", \"file storage\".",{"type":44,"children":45},"root",[46,55,62,77,402,408,1043,1049,1054,1228,1234,1239,1428,1434,1479,1485,1516],{"type":47,"tag":48,"props":49,"children":51},"element","h1",{"id":50},"encore-object-storage",[52],{"type":53,"value":54},"text","Encore Object Storage",{"type":47,"tag":56,"props":57,"children":59},"h2",{"id":58},"instructions",[60],{"type":53,"value":61},"Instructions",{"type":47,"tag":63,"props":64,"children":65},"p",{},[66,68,75],{"type":53,"value":67},"A ",{"type":47,"tag":69,"props":70,"children":72},"code",{"className":71},[],[73],{"type":53,"value":74},"Bucket",{"type":53,"value":76}," is a logical store for files. Encore provisions the underlying object storage (S3 on AWS, GCS on GCP, in-memory locally). Declare buckets at package level.",{"type":47,"tag":78,"props":79,"children":83},"pre",{"className":80,"code":81,"language":22,"meta":82,"style":82},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Bucket } from \"encore.dev\u002Fstorage\u002Fobjects\";\n\n\u002F\u002F Private bucket (default)\nexport const uploads = new Bucket(\"user-uploads\", {\n  versioned: false,  \u002F\u002F Set to true to keep multiple versions\n});\n\n\u002F\u002F Public bucket — files accessible via public URL\nexport const publicAssets = new Bucket(\"public-assets\", {\n  public: true,\n  versioned: false,\n});\n","",[84],{"type":47,"tag":69,"props":85,"children":86},{"__ignoreMap":82},[87,142,152,162,225,254,272,280,289,343,366,386],{"type":47,"tag":88,"props":89,"children":92},"span",{"class":90,"line":91},"line",1,[93,99,105,111,116,121,126,132,137],{"type":47,"tag":88,"props":94,"children":96},{"style":95},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[97],{"type":53,"value":98},"import",{"type":47,"tag":88,"props":100,"children":102},{"style":101},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[103],{"type":53,"value":104}," {",{"type":47,"tag":88,"props":106,"children":108},{"style":107},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[109],{"type":53,"value":110}," Bucket",{"type":47,"tag":88,"props":112,"children":113},{"style":101},[114],{"type":53,"value":115}," }",{"type":47,"tag":88,"props":117,"children":118},{"style":95},[119],{"type":53,"value":120}," from",{"type":47,"tag":88,"props":122,"children":123},{"style":101},[124],{"type":53,"value":125}," \"",{"type":47,"tag":88,"props":127,"children":129},{"style":128},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[130],{"type":53,"value":131},"encore.dev\u002Fstorage\u002Fobjects",{"type":47,"tag":88,"props":133,"children":134},{"style":101},[135],{"type":53,"value":136},"\"",{"type":47,"tag":88,"props":138,"children":139},{"style":101},[140],{"type":53,"value":141},";\n",{"type":47,"tag":88,"props":143,"children":145},{"class":90,"line":144},2,[146],{"type":47,"tag":88,"props":147,"children":149},{"emptyLinePlaceholder":148},true,[150],{"type":53,"value":151},"\n",{"type":47,"tag":88,"props":153,"children":155},{"class":90,"line":154},3,[156],{"type":47,"tag":88,"props":157,"children":159},{"style":158},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[160],{"type":53,"value":161},"\u002F\u002F Private bucket (default)\n",{"type":47,"tag":88,"props":163,"children":165},{"class":90,"line":164},4,[166,171,177,182,187,192,197,202,206,211,215,220],{"type":47,"tag":88,"props":167,"children":168},{"style":95},[169],{"type":53,"value":170},"export",{"type":47,"tag":88,"props":172,"children":174},{"style":173},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[175],{"type":53,"value":176}," const",{"type":47,"tag":88,"props":178,"children":179},{"style":107},[180],{"type":53,"value":181}," uploads ",{"type":47,"tag":88,"props":183,"children":184},{"style":101},[185],{"type":53,"value":186},"=",{"type":47,"tag":88,"props":188,"children":189},{"style":101},[190],{"type":53,"value":191}," new",{"type":47,"tag":88,"props":193,"children":195},{"style":194},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[196],{"type":53,"value":110},{"type":47,"tag":88,"props":198,"children":199},{"style":107},[200],{"type":53,"value":201},"(",{"type":47,"tag":88,"props":203,"children":204},{"style":101},[205],{"type":53,"value":136},{"type":47,"tag":88,"props":207,"children":208},{"style":128},[209],{"type":53,"value":210},"user-uploads",{"type":47,"tag":88,"props":212,"children":213},{"style":101},[214],{"type":53,"value":136},{"type":47,"tag":88,"props":216,"children":217},{"style":101},[218],{"type":53,"value":219},",",{"type":47,"tag":88,"props":221,"children":222},{"style":101},[223],{"type":53,"value":224}," {\n",{"type":47,"tag":88,"props":226,"children":227},{"class":90,"line":31},[228,234,239,245,249],{"type":47,"tag":88,"props":229,"children":231},{"style":230},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[232],{"type":53,"value":233},"  versioned",{"type":47,"tag":88,"props":235,"children":236},{"style":101},[237],{"type":53,"value":238},":",{"type":47,"tag":88,"props":240,"children":242},{"style":241},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[243],{"type":53,"value":244}," false",{"type":47,"tag":88,"props":246,"children":247},{"style":101},[248],{"type":53,"value":219},{"type":47,"tag":88,"props":250,"children":251},{"style":158},[252],{"type":53,"value":253},"  \u002F\u002F Set to true to keep multiple versions\n",{"type":47,"tag":88,"props":255,"children":257},{"class":90,"line":256},6,[258,263,268],{"type":47,"tag":88,"props":259,"children":260},{"style":101},[261],{"type":53,"value":262},"}",{"type":47,"tag":88,"props":264,"children":265},{"style":107},[266],{"type":53,"value":267},")",{"type":47,"tag":88,"props":269,"children":270},{"style":101},[271],{"type":53,"value":141},{"type":47,"tag":88,"props":273,"children":275},{"class":90,"line":274},7,[276],{"type":47,"tag":88,"props":277,"children":278},{"emptyLinePlaceholder":148},[279],{"type":53,"value":151},{"type":47,"tag":88,"props":281,"children":283},{"class":90,"line":282},8,[284],{"type":47,"tag":88,"props":285,"children":286},{"style":158},[287],{"type":53,"value":288},"\u002F\u002F Public bucket — files accessible via public URL\n",{"type":47,"tag":88,"props":290,"children":292},{"class":90,"line":291},9,[293,297,301,306,310,314,318,322,326,331,335,339],{"type":47,"tag":88,"props":294,"children":295},{"style":95},[296],{"type":53,"value":170},{"type":47,"tag":88,"props":298,"children":299},{"style":173},[300],{"type":53,"value":176},{"type":47,"tag":88,"props":302,"children":303},{"style":107},[304],{"type":53,"value":305}," publicAssets ",{"type":47,"tag":88,"props":307,"children":308},{"style":101},[309],{"type":53,"value":186},{"type":47,"tag":88,"props":311,"children":312},{"style":101},[313],{"type":53,"value":191},{"type":47,"tag":88,"props":315,"children":316},{"style":194},[317],{"type":53,"value":110},{"type":47,"tag":88,"props":319,"children":320},{"style":107},[321],{"type":53,"value":201},{"type":47,"tag":88,"props":323,"children":324},{"style":101},[325],{"type":53,"value":136},{"type":47,"tag":88,"props":327,"children":328},{"style":128},[329],{"type":53,"value":330},"public-assets",{"type":47,"tag":88,"props":332,"children":333},{"style":101},[334],{"type":53,"value":136},{"type":47,"tag":88,"props":336,"children":337},{"style":101},[338],{"type":53,"value":219},{"type":47,"tag":88,"props":340,"children":341},{"style":101},[342],{"type":53,"value":224},{"type":47,"tag":88,"props":344,"children":346},{"class":90,"line":345},10,[347,352,356,361],{"type":47,"tag":88,"props":348,"children":349},{"style":230},[350],{"type":53,"value":351},"  public",{"type":47,"tag":88,"props":353,"children":354},{"style":101},[355],{"type":53,"value":238},{"type":47,"tag":88,"props":357,"children":358},{"style":241},[359],{"type":53,"value":360}," true",{"type":47,"tag":88,"props":362,"children":363},{"style":101},[364],{"type":53,"value":365},",\n",{"type":47,"tag":88,"props":367,"children":369},{"class":90,"line":368},11,[370,374,378,382],{"type":47,"tag":88,"props":371,"children":372},{"style":230},[373],{"type":53,"value":233},{"type":47,"tag":88,"props":375,"children":376},{"style":101},[377],{"type":53,"value":238},{"type":47,"tag":88,"props":379,"children":380},{"style":241},[381],{"type":53,"value":244},{"type":47,"tag":88,"props":383,"children":384},{"style":101},[385],{"type":53,"value":365},{"type":47,"tag":88,"props":387,"children":389},{"class":90,"line":388},12,[390,394,398],{"type":47,"tag":88,"props":391,"children":392},{"style":101},[393],{"type":53,"value":262},{"type":47,"tag":88,"props":395,"children":396},{"style":107},[397],{"type":53,"value":267},{"type":47,"tag":88,"props":399,"children":400},{"style":101},[401],{"type":53,"value":141},{"type":47,"tag":56,"props":403,"children":405},{"id":404},"operations",[406],{"type":53,"value":407},"Operations",{"type":47,"tag":78,"props":409,"children":411},{"className":80,"code":410,"language":22,"meta":82,"style":82},"\u002F\u002F Upload\nconst attrs = await uploads.upload(\"path\u002Fto\u002Ffile.jpg\", buffer, {\n  contentType: \"image\u002Fjpeg\",\n});\n\n\u002F\u002F Download\nconst data = await uploads.download(\"path\u002Fto\u002Ffile.jpg\");\n\n\u002F\u002F Existence check\nconst exists = await uploads.exists(\"path\u002Fto\u002Ffile.jpg\");\n\n\u002F\u002F Attributes (size, content type, ETag)\nconst meta = await uploads.attrs(\"path\u002Fto\u002Ffile.jpg\");\n\n\u002F\u002F Delete\nawait uploads.remove(\"path\u002Fto\u002Ffile.jpg\");\n\n\u002F\u002F List\nfor await (const entry of uploads.list({})) {\n  console.log(entry.key, entry.size);\n}\n\n\u002F\u002F Public URL (only for public buckets)\nconst url = publicAssets.publicUrl(\"image.jpg\");\n",[412],{"type":47,"tag":69,"props":413,"children":414},{"__ignoreMap":82},[415,423,494,523,538,545,553,610,617,625,682,689,697,755,763,772,818,826,835,899,961,970,978,987],{"type":47,"tag":88,"props":416,"children":417},{"class":90,"line":91},[418],{"type":47,"tag":88,"props":419,"children":420},{"style":158},[421],{"type":53,"value":422},"\u002F\u002F Upload\n",{"type":47,"tag":88,"props":424,"children":425},{"class":90,"line":144},[426,431,436,440,445,450,455,460,464,468,473,477,481,486,490],{"type":47,"tag":88,"props":427,"children":428},{"style":173},[429],{"type":53,"value":430},"const",{"type":47,"tag":88,"props":432,"children":433},{"style":107},[434],{"type":53,"value":435}," attrs ",{"type":47,"tag":88,"props":437,"children":438},{"style":101},[439],{"type":53,"value":186},{"type":47,"tag":88,"props":441,"children":442},{"style":95},[443],{"type":53,"value":444}," await",{"type":47,"tag":88,"props":446,"children":447},{"style":107},[448],{"type":53,"value":449}," uploads",{"type":47,"tag":88,"props":451,"children":452},{"style":101},[453],{"type":53,"value":454},".",{"type":47,"tag":88,"props":456,"children":457},{"style":194},[458],{"type":53,"value":459},"upload",{"type":47,"tag":88,"props":461,"children":462},{"style":107},[463],{"type":53,"value":201},{"type":47,"tag":88,"props":465,"children":466},{"style":101},[467],{"type":53,"value":136},{"type":47,"tag":88,"props":469,"children":470},{"style":128},[471],{"type":53,"value":472},"path\u002Fto\u002Ffile.jpg",{"type":47,"tag":88,"props":474,"children":475},{"style":101},[476],{"type":53,"value":136},{"type":47,"tag":88,"props":478,"children":479},{"style":101},[480],{"type":53,"value":219},{"type":47,"tag":88,"props":482,"children":483},{"style":107},[484],{"type":53,"value":485}," buffer",{"type":47,"tag":88,"props":487,"children":488},{"style":101},[489],{"type":53,"value":219},{"type":47,"tag":88,"props":491,"children":492},{"style":101},[493],{"type":53,"value":224},{"type":47,"tag":88,"props":495,"children":496},{"class":90,"line":154},[497,502,506,510,515,519],{"type":47,"tag":88,"props":498,"children":499},{"style":230},[500],{"type":53,"value":501},"  contentType",{"type":47,"tag":88,"props":503,"children":504},{"style":101},[505],{"type":53,"value":238},{"type":47,"tag":88,"props":507,"children":508},{"style":101},[509],{"type":53,"value":125},{"type":47,"tag":88,"props":511,"children":512},{"style":128},[513],{"type":53,"value":514},"image\u002Fjpeg",{"type":47,"tag":88,"props":516,"children":517},{"style":101},[518],{"type":53,"value":136},{"type":47,"tag":88,"props":520,"children":521},{"style":101},[522],{"type":53,"value":365},{"type":47,"tag":88,"props":524,"children":525},{"class":90,"line":164},[526,530,534],{"type":47,"tag":88,"props":527,"children":528},{"style":101},[529],{"type":53,"value":262},{"type":47,"tag":88,"props":531,"children":532},{"style":107},[533],{"type":53,"value":267},{"type":47,"tag":88,"props":535,"children":536},{"style":101},[537],{"type":53,"value":141},{"type":47,"tag":88,"props":539,"children":540},{"class":90,"line":31},[541],{"type":47,"tag":88,"props":542,"children":543},{"emptyLinePlaceholder":148},[544],{"type":53,"value":151},{"type":47,"tag":88,"props":546,"children":547},{"class":90,"line":256},[548],{"type":47,"tag":88,"props":549,"children":550},{"style":158},[551],{"type":53,"value":552},"\u002F\u002F Download\n",{"type":47,"tag":88,"props":554,"children":555},{"class":90,"line":274},[556,560,565,569,573,577,581,586,590,594,598,602,606],{"type":47,"tag":88,"props":557,"children":558},{"style":173},[559],{"type":53,"value":430},{"type":47,"tag":88,"props":561,"children":562},{"style":107},[563],{"type":53,"value":564}," data ",{"type":47,"tag":88,"props":566,"children":567},{"style":101},[568],{"type":53,"value":186},{"type":47,"tag":88,"props":570,"children":571},{"style":95},[572],{"type":53,"value":444},{"type":47,"tag":88,"props":574,"children":575},{"style":107},[576],{"type":53,"value":449},{"type":47,"tag":88,"props":578,"children":579},{"style":101},[580],{"type":53,"value":454},{"type":47,"tag":88,"props":582,"children":583},{"style":194},[584],{"type":53,"value":585},"download",{"type":47,"tag":88,"props":587,"children":588},{"style":107},[589],{"type":53,"value":201},{"type":47,"tag":88,"props":591,"children":592},{"style":101},[593],{"type":53,"value":136},{"type":47,"tag":88,"props":595,"children":596},{"style":128},[597],{"type":53,"value":472},{"type":47,"tag":88,"props":599,"children":600},{"style":101},[601],{"type":53,"value":136},{"type":47,"tag":88,"props":603,"children":604},{"style":107},[605],{"type":53,"value":267},{"type":47,"tag":88,"props":607,"children":608},{"style":101},[609],{"type":53,"value":141},{"type":47,"tag":88,"props":611,"children":612},{"class":90,"line":282},[613],{"type":47,"tag":88,"props":614,"children":615},{"emptyLinePlaceholder":148},[616],{"type":53,"value":151},{"type":47,"tag":88,"props":618,"children":619},{"class":90,"line":291},[620],{"type":47,"tag":88,"props":621,"children":622},{"style":158},[623],{"type":53,"value":624},"\u002F\u002F Existence check\n",{"type":47,"tag":88,"props":626,"children":627},{"class":90,"line":345},[628,632,637,641,645,649,653,658,662,666,670,674,678],{"type":47,"tag":88,"props":629,"children":630},{"style":173},[631],{"type":53,"value":430},{"type":47,"tag":88,"props":633,"children":634},{"style":107},[635],{"type":53,"value":636}," exists ",{"type":47,"tag":88,"props":638,"children":639},{"style":101},[640],{"type":53,"value":186},{"type":47,"tag":88,"props":642,"children":643},{"style":95},[644],{"type":53,"value":444},{"type":47,"tag":88,"props":646,"children":647},{"style":107},[648],{"type":53,"value":449},{"type":47,"tag":88,"props":650,"children":651},{"style":101},[652],{"type":53,"value":454},{"type":47,"tag":88,"props":654,"children":655},{"style":194},[656],{"type":53,"value":657},"exists",{"type":47,"tag":88,"props":659,"children":660},{"style":107},[661],{"type":53,"value":201},{"type":47,"tag":88,"props":663,"children":664},{"style":101},[665],{"type":53,"value":136},{"type":47,"tag":88,"props":667,"children":668},{"style":128},[669],{"type":53,"value":472},{"type":47,"tag":88,"props":671,"children":672},{"style":101},[673],{"type":53,"value":136},{"type":47,"tag":88,"props":675,"children":676},{"style":107},[677],{"type":53,"value":267},{"type":47,"tag":88,"props":679,"children":680},{"style":101},[681],{"type":53,"value":141},{"type":47,"tag":88,"props":683,"children":684},{"class":90,"line":368},[685],{"type":47,"tag":88,"props":686,"children":687},{"emptyLinePlaceholder":148},[688],{"type":53,"value":151},{"type":47,"tag":88,"props":690,"children":691},{"class":90,"line":388},[692],{"type":47,"tag":88,"props":693,"children":694},{"style":158},[695],{"type":53,"value":696},"\u002F\u002F Attributes (size, content type, ETag)\n",{"type":47,"tag":88,"props":698,"children":700},{"class":90,"line":699},13,[701,705,710,714,718,722,726,731,735,739,743,747,751],{"type":47,"tag":88,"props":702,"children":703},{"style":173},[704],{"type":53,"value":430},{"type":47,"tag":88,"props":706,"children":707},{"style":107},[708],{"type":53,"value":709}," meta ",{"type":47,"tag":88,"props":711,"children":712},{"style":101},[713],{"type":53,"value":186},{"type":47,"tag":88,"props":715,"children":716},{"style":95},[717],{"type":53,"value":444},{"type":47,"tag":88,"props":719,"children":720},{"style":107},[721],{"type":53,"value":449},{"type":47,"tag":88,"props":723,"children":724},{"style":101},[725],{"type":53,"value":454},{"type":47,"tag":88,"props":727,"children":728},{"style":194},[729],{"type":53,"value":730},"attrs",{"type":47,"tag":88,"props":732,"children":733},{"style":107},[734],{"type":53,"value":201},{"type":47,"tag":88,"props":736,"children":737},{"style":101},[738],{"type":53,"value":136},{"type":47,"tag":88,"props":740,"children":741},{"style":128},[742],{"type":53,"value":472},{"type":47,"tag":88,"props":744,"children":745},{"style":101},[746],{"type":53,"value":136},{"type":47,"tag":88,"props":748,"children":749},{"style":107},[750],{"type":53,"value":267},{"type":47,"tag":88,"props":752,"children":753},{"style":101},[754],{"type":53,"value":141},{"type":47,"tag":88,"props":756,"children":758},{"class":90,"line":757},14,[759],{"type":47,"tag":88,"props":760,"children":761},{"emptyLinePlaceholder":148},[762],{"type":53,"value":151},{"type":47,"tag":88,"props":764,"children":766},{"class":90,"line":765},15,[767],{"type":47,"tag":88,"props":768,"children":769},{"style":158},[770],{"type":53,"value":771},"\u002F\u002F Delete\n",{"type":47,"tag":88,"props":773,"children":775},{"class":90,"line":774},16,[776,781,785,789,794,798,802,806,810,814],{"type":47,"tag":88,"props":777,"children":778},{"style":95},[779],{"type":53,"value":780},"await",{"type":47,"tag":88,"props":782,"children":783},{"style":107},[784],{"type":53,"value":449},{"type":47,"tag":88,"props":786,"children":787},{"style":101},[788],{"type":53,"value":454},{"type":47,"tag":88,"props":790,"children":791},{"style":194},[792],{"type":53,"value":793},"remove",{"type":47,"tag":88,"props":795,"children":796},{"style":107},[797],{"type":53,"value":201},{"type":47,"tag":88,"props":799,"children":800},{"style":101},[801],{"type":53,"value":136},{"type":47,"tag":88,"props":803,"children":804},{"style":128},[805],{"type":53,"value":472},{"type":47,"tag":88,"props":807,"children":808},{"style":101},[809],{"type":53,"value":136},{"type":47,"tag":88,"props":811,"children":812},{"style":107},[813],{"type":53,"value":267},{"type":47,"tag":88,"props":815,"children":816},{"style":101},[817],{"type":53,"value":141},{"type":47,"tag":88,"props":819,"children":821},{"class":90,"line":820},17,[822],{"type":47,"tag":88,"props":823,"children":824},{"emptyLinePlaceholder":148},[825],{"type":53,"value":151},{"type":47,"tag":88,"props":827,"children":829},{"class":90,"line":828},18,[830],{"type":47,"tag":88,"props":831,"children":832},{"style":158},[833],{"type":53,"value":834},"\u002F\u002F List\n",{"type":47,"tag":88,"props":836,"children":838},{"class":90,"line":837},19,[839,844,848,853,857,862,867,871,875,880,884,889,894],{"type":47,"tag":88,"props":840,"children":841},{"style":95},[842],{"type":53,"value":843},"for",{"type":47,"tag":88,"props":845,"children":846},{"style":95},[847],{"type":53,"value":444},{"type":47,"tag":88,"props":849,"children":850},{"style":107},[851],{"type":53,"value":852}," (",{"type":47,"tag":88,"props":854,"children":855},{"style":173},[856],{"type":53,"value":430},{"type":47,"tag":88,"props":858,"children":859},{"style":107},[860],{"type":53,"value":861}," entry ",{"type":47,"tag":88,"props":863,"children":864},{"style":101},[865],{"type":53,"value":866},"of",{"type":47,"tag":88,"props":868,"children":869},{"style":107},[870],{"type":53,"value":449},{"type":47,"tag":88,"props":872,"children":873},{"style":101},[874],{"type":53,"value":454},{"type":47,"tag":88,"props":876,"children":877},{"style":194},[878],{"type":53,"value":879},"list",{"type":47,"tag":88,"props":881,"children":882},{"style":107},[883],{"type":53,"value":201},{"type":47,"tag":88,"props":885,"children":886},{"style":101},[887],{"type":53,"value":888},"{}",{"type":47,"tag":88,"props":890,"children":891},{"style":107},[892],{"type":53,"value":893},")) ",{"type":47,"tag":88,"props":895,"children":896},{"style":101},[897],{"type":53,"value":898},"{\n",{"type":47,"tag":88,"props":900,"children":902},{"class":90,"line":901},20,[903,908,912,917,921,926,930,935,939,944,948,953,957],{"type":47,"tag":88,"props":904,"children":905},{"style":107},[906],{"type":53,"value":907},"  console",{"type":47,"tag":88,"props":909,"children":910},{"style":101},[911],{"type":53,"value":454},{"type":47,"tag":88,"props":913,"children":914},{"style":194},[915],{"type":53,"value":916},"log",{"type":47,"tag":88,"props":918,"children":919},{"style":230},[920],{"type":53,"value":201},{"type":47,"tag":88,"props":922,"children":923},{"style":107},[924],{"type":53,"value":925},"entry",{"type":47,"tag":88,"props":927,"children":928},{"style":101},[929],{"type":53,"value":454},{"type":47,"tag":88,"props":931,"children":932},{"style":107},[933],{"type":53,"value":934},"key",{"type":47,"tag":88,"props":936,"children":937},{"style":101},[938],{"type":53,"value":219},{"type":47,"tag":88,"props":940,"children":941},{"style":107},[942],{"type":53,"value":943}," entry",{"type":47,"tag":88,"props":945,"children":946},{"style":101},[947],{"type":53,"value":454},{"type":47,"tag":88,"props":949,"children":950},{"style":107},[951],{"type":53,"value":952},"size",{"type":47,"tag":88,"props":954,"children":955},{"style":230},[956],{"type":53,"value":267},{"type":47,"tag":88,"props":958,"children":959},{"style":101},[960],{"type":53,"value":141},{"type":47,"tag":88,"props":962,"children":964},{"class":90,"line":963},21,[965],{"type":47,"tag":88,"props":966,"children":967},{"style":101},[968],{"type":53,"value":969},"}\n",{"type":47,"tag":88,"props":971,"children":973},{"class":90,"line":972},22,[974],{"type":47,"tag":88,"props":975,"children":976},{"emptyLinePlaceholder":148},[977],{"type":53,"value":151},{"type":47,"tag":88,"props":979,"children":981},{"class":90,"line":980},23,[982],{"type":47,"tag":88,"props":983,"children":984},{"style":158},[985],{"type":53,"value":986},"\u002F\u002F Public URL (only for public buckets)\n",{"type":47,"tag":88,"props":988,"children":990},{"class":90,"line":989},24,[991,995,1000,1004,1009,1013,1018,1022,1026,1031,1035,1039],{"type":47,"tag":88,"props":992,"children":993},{"style":173},[994],{"type":53,"value":430},{"type":47,"tag":88,"props":996,"children":997},{"style":107},[998],{"type":53,"value":999}," url ",{"type":47,"tag":88,"props":1001,"children":1002},{"style":101},[1003],{"type":53,"value":186},{"type":47,"tag":88,"props":1005,"children":1006},{"style":107},[1007],{"type":53,"value":1008}," publicAssets",{"type":47,"tag":88,"props":1010,"children":1011},{"style":101},[1012],{"type":53,"value":454},{"type":47,"tag":88,"props":1014,"children":1015},{"style":194},[1016],{"type":53,"value":1017},"publicUrl",{"type":47,"tag":88,"props":1019,"children":1020},{"style":107},[1021],{"type":53,"value":201},{"type":47,"tag":88,"props":1023,"children":1024},{"style":101},[1025],{"type":53,"value":136},{"type":47,"tag":88,"props":1027,"children":1028},{"style":128},[1029],{"type":53,"value":1030},"image.jpg",{"type":47,"tag":88,"props":1032,"children":1033},{"style":101},[1034],{"type":53,"value":136},{"type":47,"tag":88,"props":1036,"children":1037},{"style":107},[1038],{"type":53,"value":267},{"type":47,"tag":88,"props":1040,"children":1041},{"style":101},[1042],{"type":53,"value":141},{"type":47,"tag":56,"props":1044,"children":1046},{"id":1045},"signed-urls",[1047],{"type":53,"value":1048},"Signed URLs",{"type":47,"tag":63,"props":1050,"children":1051},{},[1052],{"type":53,"value":1053},"Generate temporary URLs so clients can upload\u002Fdownload directly without going through your service:",{"type":47,"tag":78,"props":1055,"children":1057},{"className":80,"code":1056,"language":22,"meta":82,"style":82},"const uploadUrl = await uploads.signedUploadUrl(\"user-uploads\u002Favatar.jpg\", { ttl: 7200 });\nconst downloadUrl = await uploads.signedDownloadUrl(\"documents\u002Freport.pdf\", { ttl: 7200 });\n",[1058],{"type":47,"tag":69,"props":1059,"children":1060},{"__ignoreMap":82},[1061,1146],{"type":47,"tag":88,"props":1062,"children":1063},{"class":90,"line":91},[1064,1068,1073,1077,1081,1085,1089,1094,1098,1102,1107,1111,1115,1119,1124,1128,1134,1138,1142],{"type":47,"tag":88,"props":1065,"children":1066},{"style":173},[1067],{"type":53,"value":430},{"type":47,"tag":88,"props":1069,"children":1070},{"style":107},[1071],{"type":53,"value":1072}," uploadUrl ",{"type":47,"tag":88,"props":1074,"children":1075},{"style":101},[1076],{"type":53,"value":186},{"type":47,"tag":88,"props":1078,"children":1079},{"style":95},[1080],{"type":53,"value":444},{"type":47,"tag":88,"props":1082,"children":1083},{"style":107},[1084],{"type":53,"value":449},{"type":47,"tag":88,"props":1086,"children":1087},{"style":101},[1088],{"type":53,"value":454},{"type":47,"tag":88,"props":1090,"children":1091},{"style":194},[1092],{"type":53,"value":1093},"signedUploadUrl",{"type":47,"tag":88,"props":1095,"children":1096},{"style":107},[1097],{"type":53,"value":201},{"type":47,"tag":88,"props":1099,"children":1100},{"style":101},[1101],{"type":53,"value":136},{"type":47,"tag":88,"props":1103,"children":1104},{"style":128},[1105],{"type":53,"value":1106},"user-uploads\u002Favatar.jpg",{"type":47,"tag":88,"props":1108,"children":1109},{"style":101},[1110],{"type":53,"value":136},{"type":47,"tag":88,"props":1112,"children":1113},{"style":101},[1114],{"type":53,"value":219},{"type":47,"tag":88,"props":1116,"children":1117},{"style":101},[1118],{"type":53,"value":104},{"type":47,"tag":88,"props":1120,"children":1121},{"style":230},[1122],{"type":53,"value":1123}," ttl",{"type":47,"tag":88,"props":1125,"children":1126},{"style":101},[1127],{"type":53,"value":238},{"type":47,"tag":88,"props":1129,"children":1131},{"style":1130},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1132],{"type":53,"value":1133}," 7200",{"type":47,"tag":88,"props":1135,"children":1136},{"style":101},[1137],{"type":53,"value":115},{"type":47,"tag":88,"props":1139,"children":1140},{"style":107},[1141],{"type":53,"value":267},{"type":47,"tag":88,"props":1143,"children":1144},{"style":101},[1145],{"type":53,"value":141},{"type":47,"tag":88,"props":1147,"children":1148},{"class":90,"line":144},[1149,1153,1158,1162,1166,1170,1174,1179,1183,1187,1192,1196,1200,1204,1208,1212,1216,1220,1224],{"type":47,"tag":88,"props":1150,"children":1151},{"style":173},[1152],{"type":53,"value":430},{"type":47,"tag":88,"props":1154,"children":1155},{"style":107},[1156],{"type":53,"value":1157}," downloadUrl ",{"type":47,"tag":88,"props":1159,"children":1160},{"style":101},[1161],{"type":53,"value":186},{"type":47,"tag":88,"props":1163,"children":1164},{"style":95},[1165],{"type":53,"value":444},{"type":47,"tag":88,"props":1167,"children":1168},{"style":107},[1169],{"type":53,"value":449},{"type":47,"tag":88,"props":1171,"children":1172},{"style":101},[1173],{"type":53,"value":454},{"type":47,"tag":88,"props":1175,"children":1176},{"style":194},[1177],{"type":53,"value":1178},"signedDownloadUrl",{"type":47,"tag":88,"props":1180,"children":1181},{"style":107},[1182],{"type":53,"value":201},{"type":47,"tag":88,"props":1184,"children":1185},{"style":101},[1186],{"type":53,"value":136},{"type":47,"tag":88,"props":1188,"children":1189},{"style":128},[1190],{"type":53,"value":1191},"documents\u002Freport.pdf",{"type":47,"tag":88,"props":1193,"children":1194},{"style":101},[1195],{"type":53,"value":136},{"type":47,"tag":88,"props":1197,"children":1198},{"style":101},[1199],{"type":53,"value":219},{"type":47,"tag":88,"props":1201,"children":1202},{"style":101},[1203],{"type":53,"value":104},{"type":47,"tag":88,"props":1205,"children":1206},{"style":230},[1207],{"type":53,"value":1123},{"type":47,"tag":88,"props":1209,"children":1210},{"style":101},[1211],{"type":53,"value":238},{"type":47,"tag":88,"props":1213,"children":1214},{"style":1130},[1215],{"type":53,"value":1133},{"type":47,"tag":88,"props":1217,"children":1218},{"style":101},[1219],{"type":53,"value":115},{"type":47,"tag":88,"props":1221,"children":1222},{"style":107},[1223],{"type":53,"value":267},{"type":47,"tag":88,"props":1225,"children":1226},{"style":101},[1227],{"type":53,"value":141},{"type":47,"tag":56,"props":1229,"children":1231},{"id":1230},"bucket-references",[1232],{"type":53,"value":1233},"Bucket References",{"type":47,"tag":63,"props":1235,"children":1236},{},[1237],{"type":53,"value":1238},"Pass bucket access to other code with a specific permission set:",{"type":47,"tag":78,"props":1240,"children":1242},{"className":80,"code":1241,"language":22,"meta":82,"style":82},"import { Uploader, Downloader } from \"encore.dev\u002Fstorage\u002Fobjects\";\n\nconst uploaderRef = uploads.ref\u003CUploader>();\nconst downloaderRef = uploads.ref\u003CDownloader>();\n\n\u002F\u002F Permission types: Downloader, Uploader, Lister, Attrser, Remover,\n\u002F\u002F SignedDownloader, SignedUploader, ReadWriter\n",[1243],{"type":47,"tag":69,"props":1244,"children":1245},{"__ignoreMap":82},[1246,1295,1302,1356,1405,1412,1420],{"type":47,"tag":88,"props":1247,"children":1248},{"class":90,"line":91},[1249,1253,1257,1262,1266,1271,1275,1279,1283,1287,1291],{"type":47,"tag":88,"props":1250,"children":1251},{"style":95},[1252],{"type":53,"value":98},{"type":47,"tag":88,"props":1254,"children":1255},{"style":101},[1256],{"type":53,"value":104},{"type":47,"tag":88,"props":1258,"children":1259},{"style":107},[1260],{"type":53,"value":1261}," Uploader",{"type":47,"tag":88,"props":1263,"children":1264},{"style":101},[1265],{"type":53,"value":219},{"type":47,"tag":88,"props":1267,"children":1268},{"style":107},[1269],{"type":53,"value":1270}," Downloader",{"type":47,"tag":88,"props":1272,"children":1273},{"style":101},[1274],{"type":53,"value":115},{"type":47,"tag":88,"props":1276,"children":1277},{"style":95},[1278],{"type":53,"value":120},{"type":47,"tag":88,"props":1280,"children":1281},{"style":101},[1282],{"type":53,"value":125},{"type":47,"tag":88,"props":1284,"children":1285},{"style":128},[1286],{"type":53,"value":131},{"type":47,"tag":88,"props":1288,"children":1289},{"style":101},[1290],{"type":53,"value":136},{"type":47,"tag":88,"props":1292,"children":1293},{"style":101},[1294],{"type":53,"value":141},{"type":47,"tag":88,"props":1296,"children":1297},{"class":90,"line":144},[1298],{"type":47,"tag":88,"props":1299,"children":1300},{"emptyLinePlaceholder":148},[1301],{"type":53,"value":151},{"type":47,"tag":88,"props":1303,"children":1304},{"class":90,"line":154},[1305,1309,1314,1318,1322,1326,1331,1336,1342,1347,1352],{"type":47,"tag":88,"props":1306,"children":1307},{"style":173},[1308],{"type":53,"value":430},{"type":47,"tag":88,"props":1310,"children":1311},{"style":107},[1312],{"type":53,"value":1313}," uploaderRef ",{"type":47,"tag":88,"props":1315,"children":1316},{"style":101},[1317],{"type":53,"value":186},{"type":47,"tag":88,"props":1319,"children":1320},{"style":107},[1321],{"type":53,"value":449},{"type":47,"tag":88,"props":1323,"children":1324},{"style":101},[1325],{"type":53,"value":454},{"type":47,"tag":88,"props":1327,"children":1328},{"style":194},[1329],{"type":53,"value":1330},"ref",{"type":47,"tag":88,"props":1332,"children":1333},{"style":101},[1334],{"type":53,"value":1335},"\u003C",{"type":47,"tag":88,"props":1337,"children":1339},{"style":1338},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1340],{"type":53,"value":1341},"Uploader",{"type":47,"tag":88,"props":1343,"children":1344},{"style":101},[1345],{"type":53,"value":1346},">",{"type":47,"tag":88,"props":1348,"children":1349},{"style":107},[1350],{"type":53,"value":1351},"()",{"type":47,"tag":88,"props":1353,"children":1354},{"style":101},[1355],{"type":53,"value":141},{"type":47,"tag":88,"props":1357,"children":1358},{"class":90,"line":164},[1359,1363,1368,1372,1376,1380,1384,1388,1393,1397,1401],{"type":47,"tag":88,"props":1360,"children":1361},{"style":173},[1362],{"type":53,"value":430},{"type":47,"tag":88,"props":1364,"children":1365},{"style":107},[1366],{"type":53,"value":1367}," downloaderRef ",{"type":47,"tag":88,"props":1369,"children":1370},{"style":101},[1371],{"type":53,"value":186},{"type":47,"tag":88,"props":1373,"children":1374},{"style":107},[1375],{"type":53,"value":449},{"type":47,"tag":88,"props":1377,"children":1378},{"style":101},[1379],{"type":53,"value":454},{"type":47,"tag":88,"props":1381,"children":1382},{"style":194},[1383],{"type":53,"value":1330},{"type":47,"tag":88,"props":1385,"children":1386},{"style":101},[1387],{"type":53,"value":1335},{"type":47,"tag":88,"props":1389,"children":1390},{"style":1338},[1391],{"type":53,"value":1392},"Downloader",{"type":47,"tag":88,"props":1394,"children":1395},{"style":101},[1396],{"type":53,"value":1346},{"type":47,"tag":88,"props":1398,"children":1399},{"style":107},[1400],{"type":53,"value":1351},{"type":47,"tag":88,"props":1402,"children":1403},{"style":101},[1404],{"type":53,"value":141},{"type":47,"tag":88,"props":1406,"children":1407},{"class":90,"line":31},[1408],{"type":47,"tag":88,"props":1409,"children":1410},{"emptyLinePlaceholder":148},[1411],{"type":53,"value":151},{"type":47,"tag":88,"props":1413,"children":1414},{"class":90,"line":256},[1415],{"type":47,"tag":88,"props":1416,"children":1417},{"style":158},[1418],{"type":53,"value":1419},"\u002F\u002F Permission types: Downloader, Uploader, Lister, Attrser, Remover,\n",{"type":47,"tag":88,"props":1421,"children":1422},{"class":90,"line":274},[1423],{"type":47,"tag":88,"props":1424,"children":1425},{"style":158},[1426],{"type":53,"value":1427},"\u002F\u002F SignedDownloader, SignedUploader, ReadWriter\n",{"type":47,"tag":56,"props":1429,"children":1431},{"id":1430},"errors",[1432],{"type":53,"value":1433},"Errors",{"type":47,"tag":1435,"props":1436,"children":1437},"ul",{},[1438,1450,1468],{"type":47,"tag":1439,"props":1440,"children":1441},"li",{},[1442,1448],{"type":47,"tag":69,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":53,"value":1447},"ObjectNotFound",{"type":53,"value":1449}," — object doesn't exist",{"type":47,"tag":1439,"props":1451,"children":1452},{},[1453,1459,1461,1467],{"type":47,"tag":69,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":53,"value":1458},"PreconditionFailed",{"type":53,"value":1460}," — upload preconditions not met (e.g. ",{"type":47,"tag":69,"props":1462,"children":1464},{"className":1463},[],[1465],{"type":53,"value":1466},"setIfNotExists",{"type":53,"value":267},{"type":47,"tag":1439,"props":1469,"children":1470},{},[1471,1477],{"type":47,"tag":69,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":53,"value":1476},"ObjectsError",{"type":53,"value":1478}," — base error type",{"type":47,"tag":56,"props":1480,"children":1482},{"id":1481},"guidelines",[1483],{"type":53,"value":1484},"Guidelines",{"type":47,"tag":1435,"props":1486,"children":1487},{},[1488,1493,1506,1511],{"type":47,"tag":1439,"props":1489,"children":1490},{},[1491],{"type":53,"value":1492},"Declare buckets at package level.",{"type":47,"tag":1439,"props":1494,"children":1495},{},[1496,1498,1504],{"type":53,"value":1497},"Default to private buckets; opt into ",{"type":47,"tag":69,"props":1499,"children":1501},{"className":1500},[],[1502],{"type":53,"value":1503},"public: true",{"type":53,"value":1505}," only for assets meant for unauthenticated download.",{"type":47,"tag":1439,"props":1507,"children":1508},{},[1509],{"type":53,"value":1510},"Use signed URLs for browser uploads\u002Fdownloads instead of streaming through your service.",{"type":47,"tag":1439,"props":1512,"children":1513},{},[1514],{"type":53,"value":1515},"Use bucket references when passing access to helpers — they encode the permission contract in the type system.",{"type":47,"tag":1517,"props":1518,"children":1519},"style",{},[1520],{"type":53,"value":1521},"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":1523,"total":1615},[1524,1536,1548,1556,1572,1584,1600],{"slug":1525,"name":1525,"fn":1526,"description":1527,"org":1528,"tags":1529,"stars":27,"repoUrl":28,"updatedAt":1535},"encore-api","build type-safe APIs with Encore","Define typed API endpoints in Encore.ts using `api(...)` from `encore.dev\u002Fapi`. Covers typed request\u002Fresponse interfaces, path\u002Fquery\u002Fheader\u002Fcookie params, request validation, and `APIError`. For raw endpoints (`api.raw()`) and inbound webhooks, use `encore-webhook` instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1530,1533,1534],{"name":1531,"slug":1532,"type":16},"API Development","api-development",{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},"2026-04-06T18:09:46.044101",{"slug":1537,"name":1537,"fn":1538,"description":1539,"org":1540,"tags":1541,"stars":27,"repoUrl":28,"updatedAt":1547},"encore-auth","implement Encore.ts authentication","Protect Encore.ts endpoints with authentication and authorize callers. Covers `authHandler`, `Gateway`, `getAuthData`, and `auth: true`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1542,1545,1546],{"name":1543,"slug":1544,"type":16},"Auth","auth",{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},"2026-04-06T18:09:47.336322",{"slug":4,"name":4,"fn":5,"description":6,"org":1549,"tags":1550,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1551,1552,1553,1554,1555],{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"name":18,"slug":19,"type":16},{"name":25,"slug":26,"type":16},{"name":21,"slug":22,"type":16},{"slug":1557,"name":1557,"fn":1558,"description":1559,"org":1560,"tags":1561,"stars":27,"repoUrl":28,"updatedAt":1571},"encore-cache","cache data in Redis with Encore.ts","Cache data in Redis from Encore.ts using `CacheCluster` and typed keyspaces from `encore.dev\u002Fstorage\u002Fcache`. Type-safe key\u002Fvalue access with TTLs, atomic increments, and per-keyspace data shapes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1562,1563,1566,1567,1570],{"name":14,"slug":15,"type":16},{"name":1564,"slug":1565,"type":16},"Caching","caching",{"name":9,"slug":8,"type":16},{"name":1568,"slug":1569,"type":16},"Redis","redis",{"name":21,"slug":22,"type":16},"2026-05-16T05:59:56.808328",{"slug":1573,"name":1573,"fn":1574,"description":1575,"org":1576,"tags":1577,"stars":27,"repoUrl":28,"updatedAt":1583},"encore-code-review","review Encore.ts code","Review existing Encore.ts code for best practices and common anti-patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1578,1581,1582],{"name":1579,"slug":1580,"type":16},"Code Review","code-review",{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},"2026-04-06T18:10:01.123999",{"slug":1585,"name":1585,"fn":1586,"description":1587,"org":1588,"tags":1589,"stars":27,"repoUrl":28,"updatedAt":1599},"encore-cron","schedule recurring jobs in Encore.ts","Schedule periodic \u002F recurring work in Encore.ts using `CronJob` from `encore.dev\u002Fcron`. Covers `every: \"1h\"` interval syntax and `schedule: \"0 9 * * 1\"` cron expressions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1590,1593,1594,1595,1598],{"name":1591,"slug":1592,"type":16},"Automation","automation",{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"name":1596,"slug":1597,"type":16},"Scheduling","scheduling",{"name":21,"slug":22,"type":16},"2026-05-16T05:59:54.146651",{"slug":1601,"name":1601,"fn":1602,"description":1603,"org":1604,"tags":1605,"stars":27,"repoUrl":28,"updatedAt":1614},"encore-database","build Encore databases","Work with PostgreSQL in Encore.ts using `SQLDatabase` from `encore.dev\u002Fstorage\u002Fsqldb` — schema migrations and SQL queries.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1606,1609,1610,1613],{"name":1607,"slug":1608,"type":16},"Database","database",{"name":9,"slug":8,"type":16},{"name":1611,"slug":1612,"type":16},"ORM","orm",{"name":21,"slug":22,"type":16},"2026-04-06T18:09:54.823017",28,{"items":1617,"total":1615},[1618,1624,1630,1638,1646,1652,1660,1667,1684,1701,1713,1724],{"slug":1525,"name":1525,"fn":1526,"description":1527,"org":1619,"tags":1620,"stars":27,"repoUrl":28,"updatedAt":1535},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1621,1622,1623],{"name":1531,"slug":1532,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"slug":1537,"name":1537,"fn":1538,"description":1539,"org":1625,"tags":1626,"stars":27,"repoUrl":28,"updatedAt":1547},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1627,1628,1629],{"name":1543,"slug":1544,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":1631,"tags":1632,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1633,1634,1635,1636,1637],{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"name":18,"slug":19,"type":16},{"name":25,"slug":26,"type":16},{"name":21,"slug":22,"type":16},{"slug":1557,"name":1557,"fn":1558,"description":1559,"org":1639,"tags":1640,"stars":27,"repoUrl":28,"updatedAt":1571},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1641,1642,1643,1644,1645],{"name":14,"slug":15,"type":16},{"name":1564,"slug":1565,"type":16},{"name":9,"slug":8,"type":16},{"name":1568,"slug":1569,"type":16},{"name":21,"slug":22,"type":16},{"slug":1573,"name":1573,"fn":1574,"description":1575,"org":1647,"tags":1648,"stars":27,"repoUrl":28,"updatedAt":1583},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1649,1650,1651],{"name":1579,"slug":1580,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"slug":1585,"name":1585,"fn":1586,"description":1587,"org":1653,"tags":1654,"stars":27,"repoUrl":28,"updatedAt":1599},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1655,1656,1657,1658,1659],{"name":1591,"slug":1592,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"name":1596,"slug":1597,"type":16},{"name":21,"slug":22,"type":16},{"slug":1601,"name":1601,"fn":1602,"description":1603,"org":1661,"tags":1662,"stars":27,"repoUrl":28,"updatedAt":1614},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1663,1664,1665,1666],{"name":1607,"slug":1608,"type":16},{"name":9,"slug":8,"type":16},{"name":1611,"slug":1612,"type":16},{"name":21,"slug":22,"type":16},{"slug":1668,"name":1668,"fn":1669,"description":1670,"org":1671,"tags":1672,"stars":27,"repoUrl":28,"updatedAt":1683},"encore-frontend","connect frontend to Encore backend","Connect a frontend application (React, Next.js, Vue, Svelte, etc.) to an Encore.ts backend.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1673,1674,1677,1680],{"name":9,"slug":8,"type":16},{"name":1675,"slug":1676,"type":16},"Frontend","frontend",{"name":1678,"slug":1679,"type":16},"Next.js","next-js",{"name":1681,"slug":1682,"type":16},"React","react","2026-04-06T18:09:56.091006",{"slug":1685,"name":1685,"fn":1686,"description":1687,"org":1688,"tags":1689,"stars":27,"repoUrl":28,"updatedAt":1700},"encore-getting-started","build and run applications with Encore.ts","Bootstrap a brand-new Encore.ts project from zero. Only for first-time CLI install and `encore app create` — not for architecture or feature questions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1690,1691,1692,1693,1696,1697],{"name":1531,"slug":1532,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"name":1694,"slug":1695,"type":16},"Local Development","local-development",{"name":21,"slug":22,"type":16},{"name":1698,"slug":1699,"type":16},"Web Development","web-development","2026-04-06T18:10:04.885446",{"slug":1702,"name":1702,"fn":1703,"description":1704,"org":1705,"tags":1706,"stars":27,"repoUrl":28,"updatedAt":1712},"encore-go-api","build APIs with Encore Go","Define typed API endpoints in Encore Go using `\u002F\u002Fencore:api` annotations. Covers typed request\u002Fresponse structs, path\u002Fquery\u002Fheader\u002Fcookie params, and error returns. For raw endpoints (`\u002F\u002Fencore:api raw`) and inbound webhooks, use `encore-go-webhook` instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1707,1708,1709],{"name":1531,"slug":1532,"type":16},{"name":9,"slug":8,"type":16},{"name":1710,"slug":1711,"type":16},"Go","go","2026-04-06T18:09:48.578781",{"slug":1714,"name":1714,"fn":1715,"description":1716,"org":1717,"tags":1718,"stars":27,"repoUrl":28,"updatedAt":1723},"encore-go-auth","implement authentication with Encore Go","Protect Encore Go endpoints with authentication and authorize callers. Covers `auth.AuthHandler`, `auth.UserID`, the `Authorization` header, and `\u002F\u002Fencore:api auth`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1719,1720,1721,1722],{"name":1543,"slug":1544,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"name":1710,"slug":1711,"type":16},"2026-04-06T18:09:51.065102",{"slug":1725,"name":1725,"fn":1726,"description":1727,"org":1728,"tags":1729,"stars":27,"repoUrl":28,"updatedAt":1737},"encore-go-bucket","store files in Encore Go buckets","Store unstructured files in Encore Go using `objects.NewBucket` from `encore.dev\u002Fstorage\u002Fobjects` — uploads, images, documents, blobs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1730,1731,1732,1733,1734],{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"name":18,"slug":19,"type":16},{"name":1710,"slug":1711,"type":16},{"name":1735,"slug":1736,"type":16},"Storage","storage","2026-05-16T06:00:03.633918"]