[{"data":1,"prerenderedAt":994},["ShallowReactive",2],{"\u002Fdocs\u002Fmanifest":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"body":10,"_type":988,"_id":989,"_source":990,"_file":991,"_stem":992,"_extension":993},"\u002Fdocs\u002Fmanifest","docs",false,"","The public manifest","Every i3deploy project that publishes releases gets a public, unauthenticated JSON feed —\none file per project, readable directly from a browser or a static site. Read this and you\nnever depend on our server's uptime: the feed is a static object on Google Cloud Storage, it\nworks even while the API is scaled to zero, and there's no API key, no CORS preflight dance,\nand no rate limit to worry about.",{"type":11,"children":12,"toc":979},"root",[13,21,26,33,43,56,62,116,169,175,188,600,607,857,870,876,935,941,973],{"type":14,"tag":15,"props":16,"children":18},"element","h1",{"id":17},"the-public-manifest",[19],{"type":20,"value":8},"text",{"type":14,"tag":22,"props":23,"children":24},"p",{},[25],{"type":20,"value":9},{"type":14,"tag":27,"props":28,"children":30},"h2",{"id":29},"location",[31],{"type":20,"value":32},"Location",{"type":14,"tag":34,"props":35,"children":37},"pre",{"code":36},"https:\u002F\u002Fstorage.googleapis.com\u002Fi3deploy-public\u002F\u003Corg-slug>\u002Fprojects\u002F\u003Cproject-slug>\u002Freleases.json\n",[38],{"type":14,"tag":39,"props":40,"children":41},"code",{"__ignoreMap":7},[42],{"type":20,"value":36},{"type":14,"tag":22,"props":44,"children":45},{},[46,48,54],{"type":20,"value":47},"One file per project, generated automatically every time a release for that project is\ncreated, updated, or (un)published. The URL is stable from the moment the project exists —\neven a project with zero published releases returns ",{"type":14,"tag":39,"props":49,"children":51},{"className":50},[],[52],{"type":20,"value":53},"{\"releases\": []}",{"type":20,"value":55}," rather than a 404, so\nyou can point a consumer at it before you've shipped anything.",{"type":14,"tag":27,"props":57,"children":59},{"id":58},"whats-in-it-and-what-isnt",[60],{"type":20,"value":61},"What's in it — and what isn't",{"type":14,"tag":22,"props":63,"children":64},{},[65,67,73,75,81,83,89,91,97,99,106,108,114],{"type":20,"value":66},"This feed is a ",{"type":14,"tag":68,"props":69,"children":70},"strong",{},[71],{"type":20,"value":72},"product changelog",{"type":20,"value":74},", not an infrastructure dashboard. It lists published\n",{"type":14,"tag":39,"props":76,"children":78},{"className":77},[],[79],{"type":20,"value":80},"ProjectRelease",{"type":20,"value":82}," rows only — releases with ",{"type":14,"tag":39,"props":84,"children":86},{"className":85},[],[87],{"type":20,"value":88},"published: true",{"type":20,"value":90}," (the default) appear in the feed;\nset ",{"type":14,"tag":39,"props":92,"children":94},{"className":93},[],[95],{"type":20,"value":96},"published: false",{"type":20,"value":98}," to keep a release staged before it goes live (see ",{"type":14,"tag":100,"props":101,"children":103},"a",{"href":102},"\u002Fdocs\u002Freleases",[104],{"type":20,"value":105},"Cutting releases",{"type":20,"value":107},"). There's no ",{"type":14,"tag":39,"props":109,"children":111},{"className":110},[],[112],{"type":20,"value":113},"commit_sha",{"type":20,"value":115},", no\nper-environment deploy state, and no technical changelog — just the user-facing version, name,\ndate, and Markdown notes.",{"type":14,"tag":22,"props":117,"children":118},{},[119,121,127,129,135,137,143,145,151,153,159,161,167],{"type":20,"value":120},"That's a deliberate contrast with i3deploy's internal manifest (schema ",{"type":14,"tag":39,"props":122,"children":124},{"className":123},[],[125],{"type":20,"value":126},"2.0",{"type":20,"value":128},", private bucket),\nwhich ",{"type":14,"tag":130,"props":131,"children":132},"em",{},[133],{"type":20,"value":134},"does",{"type":20,"value":136}," track live deploy state per environment — ",{"type":14,"tag":39,"props":138,"children":140},{"className":139},[],[141],{"type":20,"value":142},"current_version",{"type":20,"value":144}," there means \"the\nrelease of the most recent deploy, by time, whose status is ",{"type":14,"tag":39,"props":146,"children":148},{"className":147},[],[149],{"type":20,"value":150},"finished",{"type":20,"value":152},"\" (a rollback or hotfix\nthat redeploys an older version is reported correctly because it's ordered by time, not by\nversion number). That internal manifest isn't public. The ",{"type":14,"tag":39,"props":154,"children":156},{"className":155},[],[157],{"type":20,"value":158},"releases.json",{"type":20,"value":160}," feed documented here\nis a separate, independently-versioned public contract — currently ",{"type":14,"tag":39,"props":162,"children":164},{"className":163},[],[165],{"type":20,"value":166},"schema_version: \"1.0\"",{"type":20,"value":168}," —\nscoped to \"what did we ship and when,\" not \"what's running right now.\"",{"type":14,"tag":27,"props":170,"children":172},{"id":171},"sample-real-trimmed",[173],{"type":20,"value":174},"Sample (real, trimmed)",{"type":14,"tag":22,"props":176,"children":177},{},[178,180,186],{"type":20,"value":179},"This is an actual, live response from ",{"type":14,"tag":39,"props":181,"children":183},{"className":182},[],[184],{"type":20,"value":185},"https:\u002F\u002Fstorage.googleapis.com\u002Fi3deploy-public\u002Fi3\u002Fprojects\u002Fi3deploy\u002Freleases.json",{"type":20,"value":187},",\ntrimmed to one release for brevity (the real file can hold up to 50):",{"type":14,"tag":34,"props":189,"children":193},{"code":190,"language":191,"meta":7,"className":192,"style":7},"{\n  \"schema_version\": \"1.0\",\n  \"organization_slug\": \"i3\",\n  \"project\": {\n    \"slug\": \"i3deploy\",\n    \"display_name\": \"i3deploy\"\n  },\n  \"generated_at\": \"2026-07-18T16:04:59.594495+00:00\",\n  \"releases\": [\n    {\n      \"version\": \"1.1.0\",\n      \"name\": \"Public release feed (embeddable changelog) + public releases by default\",\n      \"released_at\": \"2026-07-12T17:45:11.629828+00:00\",\n      \"short_summary\": \"Public per-project \\\"what's new\\\" feed, CORS-enabled, consumable from the browser\",\n      \"changelog_markdown\": \"**Public what's-new feed.** Every project now has a public JSON URL with its own changelog (published releases only), readable directly by a frontend — no auth, no API calls — great for a \\\"what's new\\\" panel or toast, and it works even while the backend is scaled to zero. New releases are published automatically.\",\n      \"authored_by\": \"ai\",\n      \"service_versions\": {\n        \"i3deploy-back\": \"1.2.0\"\n      }\n    }\n  ]\n}\n","json","language-json shiki shiki-themes github-dark",[194],{"type":14,"tag":39,"props":195,"children":196},{"__ignoreMap":7},[197,209,235,257,271,293,311,320,342,356,365,387,409,431,472,511,533,546,564,573,582,591],{"type":14,"tag":198,"props":199,"children":202},"span",{"class":200,"line":201},"line",1,[203],{"type":14,"tag":198,"props":204,"children":206},{"style":205},"--shiki-default:#E1E4E8",[207],{"type":20,"value":208},"{\n",{"type":14,"tag":198,"props":210,"children":212},{"class":200,"line":211},2,[213,219,224,230],{"type":14,"tag":198,"props":214,"children":216},{"style":215},"--shiki-default:#79B8FF",[217],{"type":20,"value":218},"  \"schema_version\"",{"type":14,"tag":198,"props":220,"children":221},{"style":205},[222],{"type":20,"value":223},": ",{"type":14,"tag":198,"props":225,"children":227},{"style":226},"--shiki-default:#9ECBFF",[228],{"type":20,"value":229},"\"1.0\"",{"type":14,"tag":198,"props":231,"children":232},{"style":205},[233],{"type":20,"value":234},",\n",{"type":14,"tag":198,"props":236,"children":238},{"class":200,"line":237},3,[239,244,248,253],{"type":14,"tag":198,"props":240,"children":241},{"style":215},[242],{"type":20,"value":243},"  \"organization_slug\"",{"type":14,"tag":198,"props":245,"children":246},{"style":205},[247],{"type":20,"value":223},{"type":14,"tag":198,"props":249,"children":250},{"style":226},[251],{"type":20,"value":252},"\"i3\"",{"type":14,"tag":198,"props":254,"children":255},{"style":205},[256],{"type":20,"value":234},{"type":14,"tag":198,"props":258,"children":260},{"class":200,"line":259},4,[261,266],{"type":14,"tag":198,"props":262,"children":263},{"style":215},[264],{"type":20,"value":265},"  \"project\"",{"type":14,"tag":198,"props":267,"children":268},{"style":205},[269],{"type":20,"value":270},": {\n",{"type":14,"tag":198,"props":272,"children":274},{"class":200,"line":273},5,[275,280,284,289],{"type":14,"tag":198,"props":276,"children":277},{"style":215},[278],{"type":20,"value":279},"    \"slug\"",{"type":14,"tag":198,"props":281,"children":282},{"style":205},[283],{"type":20,"value":223},{"type":14,"tag":198,"props":285,"children":286},{"style":226},[287],{"type":20,"value":288},"\"i3deploy\"",{"type":14,"tag":198,"props":290,"children":291},{"style":205},[292],{"type":20,"value":234},{"type":14,"tag":198,"props":294,"children":296},{"class":200,"line":295},6,[297,302,306],{"type":14,"tag":198,"props":298,"children":299},{"style":215},[300],{"type":20,"value":301},"    \"display_name\"",{"type":14,"tag":198,"props":303,"children":304},{"style":205},[305],{"type":20,"value":223},{"type":14,"tag":198,"props":307,"children":308},{"style":226},[309],{"type":20,"value":310},"\"i3deploy\"\n",{"type":14,"tag":198,"props":312,"children":314},{"class":200,"line":313},7,[315],{"type":14,"tag":198,"props":316,"children":317},{"style":205},[318],{"type":20,"value":319},"  },\n",{"type":14,"tag":198,"props":321,"children":323},{"class":200,"line":322},8,[324,329,333,338],{"type":14,"tag":198,"props":325,"children":326},{"style":215},[327],{"type":20,"value":328},"  \"generated_at\"",{"type":14,"tag":198,"props":330,"children":331},{"style":205},[332],{"type":20,"value":223},{"type":14,"tag":198,"props":334,"children":335},{"style":226},[336],{"type":20,"value":337},"\"2026-07-18T16:04:59.594495+00:00\"",{"type":14,"tag":198,"props":339,"children":340},{"style":205},[341],{"type":20,"value":234},{"type":14,"tag":198,"props":343,"children":345},{"class":200,"line":344},9,[346,351],{"type":14,"tag":198,"props":347,"children":348},{"style":215},[349],{"type":20,"value":350},"  \"releases\"",{"type":14,"tag":198,"props":352,"children":353},{"style":205},[354],{"type":20,"value":355},": [\n",{"type":14,"tag":198,"props":357,"children":359},{"class":200,"line":358},10,[360],{"type":14,"tag":198,"props":361,"children":362},{"style":205},[363],{"type":20,"value":364},"    {\n",{"type":14,"tag":198,"props":366,"children":368},{"class":200,"line":367},11,[369,374,378,383],{"type":14,"tag":198,"props":370,"children":371},{"style":215},[372],{"type":20,"value":373},"      \"version\"",{"type":14,"tag":198,"props":375,"children":376},{"style":205},[377],{"type":20,"value":223},{"type":14,"tag":198,"props":379,"children":380},{"style":226},[381],{"type":20,"value":382},"\"1.1.0\"",{"type":14,"tag":198,"props":384,"children":385},{"style":205},[386],{"type":20,"value":234},{"type":14,"tag":198,"props":388,"children":390},{"class":200,"line":389},12,[391,396,400,405],{"type":14,"tag":198,"props":392,"children":393},{"style":215},[394],{"type":20,"value":395},"      \"name\"",{"type":14,"tag":198,"props":397,"children":398},{"style":205},[399],{"type":20,"value":223},{"type":14,"tag":198,"props":401,"children":402},{"style":226},[403],{"type":20,"value":404},"\"Public release feed (embeddable changelog) + public releases by default\"",{"type":14,"tag":198,"props":406,"children":407},{"style":205},[408],{"type":20,"value":234},{"type":14,"tag":198,"props":410,"children":412},{"class":200,"line":411},13,[413,418,422,427],{"type":14,"tag":198,"props":414,"children":415},{"style":215},[416],{"type":20,"value":417},"      \"released_at\"",{"type":14,"tag":198,"props":419,"children":420},{"style":205},[421],{"type":20,"value":223},{"type":14,"tag":198,"props":423,"children":424},{"style":226},[425],{"type":20,"value":426},"\"2026-07-12T17:45:11.629828+00:00\"",{"type":14,"tag":198,"props":428,"children":429},{"style":205},[430],{"type":20,"value":234},{"type":14,"tag":198,"props":432,"children":434},{"class":200,"line":433},14,[435,440,444,449,454,459,463,468],{"type":14,"tag":198,"props":436,"children":437},{"style":215},[438],{"type":20,"value":439},"      \"short_summary\"",{"type":14,"tag":198,"props":441,"children":442},{"style":205},[443],{"type":20,"value":223},{"type":14,"tag":198,"props":445,"children":446},{"style":226},[447],{"type":20,"value":448},"\"Public per-project ",{"type":14,"tag":198,"props":450,"children":451},{"style":215},[452],{"type":20,"value":453},"\\\"",{"type":14,"tag":198,"props":455,"children":456},{"style":226},[457],{"type":20,"value":458},"what's new",{"type":14,"tag":198,"props":460,"children":461},{"style":215},[462],{"type":20,"value":453},{"type":14,"tag":198,"props":464,"children":465},{"style":226},[466],{"type":20,"value":467}," feed, CORS-enabled, consumable from the browser\"",{"type":14,"tag":198,"props":469,"children":470},{"style":205},[471],{"type":20,"value":234},{"type":14,"tag":198,"props":473,"children":475},{"class":200,"line":474},15,[476,481,485,490,494,498,502,507],{"type":14,"tag":198,"props":477,"children":478},{"style":215},[479],{"type":20,"value":480},"      \"changelog_markdown\"",{"type":14,"tag":198,"props":482,"children":483},{"style":205},[484],{"type":20,"value":223},{"type":14,"tag":198,"props":486,"children":487},{"style":226},[488],{"type":20,"value":489},"\"**Public what's-new feed.** Every project now has a public JSON URL with its own changelog (published releases only), readable directly by a frontend — no auth, no API calls — great for a ",{"type":14,"tag":198,"props":491,"children":492},{"style":215},[493],{"type":20,"value":453},{"type":14,"tag":198,"props":495,"children":496},{"style":226},[497],{"type":20,"value":458},{"type":14,"tag":198,"props":499,"children":500},{"style":215},[501],{"type":20,"value":453},{"type":14,"tag":198,"props":503,"children":504},{"style":226},[505],{"type":20,"value":506}," panel or toast, and it works even while the backend is scaled to zero. New releases are published automatically.\"",{"type":14,"tag":198,"props":508,"children":509},{"style":205},[510],{"type":20,"value":234},{"type":14,"tag":198,"props":512,"children":514},{"class":200,"line":513},16,[515,520,524,529],{"type":14,"tag":198,"props":516,"children":517},{"style":215},[518],{"type":20,"value":519},"      \"authored_by\"",{"type":14,"tag":198,"props":521,"children":522},{"style":205},[523],{"type":20,"value":223},{"type":14,"tag":198,"props":525,"children":526},{"style":226},[527],{"type":20,"value":528},"\"ai\"",{"type":14,"tag":198,"props":530,"children":531},{"style":205},[532],{"type":20,"value":234},{"type":14,"tag":198,"props":534,"children":536},{"class":200,"line":535},17,[537,542],{"type":14,"tag":198,"props":538,"children":539},{"style":215},[540],{"type":20,"value":541},"      \"service_versions\"",{"type":14,"tag":198,"props":543,"children":544},{"style":205},[545],{"type":20,"value":270},{"type":14,"tag":198,"props":547,"children":549},{"class":200,"line":548},18,[550,555,559],{"type":14,"tag":198,"props":551,"children":552},{"style":215},[553],{"type":20,"value":554},"        \"i3deploy-back\"",{"type":14,"tag":198,"props":556,"children":557},{"style":205},[558],{"type":20,"value":223},{"type":14,"tag":198,"props":560,"children":561},{"style":226},[562],{"type":20,"value":563},"\"1.2.0\"\n",{"type":14,"tag":198,"props":565,"children":567},{"class":200,"line":566},19,[568],{"type":14,"tag":198,"props":569,"children":570},{"style":205},[571],{"type":20,"value":572},"      }\n",{"type":14,"tag":198,"props":574,"children":576},{"class":200,"line":575},20,[577],{"type":14,"tag":198,"props":578,"children":579},{"style":205},[580],{"type":20,"value":581},"    }\n",{"type":14,"tag":198,"props":583,"children":585},{"class":200,"line":584},21,[586],{"type":14,"tag":198,"props":587,"children":588},{"style":205},[589],{"type":20,"value":590},"  ]\n",{"type":14,"tag":198,"props":592,"children":594},{"class":200,"line":593},22,[595],{"type":14,"tag":198,"props":596,"children":597},{"style":205},[598],{"type":20,"value":599},"}\n",{"type":14,"tag":601,"props":602,"children":604},"h3",{"id":603},"field-reference",[605],{"type":20,"value":606},"Field reference",{"type":14,"tag":608,"props":609,"children":610},"table",{},[611,630],{"type":14,"tag":612,"props":613,"children":614},"thead",{},[615],{"type":14,"tag":616,"props":617,"children":618},"tr",{},[619,625],{"type":14,"tag":620,"props":621,"children":622},"th",{},[623],{"type":20,"value":624},"Field",{"type":14,"tag":620,"props":626,"children":627},{},[628],{"type":20,"value":629},"Meaning",{"type":14,"tag":631,"props":632,"children":633},"tbody",{},[634,659,684,701,718,735,768,785,802,832],{"type":14,"tag":616,"props":635,"children":636},{},[637,647],{"type":14,"tag":638,"props":639,"children":640},"td",{},[641],{"type":14,"tag":39,"props":642,"children":644},{"className":643},[],[645],{"type":20,"value":646},"schema_version",{"type":14,"tag":638,"props":648,"children":649},{},[650,652,657],{"type":20,"value":651},"This feed's own contract version (",{"type":14,"tag":39,"props":653,"children":655},{"className":654},[],[656],{"type":20,"value":229},{"type":20,"value":658}," today). Bumped independently of i3deploy's internal manifest schema — a version bump here is a breaking change for consumers.",{"type":14,"tag":616,"props":660,"children":661},{},[662,679],{"type":14,"tag":638,"props":663,"children":664},{},[665,671,673],{"type":14,"tag":39,"props":666,"children":668},{"className":667},[],[669],{"type":20,"value":670},"organization_slug",{"type":20,"value":672}," \u002F ",{"type":14,"tag":39,"props":674,"children":676},{"className":675},[],[677],{"type":20,"value":678},"project",{"type":14,"tag":638,"props":680,"children":681},{},[682],{"type":20,"value":683},"Which org and project this feed belongs to.",{"type":14,"tag":616,"props":685,"children":686},{},[687,696],{"type":14,"tag":638,"props":688,"children":689},{},[690],{"type":14,"tag":39,"props":691,"children":693},{"className":692},[],[694],{"type":20,"value":695},"generated_at",{"type":14,"tag":638,"props":697,"children":698},{},[699],{"type":20,"value":700},"When this file was last regenerated (ISO 8601, UTC).",{"type":14,"tag":616,"props":702,"children":703},{},[704,713],{"type":14,"tag":638,"props":705,"children":706},{},[707],{"type":14,"tag":39,"props":708,"children":710},{"className":709},[],[711],{"type":20,"value":712},"releases[].version",{"type":14,"tag":638,"props":714,"children":715},{},[716],{"type":20,"value":717},"The project release's version string.",{"type":14,"tag":616,"props":719,"children":720},{},[721,730],{"type":14,"tag":638,"props":722,"children":723},{},[724],{"type":14,"tag":39,"props":725,"children":727},{"className":726},[],[728],{"type":20,"value":729},"releases[].name",{"type":14,"tag":638,"props":731,"children":732},{},[733],{"type":20,"value":734},"The release's headline\u002Ftitle.",{"type":14,"tag":616,"props":736,"children":737},{},[738,747],{"type":14,"tag":638,"props":739,"children":740},{},[741],{"type":14,"tag":39,"props":742,"children":744},{"className":743},[],[745],{"type":20,"value":746},"releases[].released_at",{"type":14,"tag":638,"props":748,"children":749},{},[750,752,758,760,766],{"type":20,"value":751},"When the release was published (set the first time ",{"type":14,"tag":39,"props":753,"children":755},{"className":754},[],[756],{"type":20,"value":757},"published",{"type":20,"value":759}," flips to ",{"type":14,"tag":39,"props":761,"children":763},{"className":762},[],[764],{"type":20,"value":765},"true",{"type":20,"value":767},"; never overwritten after).",{"type":14,"tag":616,"props":769,"children":770},{},[771,780],{"type":14,"tag":638,"props":772,"children":773},{},[774],{"type":14,"tag":39,"props":775,"children":777},{"className":776},[],[778],{"type":20,"value":779},"releases[].short_summary",{"type":14,"tag":638,"props":781,"children":782},{},[783],{"type":20,"value":784},"One line, good for a toast or badge.",{"type":14,"tag":616,"props":786,"children":787},{},[788,797],{"type":14,"tag":638,"props":789,"children":790},{},[791],{"type":14,"tag":39,"props":792,"children":794},{"className":793},[],[795],{"type":20,"value":796},"releases[].changelog_markdown",{"type":14,"tag":638,"props":798,"children":799},{},[800],{"type":20,"value":801},"The full user-facing changelog, in Markdown.",{"type":14,"tag":616,"props":803,"children":804},{},[805,814],{"type":14,"tag":638,"props":806,"children":807},{},[808],{"type":14,"tag":39,"props":809,"children":811},{"className":810},[],[812],{"type":20,"value":813},"releases[].authored_by",{"type":14,"tag":638,"props":815,"children":816},{},[817,823,825,830],{"type":14,"tag":39,"props":818,"children":820},{"className":819},[],[821],{"type":20,"value":822},"\"human\"",{"type":20,"value":824}," or ",{"type":14,"tag":39,"props":826,"children":828},{"className":827},[],[829],{"type":20,"value":528},{"type":20,"value":831}," — whether a person or Claude (via MCP) wrote the changelog.",{"type":14,"tag":616,"props":833,"children":834},{},[835,844],{"type":14,"tag":638,"props":836,"children":837},{},[838],{"type":14,"tag":39,"props":839,"children":841},{"className":840},[],[842],{"type":20,"value":843},"releases[].service_versions",{"type":14,"tag":638,"props":845,"children":846},{},[847,849,855],{"type":20,"value":848},"Map of ",{"type":14,"tag":39,"props":850,"children":852},{"className":851},[],[853],{"type":20,"value":854},"{service_slug: version}",{"type":20,"value":856}," for the service releases bundled into this project release.",{"type":14,"tag":22,"props":858,"children":859},{},[860,862,868],{"type":20,"value":861},"Releases are ordered newest first, by ",{"type":14,"tag":39,"props":863,"children":865},{"className":864},[],[866],{"type":20,"value":867},"released_at",{"type":20,"value":869}," (falling back to version ordering for\nreleases published at the same time).",{"type":14,"tag":27,"props":871,"children":873},{"id":872},"cors-wildcard-but-simple-requests-only",[874],{"type":20,"value":875},"CORS: wildcard, but simple requests only",{"type":14,"tag":22,"props":877,"children":878},{},[879,881,887,889,894,896,902,904,910,912,918,920,926,927,933],{"type":20,"value":880},"The bucket serves ",{"type":14,"tag":39,"props":882,"children":884},{"className":883},[],[885],{"type":20,"value":886},"Access-Control-Allow-Origin: *",{"type":20,"value":888},", so any origin can read it. The catch:\nGCS's CORS support only answers ",{"type":14,"tag":68,"props":890,"children":891},{},[892],{"type":20,"value":893},"simple requests",{"type":20,"value":895}," — a plain ",{"type":14,"tag":39,"props":897,"children":899},{"className":898},[],[900],{"type":20,"value":901},"GET",{"type":20,"value":903}," with no custom request\nheaders. Send a preflighted request (e.g. add a custom header like ",{"type":14,"tag":39,"props":905,"children":907},{"className":906},[],[908],{"type":20,"value":909},"X-Requested-With",{"type":20,"value":911},") and the\n",{"type":14,"tag":39,"props":913,"children":915},{"className":914},[],[916],{"type":20,"value":917},"OPTIONS",{"type":20,"value":919}," preflight comes back with no CORS headers at all, so the browser blocks the actual\nrequest. In practice this means: fetch it with a bare ",{"type":14,"tag":39,"props":921,"children":923},{"className":922},[],[924],{"type":20,"value":925},"fetch(url)",{"type":20,"value":824},{"type":14,"tag":39,"props":928,"children":930},{"className":929},[],[931],{"type":20,"value":932},"curl",{"type":20,"value":934},", don't add\nheaders, and don't send credentials — you don't need any of that anyway, the feed is fully\npublic.",{"type":14,"tag":27,"props":936,"children":938},{"id":937},"next",[939],{"type":20,"value":940},"Next",{"type":14,"tag":942,"props":943,"children":944},"ul",{},[945,957],{"type":14,"tag":946,"props":947,"children":948},"li",{},[949,955],{"type":14,"tag":100,"props":950,"children":952},{"href":951},"\u002Fdocs\u002Fclients",[953],{"type":20,"value":954},"Open-source clients",{"type":20,"value":956}," — a minimal consumer snippet, and where django-i3version\nfits in.",{"type":14,"tag":946,"props":958,"children":959},{},[960,964,966,971],{"type":14,"tag":100,"props":961,"children":962},{"href":102},[963],{"type":20,"value":105},{"type":20,"value":965}," — how a ",{"type":14,"tag":39,"props":967,"children":969},{"className":968},[],[970],{"type":20,"value":80},{"type":20,"value":972}," gets created and published in the\nfirst place.",{"type":14,"tag":974,"props":975,"children":976},"style",{},[977],{"type":20,"value":978},"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);}",{"title":7,"searchDepth":211,"depth":211,"links":980},[981,982,983,986,987],{"id":29,"depth":211,"text":32},{"id":58,"depth":211,"text":61},{"id":171,"depth":211,"text":174,"children":984},[985],{"id":603,"depth":237,"text":606},{"id":872,"depth":211,"text":875},{"id":937,"depth":211,"text":940},"markdown","content:docs:manifest.md","content","docs\u002Fmanifest.md","docs\u002Fmanifest","md",1784716250633]