{"_id":"@distilled.cloud/iceberg","_rev":"6-d173988f53d0eefe15b9f3d5b6a2238f","name":"@distilled.cloud/iceberg","dist-tags":{"latest":"1.0.0-rc.17"},"versions":{"0.0.0-stage":{"name":"@distilled.cloud/iceberg","version":"0.0.0-stage","_id":"@distilled.cloud/iceberg@0.0.0-stage","stub":true,"maintainers":[{"name":"blankparticle","email":"blankparticle@gmail.com"}],"dist":{"shasum":"d3ff51ecc68922610a8e4226a1579662f022f144","tarball":"https://registry.npmjs.org/@distilled.cloud/iceberg/-/iceberg-0.0.0-stage.tgz","fileCount":2,"integrity":"sha512-/V4caFs11FX1Ketlxxf3gV3Uh5XwxS4TYj34u2toFoRNyyNzd6Yucj1n8ZK41a6qvt/u6zeQnD0vh6J2y+ElZw==","signatures":[{"sig":"MEYCIQD27BdW4m2cSD62quPBEJLH+GR37h7+qMCY7yQ2uQeMywIhAP3EHEbdkHNuR0YFIB4r+8VFeMJeuOQgfM94ddzNhDHs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":346},"_npmUser":{"name":"blankparticle","email":"blankparticle@gmail.com"},"description":"Temporary package placeholder for staged publishing","directories":{}},"0.0.0":{"name":"@distilled.cloud/iceberg","version":"0.0.0","license":"Apache-2.0","_id":"@distilled.cloud/iceberg@0.0.0","maintainers":[{"name":"pear-alchemy","email":"michael@alchemy.run"},{"name":"sam-goodwin","email":"sam@alchemy.run"},{"name":"blankparticle","email":"blankparticle@gmail.com"}],"homepage":"https://github.com/alchemy-run/distilled#readme","bugs":{"url":"https://github.com/alchemy-run/distilled/issues"},"dist":{"shasum":"ea58d3493627cacf6e0b9fc5c43e20db47a3a9dc","tarball":"https://registry.npmjs.org/@distilled.cloud/iceberg/-/iceberg-0.0.0.tgz","fileCount":2,"integrity":"sha512-7SoxyjBvQLzNWFEpdcTX5eq0L1Xt5Rcri1ZJeUILV/E0JrveUyekEUpiX0ChLMFEDV7jhXHjZOk+oAiAgUAk2w==","signatures":[{"sig":"MEQCIBEWCMyR+/GUU+PO+yDtfptlBeCK62eb1BLJ/fmQvBjJAiAx6suSrmq8gp+Mpas441BbVWkWY4UywdZK/W5FT3btBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC4jaCTQSmTlo1+1uyjAQsG3iYt+lNjD7GOAF41IFBKZQIgRZQ9yTSCQ2Z+A+USeK6r8wZkVbuG21kH49Icl0uUD1A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":728},"_npmUser":{"name":"blankparticle","email":"blankparticle@gmail.com"},"repository":{"url":"git+https://github.com/alchemy-run/distilled.git","type":"git","directory":"packages/iceberg"},"_npmVersion":"11.19.0","description":"🐣 This package name has been claimed with [fledgling](https://github.com/dmno-dev/fledgling) for [https://github.com/alchemy-run/distilled](https://github.com/alchemy-run/distilled), and a real release will land here soon.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/iceberg_0.0.0_1791750011281_0.4905192156543976","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.14":{"name":"@distilled.cloud/iceberg","version":"1.0.0-rc.14","license":"Apache-2.0","_id":"@distilled.cloud/iceberg@1.0.0-rc.14","maintainers":[{"name":"pear-alchemy","email":"michael@alchemy.run"},{"name":"sam-goodwin","email":"sam@alchemy.run"},{"name":"blankparticle","email":"blankparticle@gmail.com"}],"dist":{"shasum":"1e4f15e832acd912660d3fd04aceffebf2e1db86","tarball":"https://registry.npmjs.org/@distilled.cloud/iceberg/-/iceberg-1.0.0-rc.14.tgz","fileCount":53,"integrity":"sha512-6BmQnDzeNFG9FkRafGLQpZLdd6AH2t5S/NfWD6TdcJK0h+5ZZ6F9DDXUaxD8onbozN+EgDls9X6+wHqsGGbyOQ==","signatures":[{"sig":"MEUCIQCYq1ju1J3IBG0hjqNj71zmm6EU9WPw0/wz2jAYW4rcOAIgR6kVEFeX1sF43wQH4xGiXsjIbESEFmFHODHeTu4gorg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDTi3iaXYsA9Fc1kXlnSDsWcZh1TqhPvDmEX1ysQa4gKAiEA53m6QTWSeKHZnd3jBOCoo9z7NYCyFbzJOjeKrR3Jv9U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@distilled.cloud%2ficeberg@1.0.0-rc.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":728736},"type":"module","module":"src/index.ts","exports":{".":{"bun":"./src/index.ts","types":"./lib/index.d.ts","worker":"./src/index.ts","default":"./lib/index.js"},"./*":{"bun":"./src/services/*.ts","types":"./lib/services/*.d.ts","worker":"./src/services/*.ts","default":"./lib/services/*.js"},"./Errors":{"bun":"./src/errors.ts","types":"./lib/errors.d.ts","worker":"./src/errors.ts","default":"./lib/errors.js"},"./Protocol":{"bun":"./src/protocol.ts","types":"./lib/protocol.d.ts","worker":"./src/protocol.ts","default":"./lib/protocol.js"},"./Pagination":{"bun":"./src/pagination.ts","types":"./lib/pagination.d.ts","worker":"./src/pagination.ts","default":"./lib/pagination.js"},"./Credentials":{"bun":"./src/credentials.ts","types":"./lib/credentials.d.ts","worker":"./src/credentials.ts","default":"./lib/credentials.js"}},"scripts":{"build":"tsc -b","convert":"node --conditions=bun scripts/convert.ts","generate":"node --conditions=bun scripts/generate.ts","typecheck":"tsc -p tsconfig.json","specs:fetch":"git submodule update --force --init --depth=1 specs/spec-mirror-iceberg","specs:update":"git submodule update --remote --force --depth=1 specs/spec-mirror-iceberg"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"4fb80ed3-ea92-47de-9390-ddc64518198a"}},"distilled":{"generatedAt":"2026-10-06","specUpdatedAt":"2026-10-07"},"repository":{"url":"https://github.com/alchemy-run/distilled","type":"git","directory":"packages/iceberg"},"directories":{},"sideEffects":false,"dependencies":{"@distilled.cloud/core":"1.0.0-rc.14"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.9.0","@types/node":"26.2.0"},"peerDependencies":{"effect":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/iceberg_1.0.0-rc.14_1791830160483_0.37432632649186703","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.15":{"name":"@distilled.cloud/iceberg","version":"1.0.0-rc.15","license":"Apache-2.0","_id":"@distilled.cloud/iceberg@1.0.0-rc.15","maintainers":[{"name":"pear-alchemy","email":"michael@alchemy.run"},{"name":"sam-goodwin","email":"sam@alchemy.run"},{"name":"blankparticle","email":"blankparticle@gmail.com"}],"dist":{"shasum":"72c47de0cefbfad34f48364e2e9415bd3ebd5349","tarball":"https://registry.npmjs.org/@distilled.cloud/iceberg/-/iceberg-1.0.0-rc.15.tgz","fileCount":53,"integrity":"sha512-qNLBVGyuIP/OdgvRht41u/QPOEvJ2kUntC7++bL6YGPbB6TPbDDPd72xeP/gXogIgLsQj8RP1gETjJCQREtl2Q==","signatures":[{"sig":"MEQCIE/6azM9nNgLpbNPdKgp64kcd+puD5nL9aAXvhCHO5WuAiAFg9VyWP4jdenTsfJ2IeHGHNUFCCYM5EZilAaw/z0HmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD40kaLwr72y5v0JOvph+xt2LuhnmgQGPYSxjR3i8HlYgIgZ0/WvxSuRdoQ9N3qCdtvpXpqZZozuFHljtfUNKQLDbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@distilled.cloud%2ficeberg@1.0.0-rc.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":728736},"type":"module","module":"src/index.ts","exports":{".":{"bun":"./src/index.ts","types":"./lib/index.d.ts","worker":"./src/index.ts","default":"./lib/index.js"},"./*":{"bun":"./src/services/*.ts","types":"./lib/services/*.d.ts","worker":"./src/services/*.ts","default":"./lib/services/*.js"},"./Errors":{"bun":"./src/errors.ts","types":"./lib/errors.d.ts","worker":"./src/errors.ts","default":"./lib/errors.js"},"./Protocol":{"bun":"./src/protocol.ts","types":"./lib/protocol.d.ts","worker":"./src/protocol.ts","default":"./lib/protocol.js"},"./Pagination":{"bun":"./src/pagination.ts","types":"./lib/pagination.d.ts","worker":"./src/pagination.ts","default":"./lib/pagination.js"},"./Credentials":{"bun":"./src/credentials.ts","types":"./lib/credentials.d.ts","worker":"./src/credentials.ts","default":"./lib/credentials.js"}},"scripts":{"build":"tsc -b","convert":"node --conditions=bun scripts/convert.ts","generate":"node --conditions=bun scripts/generate.ts","typecheck":"tsc -p tsconfig.json","specs:fetch":"git submodule update --force --init --depth=1 specs/spec-mirror-iceberg","specs:update":"git submodule update --remote --force --depth=1 specs/spec-mirror-iceberg"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"4fb80ed3-ea92-47de-9390-ddc64518198a"}},"distilled":{"generatedAt":"2026-10-06","specUpdatedAt":"2026-10-07"},"repository":{"url":"https://github.com/alchemy-run/distilled","type":"git","directory":"packages/iceberg"},"directories":{},"sideEffects":false,"dependencies":{"@distilled.cloud/core":"1.0.0-rc.15"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.9.0","@types/node":"26.2.0"},"peerDependencies":{"effect":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/iceberg_1.0.0-rc.15_1791833548531_0.8675196910827094","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.16":{"name":"@distilled.cloud/iceberg","version":"1.0.0-rc.16","license":"Apache-2.0","_id":"@distilled.cloud/iceberg@1.0.0-rc.16","maintainers":[{"name":"pear-alchemy","email":"michael@alchemy.run"},{"name":"sam-goodwin","email":"sam@alchemy.run"},{"name":"blankparticle","email":"blankparticle@gmail.com"}],"dist":{"shasum":"6682df09f015aa0fe3f174ca0eec663f2e537e83","tarball":"https://registry.npmjs.org/@distilled.cloud/iceberg/-/iceberg-1.0.0-rc.16.tgz","fileCount":47,"integrity":"sha512-NaX6QLBfYVmYN+CEPtu72qM8bnvSB7BSxIZS7eVkeOTaOPCO1p3tqmoz+LwHXS3N9p0/ZASlsPAJCLf+3fXw9w==","signatures":[{"sig":"MEUCICuZwO3dgrK3PGtiFvDQ6HTsNBdjJiHaBOimXwnxQ556AiEA8Uuy5o27/18aEh4spbGRm7bUMid5XTBkdyvhyDOH3zo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC/tRvdITxfooewTZOVuSeoLCD7BO8wgVGrDyYJGHcnGQIgGIXeT0tKD7AYho5IsnKlMIUyQOunqF11T/I7spk40qk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@distilled.cloud%2ficeberg@1.0.0-rc.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":467727},"type":"module","module":"src/index.ts","exports":{".":{"bun":"./src/index.ts","types":"./lib/index.d.ts","module":"./lib/index.full.js","worker":"./src/index.ts","default":"./lib/index.full.js","module-sync":"./lib/index.js"},"./*":{"bun":"./src/services/*.ts","types":"./lib/services/*.d.ts","module":"./lib/services.full/*.js","worker":"./src/services/*.ts","default":"./lib/services.full/*.js","module-sync":"./lib/services/*.js"},"./Errors":{"bun":"./src/errors.ts","types":"./lib/errors.d.ts","worker":"./src/errors.ts","default":"./lib/errors.js"},"./Protocol":{"bun":"./src/protocol.ts","types":"./lib/protocol.d.ts","worker":"./src/protocol.ts","default":"./lib/protocol.js"},"./Pagination":{"bun":"./src/pagination.ts","types":"./lib/pagination.d.ts","worker":"./src/pagination.ts","default":"./lib/pagination.js"},"./Credentials":{"bun":"./src/credentials.ts","types":"./lib/credentials.d.ts","worker":"./src/credentials.ts","default":"./lib/credentials.js"}},"scripts":{"build":"tsrs -b","convert":"node --conditions=bun scripts/convert.ts","generate":"node --conditions=bun scripts/generate.ts","typecheck":"tsrs -p tsconfig.json","specs:fetch":"git submodule update --force --init --depth=1 specs/spec-mirror-iceberg","specs:update":"git submodule update --remote --force --depth=1 specs/spec-mirror-iceberg"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"4fb80ed3-ea92-47de-9390-ddc64518198a"}},"distilled":{"generatedAt":"2026-10-09","specUpdatedAt":"2026-10-07"},"repository":{"url":"https://github.com/alchemy-run/distilled","type":"git","directory":"packages/iceberg"},"directories":{},"sideEffects":false,"dependencies":{"@distilled.cloud/core":"1.0.0-rc.16"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.9.1","@types/node":"26.6.5"},"peerDependencies":{"effect":"^4.0.5"},"_npmOperationalInternal":{"tmp":"tmp/iceberg_1.0.0-rc.16_1792709185275_0.808098813161612","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.17":{"_id":"@distilled.cloud/iceberg@1.0.0-rc.17","dist":{"shasum":"ed83cc8110b05af4aa39ee78f32d86558eb96648","tarball":"https://registry.npmjs.org/@distilled.cloud/iceberg/-/iceberg-1.0.0-rc.17.tgz","fileCount":48,"integrity":"sha512-hO9Kqc91dq7SLBCagxlr2RDSTbp7/urqjfxNitSNaaOyKIsUr85llsADT/rS6H85ezOsGf2vSP5y1Qk0kQWLCg==","signatures":[{"sig":"MEUCIEo1Kw0Uhp0M+A/hDGZNZiDDfZmuJ08XPA71AK2Iu8qLAiEAiGq7EhGzR2J+DOalmL02HQU0maLu1F4qqBR+9SpMdx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB++CFcQRBHs2x+oFWgEbOed+J4RBO2JVF7BmZV0t04rAiEAjZNSErrnlMTbREkWjPFjMHfvfkirX+QjvGOeFYhwmEs="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@distilled.cloud%2ficeberg@1.0.0-rc.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":477587},"name":"@distilled.cloud/iceberg","type":"module","module":"src/index.ts","exports":{".":{"bun":"./src/index.ts","types":"./lib/index.d.ts","worker":"./src/index.ts","default":"./lib/index.js","distilled-lazy":"./lib/index.lazy.js"},"./*":{"bun":"./src/services/*.ts","types":"./lib/services/*.d.ts","worker":"./src/services/*.ts","default":"./lib/services/*.js","distilled-lazy":"./lib/services.lazy/*.js"},"./Errors":{"bun":"./src/errors.ts","types":"./lib/errors.d.ts","worker":"./src/errors.ts","default":"./lib/errors.js"},"./Protocol":{"bun":"./src/protocol.ts","types":"./lib/protocol.d.ts","worker":"./src/protocol.ts","default":"./lib/protocol.js"},"./Pagination":{"bun":"./src/pagination.ts","types":"./lib/pagination.d.ts","worker":"./src/pagination.ts","default":"./lib/pagination.js"},"./Credentials":{"bun":"./src/credentials.ts","types":"./lib/credentials.d.ts","worker":"./src/credentials.ts","default":"./lib/credentials.js"}},"license":"Apache-2.0","scripts":{"build":"tsrs -b","convert":"node --conditions=bun scripts/convert.ts","generate":"node --conditions=bun scripts/generate.ts","typecheck":"tsrs -p tsconfig.json","specs:fetch":"git submodule update --force --init --depth=1 specs/spec-mirror-iceberg","specs:update":"git submodule update --remote --force --depth=1 specs/spec-mirror-iceberg"},"version":"1.0.0-rc.17","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"4fb80ed3-ea92-47de-9390-ddc64518198a"}},"distilled":{"generatedAt":"2026-10-09","specUpdatedAt":"2026-10-07"},"repository":{"url":"https://github.com/alchemy-run/distilled","type":"git","directory":"packages/iceberg"},"directories":{},"maintainers":[{"name":"pear-alchemy","email":"michael@alchemy.run"},{"name":"sam-goodwin","email":"sam@alchemy.run"},{"name":"blankparticle","email":"blankparticle@gmail.com"}],"sideEffects":false,"dependencies":{"@distilled.cloud/core":"1.0.0-rc.17"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.9.1","@types/node":"26.6.5"},"peerDependencies":{"effect":"^4.0.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/iceberg_1.0.0-rc.17_1792796828839_0.5134738070846321"}}},"time":{"created":"2026-10-11T20:19:15.792Z","modified":"2026-10-23T23:07:09.459Z","0.0.0-stage":"2026-10-11T20:19:15.792Z","0.0.0":"2026-10-11T20:20:11.355Z","1.0.0-rc.14":"2026-10-12T18:36:00.601Z","1.0.0-rc.15":"2026-10-12T19:32:28.620Z","1.0.0-rc.16":"2026-10-22T22:46:25.422Z","1.0.0-rc.17":"2026-10-23T23:07:08.999Z"},"license":"Apache-2.0","repository":{"url":"https://github.com/alchemy-run/distilled","type":"git","directory":"packages/iceberg"},"maintainers":[{"name":"pear-alchemy","email":"michael@alchemy.run"},{"name":"sam-goodwin","email":"sam@alchemy.run"},{"name":"blankparticle","email":"blankparticle@gmail.com"}],"readme":"# @distilled.cloud/iceberg\n\nEffect-native SDK for the [Apache Iceberg REST Catalog API](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml), generated from the Apache Iceberg OpenAPI spec. One client for every Iceberg REST catalog: Cloudflare Basin Catalog, Apache Polaris, Nessie, Unity Catalog, the Iceberg endpoints of AWS Glue and S3 Tables, and the reference REST catalog.\n\n## Installation\n\n```bash\nnpm install @distilled.cloud/iceberg effect\n```\n\n## Quick start\n\n```ts\nimport { Effect, Layer } from \"effect\";\nimport * as FetchHttpClient from \"effect/http/FetchHttpClient\";\nimport * as Iceberg from \"@distilled.cloud/iceberg\";\n\nconst program = Effect.gen(function* () {\n  yield* Iceberg.createNamespace({ namespace: [\"analytics\"] });\n\n  const table = yield* Iceberg.createTable({\n    namespace: \"analytics\",\n    name: \"page_views\",\n    schema: {\n      type: \"struct\",\n      fields: [\n        { id: 1, name: \"user_id\", type: \"string\", required: true },\n        { id: 2, name: \"path\", type: \"string\", required: true },\n        { id: 3, name: \"at\", type: \"timestamptz\", required: true },\n      ],\n    },\n  });\n\n  return table.metadata_location;\n});\n\nconst Live = Layer.mergeAll(\n  FetchHttpClient.layer,\n  Iceberg.CredentialsFromEnv,\n  Iceberg.IcebergProtocol,\n);\n\nprogram.pipe(Effect.provide(Live), Effect.runPromise);\n```\n\nOperations are exported at the package root: `createNamespace`, `listNamespaces`, `createTable`, `loadTable`, `updateTable`, `commitTransaction`, `dropTable`, views, scan planning, and the rest of the spec's 34 routes. List operations stream every page with `.pages()` and `.items()`:\n\n```ts\nconst tables = yield* Iceberg.listTables.items({ namespace: \"analytics\" }).pipe(Stream.runCollect);\n```\n\n## Errors\n\nEach operation's error channel names the exceptions the spec documents for it, matched on the response's `error.type`:\n\n```ts\nyield* Iceberg.loadTable({ namespace: \"analytics\", table: \"page_views\" }).pipe(\n  Effect.catchTag(\"NoSuchTableException\", () => Effect.succeed(undefined)),\n);\n```\n\nA commit (`updateTable`, `commitTransaction`, `replaceView`) answered with 500, 502 or 504 fails with `CommitStateUnknownException`: the commit may or may not have been applied, so it is never retried automatically. Reload the table before deciding what to do.\n\n## Auth and catalog configuration\n\n| Variable | Required | Meaning |\n| --- | --- | --- |\n| `ICEBERG_CATALOG_URI` | yes | The catalog's REST endpoint, without `/v1`. |\n| `ICEBERG_TOKEN` | no | Sent as `Authorization: Bearer <token>`. |\n| `ICEBERG_PREFIX` | no | The warehouse prefix every catalog route is scoped to. |\n\nCatalogs scope their routes to a warehouse prefix that they return from `GET /v1/config`. `fromCatalogConfig` resolves it from a warehouse name, the way Iceberg clients do. For Cloudflare Basin Catalog:\n\n```ts\nconst Catalog = Iceberg.fromCatalogConfig({\n  uri: \"https://catalog.cloudflarestorage.com/<account_id>/<bucket>\",\n  warehouse: \"<account_id>_<bucket>\",\n  token: Redacted.make(process.env.CLOUDFLARE_API_TOKEN!),\n});\n\nprogram.pipe(\n  Effect.provide(Iceberg.IcebergProtocol),\n  Effect.provide(Catalog),\n  Effect.provide(FetchHttpClient.layer),\n  Effect.runPromise,\n);\n```\n\nMultipart namespaces are one string in route parameters, with parts separated by the unit separator (`\"accounting\\u001ftax\"`), and an array in request bodies (`[\"accounting\", \"tax\"]`).\n","readmeFilename":""}