changelog: billable usage and budget alerts now in product sidebars#31186
changelog: billable usage and budget alerts now in product sidebars#31186iglesiasbrandon wants to merge 3 commits into
Conversation
|
This pull request requires reviews from CODEOWNERS as it changes files that match the following patterns:
|
81bf047 to
2b1c09f
Compare
There was a problem hiding this comment.
2 suggestions and 1 comment posted.
- HIGH Scope creep — the Durable Objects jurisdiction changes (new changelog entry, id.mdx, and data-location.mdx) are unrelated to the billing sidebar widget described in the PR title. Move them to a separate PR, or update the title and description to cover both features.
- MEDIUM id.mdx is missing a TypeScript tab in the jurisdiction examples.
- LOW fundamentals changelog: "Usage based billing" should be hyphenated.
| @@ -0,0 +1,30 @@ | |||
| --- | |||
There was a problem hiding this comment.
This Durable Objects changelog entry and the related id.mdx / data-location.mdx changes are outside the scope of the billing sidebar widget described in the PR title. Move to a separate PR or update the title and description to cover both features.
| <Tabs> | ||
|
|
||
| <TabItem label="JavaScript" icon="seti:javascript"> | ||
|
|
||
| ```js | ||
| const plainId = env.MY_DURABLE_OBJECT.idFromName("foo"); | ||
| const euId = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo"); | ||
| console.assert(plainId.jurisdiction === undefined, "no jurisdiction set"); | ||
| console.assert(euId.jurisdiction === "eu", "jurisdiction matches namespace"); | ||
| ``` | ||
|
|
||
| </TabItem> | ||
|
|
||
| <TabItem label="Python" icon="seti:python"> | ||
|
|
||
| ```python | ||
| plain_id = env.MY_DURABLE_OBJECT.idFromName("foo") | ||
| eu_id = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo") | ||
| assert plain_id.jurisdiction is None, "no jurisdiction set" | ||
| assert eu_id.jurisdiction == "eu", "jurisdiction matches namespace" | ||
| ``` | ||
|
|
||
| </TabItem> | ||
|
|
||
| </Tabs> |
There was a problem hiding this comment.
Add TypeScript tab for consistency with the name section above:
| <Tabs> | |
| <TabItem label="JavaScript" icon="seti:javascript"> | |
| ```js | |
| const plainId = env.MY_DURABLE_OBJECT.idFromName("foo"); | |
| const euId = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo"); | |
| console.assert(plainId.jurisdiction === undefined, "no jurisdiction set"); | |
| console.assert(euId.jurisdiction === "eu", "jurisdiction matches namespace"); | |
| ``` | |
| </TabItem> | |
| <TabItem label="Python" icon="seti:python"> | |
| ```python | |
| plain_id = env.MY_DURABLE_OBJECT.idFromName("foo") | |
| eu_id = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo") | |
| assert plain_id.jurisdiction is None, "no jurisdiction set" | |
| assert eu_id.jurisdiction == "eu", "jurisdiction matches namespace" | |
| ``` | |
| </TabItem> | |
| </Tabs> | |
| <Tabs> | |
| <TabItem label="JavaScript" icon="seti:javascript"> | |
| ```js | |
| const plainId = env.MY_DURABLE_OBJECT.idFromName("foo"); | |
| const euId = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo"); | |
| console.assert(plainId.jurisdiction === undefined, "no jurisdiction set"); | |
| console.assert(euId.jurisdiction === "eu", "jurisdiction matches namespace"); |
const plainId: DurableObjectId = env.MY_DURABLE_OBJECT.idFromName("foo");
const euId: DurableObjectId = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo");
console.assert(plainId.jurisdiction === undefined, "no jurisdiction set");
console.assert(euId.jurisdiction === "eu", "jurisdiction matches namespace");plain_id = env.MY_DURABLE_OBJECT.idFromName("foo")
eu_id = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo")
assert plain_id.jurisdiction is None, "no jurisdiction set"
assert eu_id.jurisdiction == "eu", "jurisdiction matches namespace"|
Review posted on PR #31186. Applied labels: Posted: 2 inline suggestions and 1 comment. Issues flagged:
Pre-existing note: |
|
Preview URL: https://153c93a0.preview.developers.cloudflare.com Files with changes (up to 15) |
…roduct-sidebar.mdx Co-authored-by: ask-bonk[bot] <249159057+ask-bonk[bot]@users.noreply.github.com>
|
|
||
| Pay-as-you-go customers can now view billable usage and create [budget alerts](/changelog/post/2026-04-13-billable-usage-dashboard-and-budget-alerts/) directly from the product overview pages for [Workers & Pages](/workers/), [D1](/d1/), [R2](/r2/), [Workers KV](/kv/), [Queues](/queues/), [Vectorize](/vectorize/), [Durable Objects](/durable-objects/), and [Containers](/containers/). A new sidebar widget shows current-period spend and the billing cycle date range, alongside a button to create a budget alert. | ||
|
|
||
| The widget pulls from the same data as the [Billable Usage dashboard](/changelog/post/2026-04-13-billable-usage-dashboard-and-budget-alerts/) and aligns to your billing cycle (or the current day on Free plans), so the numbers match your invoice. Enterprise contract accounts are not supported. |
There was a problem hiding this comment.
I am pretty sure enterprise is planned, maybe this could say "not supported yet"?
Summary
Adds a changelog entry for the billable usage sidebar widget now shipping across 8 Developer Platform product pages (Workers & Pages, D1, R2, Workers KV, Queues, Vectorize, Durable Objects, and Containers). Pay-as-you-go customers can view current-period spend and create budget alerts without leaving the product they are working in.
Checklist
2026-06-04) with Ashley Peacock before publishing