Skip to content

ci: release - #2350

Merged
ascorbic merged 1 commit into
mainfrom
changeset-release/main
Aug 11, 2026
Merged

ci: release#2350
ascorbic merged 1 commit into
mainfrom
changeset-release/main

Conversation

@emdashbot

@emdashbot emdashbot Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@emdash-cms/admin@0.33.0

Minor Changes

  • #2267 e8048e4 Thanks @DavidPivert! - Adds an explicit sidebar order for collections. Drag the rows on the Content Types screen, or set sortOrder in a seed file, and the admin sidebar follows that order instead of sorting alphabetically by slug. Collections without a sortOrder keep the alphabetical order and are listed after the ordered ones, so existing sites look the same until someone reorders. reorder is now a reserved collection slug.

  • #2264 741c40c Thanks @DavidPivert! - Adds a hidden flag to collections that omits their auto-generated entry from the admin sidebar. Hidden collections keep working everywhere else — REST API, MCP, plugin hooks, and their editor at /_emdash/admin/content/<slug> — so a plugin that owns a collection end to end can point editors at its own admin UI instead of a raw CRUD list. Set it in a seed file ("hidden": true) or via the schema API.

  • #2353 ea4c39b Thanks @MA2153! - Adds manual ordering for taxonomy terms. Move terms up and down from the Taxonomies screen, and term listings — getTerms() and the terms REST endpoint — return them in that order. The terms attached to a single entry are still listed alphabetically.

    Existing terms keep the order they display in today, now stored explicitly instead of derived from their labels. Terms added afterwards go to the end of their sibling group rather than slotting in alphabetically — if you want a taxonomy alphabetical, order it that way once and it stays.

    A term's position is shared by all of its translations, so ordering a taxonomy in one locale orders it everywhere. On upgrade that means each taxonomy keeps the alphabetical order of the locale its terms were first written in, and other locales are re-sorted to match; reorder once from the Taxonomies screen if you want something different. Sites that need a genuinely different order per language should use separate taxonomies.

    Also fixes moving a term to a new parent only taking effect in the locale you moved it in, which left the term nested in that locale and still at the top level in the others. Moving a term now moves it in every locale, and terms already split this way are repaired on upgrade.

Patch Changes

  • #2363 6215e93 Thanks @danielmlr! - Fixes the publish button not appearing after an autosave on sites without i18n configured. The edit was saved, but the editor kept showing the entry as fully published until a reload.

  • #2366 28b17fd Thanks @edrpls! - Fixes silent save failures when creating content in the admin: a rejected create — for example a slug that already exists in the collection — now shows a "Failed to save" toast with the server's message instead of doing nothing.

  • #2258 d9b76be Thanks @thefrana! - Adds Czech (Čeština) to the admin UI. Select it from the language picker on the
    login page or in Settings.

  • #2348 640da63 Thanks @khoinguyenpham04! - Fixes numbered lists restarting at 1 after intervening content blocks in the editor and rendered pages.

  • #2301 e61cb63 Thanks @ankit-fastcurveservices! - Enables Hindi (हिन्दी) locale in the admin UI

  • #2401 6e47033 Thanks @danielmlr! - Fixes the status badge and status filter labeling published content "Publish" instead of "Published". Existing translations of "Published" now apply there too.

  • #2406 1cf2811 Thanks @ascorbic! - Fixes the redirects screen so all redirects can be loaded beyond the first 100 results.

  • #2236 2400a3e Thanks @bimsonz! - Shows the derived title and description as placeholders in the SEO panel. getSeoMeta already falls back to an entry's own data.title and data.excerpt when the panel is empty, but the panel gave no sign of it, so empty inputs read as "unset". Editors either retyped the page title into the SEO title or concluded the page had no SEO at all. The SEO Title and Meta Description fields now show the value that will actually be used, so an empty field reads as inheriting it. No change to the generated meta.

  • Updated dependencies []:

    • @emdash-cms/blocks@0.33.0

@emdash-cms/cloudflare@0.33.0

Minor Changes

  • #2353 ea4c39b Thanks @MA2153! - Adds manual ordering for taxonomy terms. Move terms up and down from the Taxonomies screen, and term listings — getTerms() and the terms REST endpoint — return them in that order. The terms attached to a single entry are still listed alphabetically.

    Existing terms keep the order they display in today, now stored explicitly instead of derived from their labels. Terms added afterwards go to the end of their sibling group rather than slotting in alphabetically — if you want a taxonomy alphabetical, order it that way once and it stays.

    A term's position is shared by all of its translations, so ordering a taxonomy in one locale orders it everywhere. On upgrade that means each taxonomy keeps the alphabetical order of the locale its terms were first written in, and other locales are re-sorted to match; reorder once from the Taxonomies screen if you want something different. Sites that need a genuinely different order per language should use separate taxonomies.

    Also fixes moving a term to a new parent only taking effect in the locale you moved it in, which left the term nested in that locale and still at the top level in the others. Moving a term now moves it in every locale, and terms already split this way are repaired on upgrade.

Patch Changes

  • #2277 51cbe2e Thanks @scottbuscemi! - Deprecates cloudflareCache() (legacy Cache API + zone REST purge). It now emits a one-time console warning and is marked @deprecated in types. New sites should use native Workers Caching ("cache": { "enabled": true } in wrangler plus cacheCloudflare() from @astrojs/cloudflare/cache) and purge with cache.purge() — no zone ID or Cache Purge API token.

  • #2280 f586100 Thanks @scottbuscemi! - Fixes anonymous public pages reseeding edge/object caches with stale Hyperdrive query results right after content publishes. When cachedBinding and a distributed Object Cache are configured, public reads across Worker isolates prefer the uncached Hyperdrive binding for a short window after content writes (default 60s, overridable via preferUncachedAfterWriteMs to match your Hyperdrive max_age).

  • Updated dependencies [85dd99d, e8048e4, 534f238, f6385da, 72660da, 969c6cb, 0c3af01, 640da63, e7c445c, ef78aa1, 0237678, 741c40c, e07f0c8, 425e7c0, 7099d13, f586100, 1dd7f13, 447647d, aec4fa1, ea4c39b, 8040e27]:

    • emdash@0.33.0

emdash@0.33.0

Minor Changes

  • #2267 e8048e4 Thanks @DavidPivert! - Adds an explicit sidebar order for collections. Drag the rows on the Content Types screen, or set sortOrder in a seed file, and the admin sidebar follows that order instead of sorting alphabetically by slug. Collections without a sortOrder keep the alphabetical order and are listed after the ordered ones, so existing sites look the same until someone reorders. reorder is now a reserved collection slug.

  • #2044 534f238 Thanks @scottbuscemi! - Adds emdash/ui/comments for Comments and CommentForm so their CSS only loads on pages that import them. Importing from emdash/ui still works but is deprecated and will be removed in 1.0 — prefer import { Comments, CommentForm } from "emdash/ui/comments".

  • #2264 741c40c Thanks @DavidPivert! - Adds a hidden flag to collections that omits their auto-generated entry from the admin sidebar. Hidden collections keep working everywhere else — REST API, MCP, plugin hooks, and their editor at /_emdash/admin/content/<slug> — so a plugin that owns a collection end to end can point editors at its own admin UI instead of a raw CRUD list. Set it in a seed file ("hidden": true) or via the schema API.

  • #2353 ea4c39b Thanks @MA2153! - Adds manual ordering for taxonomy terms. Move terms up and down from the Taxonomies screen, and term listings — getTerms() and the terms REST endpoint — return them in that order. The terms attached to a single entry are still listed alphabetically.

    Existing terms keep the order they display in today, now stored explicitly instead of derived from their labels. Terms added afterwards go to the end of their sibling group rather than slotting in alphabetically — if you want a taxonomy alphabetical, order it that way once and it stays.

    A term's position is shared by all of its translations, so ordering a taxonomy in one locale orders it everywhere. On upgrade that means each taxonomy keeps the alphabetical order of the locale its terms were first written in, and other locales are re-sorted to match; reorder once from the Taxonomies screen if you want something different. Sites that need a genuinely different order per language should use separate taxonomies.

    Also fixes moving a term to a new parent only taking effect in the locale you moved it in, which left the term nested in that locale and still at the top level in the others. Moving a term now moves it in every locale, and terms already split this way are repaired on upgrade.

Patch Changes

  • #2304 85dd99d Thanks @edrpls! - Fixes sites that don't use bylines paying dead byline lookup queries on every content read. When the bylines table is empty, entries with an author no longer send hydration down the byline query path — the folded result is served directly, removing the wasted round trips from anonymous page renders.

  • #2405 f6385da Thanks @ascorbic! - Deprecates emdash dev and hides it from CLI help. Existing invocations still work, but now warn you to use the project's dev script, such as pnpm dev, or run astro dev directly.

  • #2349 72660da Thanks @khoinguyenpham04! - Fixes scheduled content appearing publicly before its staged slug and content are atomically published.

  • #2407 969c6cb Thanks @ascorbic! - Fixes scheduled maintenance reading the entire revision history on every cron invocation.

  • #2409 0c3af01 Thanks @ascorbic! - Fixes Hyperdrive requests leaving request-scoped pool teardown pending when background layout prefetch outlives the response.

  • #2348 640da63 Thanks @khoinguyenpham04! - Fixes numbered lists restarting at 1 after intervening content blocks in the editor and rendered pages.

  • #2257 e7c445c Thanks @mvanhorn! - Adds per-collection search tokenizers so multilingual content can use trigram or non-stemming Unicode search.

  • #2370 ef78aa1 Thanks @danielmlr! - Fixes outbound email links (magic link, invites, signup confirmation, account recovery, comment notifications) ignoring the configured siteUrl. The configured origin — siteUrl in the integration options or the EMDASH_SITE_URL/SITE_URL environment variables — now takes precedence over the origin stored during setup, so a site set up on a temporary domain no longer needs a manual database edit to correct its email links.

  • #2408 0237678 Thanks @ascorbic! - Fixes redirect changes remaining stale across Cloudflare Worker isolates by refreshing cached rules within 30 seconds.

  • #2306 e07f0c8 Thanks @edrpls! - Fixes media-usage tracking rows accumulating without bound. Superseded and abandoned usage generations are now garbage-collected by the periodic maintenance sweep, so the usage table no longer grows with every content save.

  • #2163 425e7c0 Thanks @dchaudhari7177! - Plugin API routes with an input schema now work over GET, HEAD, and DELETE. These methods carry no request body, so request.json() resolved to undefined and every such request failed validation. Route input is now parsed from the URL query string for bodyless methods (repeated keys become arrays) while POST/PUT/PATCH continue to parse the JSON body.

  • #2308 7099d13 Thanks @edrpls! - Fixes plugin-declared storage indexes never being created. Indexes declared in a plugin manifest's storage section are now materialized on marketplace/registry install and update, dropped on uninstall, and synced for configured plugins on the scheduler tick — so plugin storage queries (like the audit-log dashboard widgets) use an index instead of scanning the whole table. The index shape also changed to a composite that SQLite actually uses on D1, where table statistics are never collected.

  • #2280 f586100 Thanks @scottbuscemi! - Fixes anonymous public pages reseeding edge/object caches with stale Hyperdrive query results right after content publishes. When cachedBinding and a distributed Object Cache are configured, public reads across Worker isolates prefer the uncached Hyperdrive binding for a short window after content writes (default 60s, overridable via preferUncachedAfterWriteMs to match your Hyperdrive max_age).

  • #2251 1dd7f13 Thanks @dchaudhari7177! - Normalize media values inside repeater image sub-fields. A bare media id posted via the REST API into a repeater sub-field is now normalized into a full MediaValue (the same treatment top-level image/file fields already get), instead of being stored verbatim and rendered as "Image not found" in the admin.

  • #2214 447647d Thanks @marcusbellamyshaw-cell! - Fixes public routes on sandboxed: [] (config-declared) plugins requiring authentication regardless of the plugin's own public: true declaration. Declare routes (and optionally hooks) on the plugin's descriptor to have them honored, the same way adminPages/capabilities already are.

  • #2315 aec4fa1 Thanks @edrpls! - Fixes renaming a translation taking its canonical page offline. When two locale variants share a slug, renaming either one created a 301 away from a URL the other still serves, making the live page unreachable. Slug-change redirects are now skipped when another entry still holds the old slug.

  • #2328 8040e27 Thanks @MA2153! - Fixes translation lookups reading every non-deleted row of a content table. Content tables now carry (translation_group, locale) and (deleted_at, translation_group, locale) indexes, replacing the single-column translation_group one, so fetching an entry's translations — one entry's, a whole page's, or a menu link's target — seeks straight to the group instead of scanning. The improvement is largest on big collections and on D1, where the query planner has no statistics to fall back on.

  • Updated dependencies [6215e93, e8048e4, 28b17fd, d9b76be, 640da63, 741c40c, e61cb63, 6e47033, 1cf2811, 2400a3e, ea4c39b]:

    • @emdash-cms/admin@0.33.0
    • @emdash-cms/auth@0.33.0
    • @emdash-cms/gutenberg-to-portable-text@0.33.0

@emdash-cms/sandbox-workerd@0.4.0

Minor Changes

  • #2353 ea4c39b Thanks @MA2153! - Adds manual ordering for taxonomy terms. Move terms up and down from the Taxonomies screen, and term listings — getTerms() and the terms REST endpoint — return them in that order. The terms attached to a single entry are still listed alphabetically.

    Existing terms keep the order they display in today, now stored explicitly instead of derived from their labels. Terms added afterwards go to the end of their sibling group rather than slotting in alphabetically — if you want a taxonomy alphabetical, order it that way once and it stays.

    A term's position is shared by all of its translations, so ordering a taxonomy in one locale orders it everywhere. On upgrade that means each taxonomy keeps the alphabetical order of the locale its terms were first written in, and other locales are re-sorted to match; reorder once from the Taxonomies screen if you want something different. Sites that need a genuinely different order per language should use separate taxonomies.

    Also fixes moving a term to a new parent only taking effect in the locale you moved it in, which left the term nested in that locale and still at the top level in the others. Moving a term now moves it in every locale, and terms already split this way are repaired on upgrade.

Patch Changes

@emdash-cms/auth-atproto@0.2.33

Patch Changes

  • Updated dependencies []:
    • @emdash-cms/auth@0.33.0

@emdash-cms/plugin-embeds@0.1.41

Patch Changes

  • Updated dependencies []:
    • @emdash-cms/blocks@0.33.0

@emdash-cms/auth@0.33.0

@emdash-cms/blocks@0.33.0

create-emdash@0.33.0

@emdash-cms/gutenberg-to-portable-text@0.33.0

@emdash-cms/x402@0.33.0

@emdash-cms/fixture-perf-site@0.0.36

Patch Changes

@emdash-cms/perf-demo-site@0.0.36

Patch Changes

@emdash-cms/cache-demo-site@0.0.36

Patch Changes

@emdash-cms/do-demo-site@0.0.36

Patch Changes

@emdash-cms/do-solo-demo-site@0.0.36

Patch Changes

@emdash-cms/plugin-mcp-smoke@4.0.0

Patch Changes

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 6, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
emdash-demo-cache ad2a9f5 Aug 11 2026, 10:48 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 6, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
emdash-demo-do ad2a9f5 Aug 11 2026, 10:48 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 6, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
emdash-playground ad2a9f5 Aug 11 2026, 10:48 AM

@pkg-pr-new

pkg-pr-new Bot commented Aug 6, 2026

Copy link
Copy Markdown

Open in StackBlitz

@emdash-cms/admin

npm i https://pkg.pr.new/@emdash-cms/admin@2350

@emdash-cms/auth

npm i https://pkg.pr.new/@emdash-cms/auth@2350

@emdash-cms/auth-atproto

npm i https://pkg.pr.new/@emdash-cms/auth-atproto@2350

@emdash-cms/blocks

npm i https://pkg.pr.new/@emdash-cms/blocks@2350

@emdash-cms/cloudflare

npm i https://pkg.pr.new/@emdash-cms/cloudflare@2350

@emdash-cms/contentful-to-portable-text

npm i https://pkg.pr.new/@emdash-cms/contentful-to-portable-text@2350

emdash

npm i https://pkg.pr.new/emdash@2350

create-emdash

npm i https://pkg.pr.new/create-emdash@2350

@emdash-cms/gutenberg-to-portable-text

npm i https://pkg.pr.new/@emdash-cms/gutenberg-to-portable-text@2350

@emdash-cms/plugin-cli

npm i https://pkg.pr.new/@emdash-cms/plugin-cli@2350

@emdash-cms/plugin-types

npm i https://pkg.pr.new/@emdash-cms/plugin-types@2350

@emdash-cms/registry-client

npm i https://pkg.pr.new/@emdash-cms/registry-client@2350

@emdash-cms/registry-lexicons

npm i https://pkg.pr.new/@emdash-cms/registry-lexicons@2350

@emdash-cms/registry-verification

npm i https://pkg.pr.new/@emdash-cms/registry-verification@2350

@emdash-cms/sandbox-workerd

npm i https://pkg.pr.new/@emdash-cms/sandbox-workerd@2350

@emdash-cms/x402

npm i https://pkg.pr.new/@emdash-cms/x402@2350

@emdash-cms/plugin-ai-moderation

npm i https://pkg.pr.new/@emdash-cms/plugin-ai-moderation@2350

@emdash-cms/plugin-atproto

npm i https://pkg.pr.new/@emdash-cms/plugin-atproto@2350

@emdash-cms/plugin-audit-log

npm i https://pkg.pr.new/@emdash-cms/plugin-audit-log@2350

@emdash-cms/plugin-color

npm i https://pkg.pr.new/@emdash-cms/plugin-color@2350

@emdash-cms/plugin-embeds

npm i https://pkg.pr.new/@emdash-cms/plugin-embeds@2350

@emdash-cms/plugin-field-kit

npm i https://pkg.pr.new/@emdash-cms/plugin-field-kit@2350

@emdash-cms/plugin-forms

npm i https://pkg.pr.new/@emdash-cms/plugin-forms@2350

@emdash-cms/plugin-webhook-notifier

npm i https://pkg.pr.new/@emdash-cms/plugin-webhook-notifier@2350

commit: ad2a9f5

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Scope check

This PR touches 35 files. PRs with a broad scope are harder to review. Please confirm the scope hasn't drifted beyond the intended change.
This PR spans 5 different areas (area/core, area/admin, area/plugins, area/auth, area/cloudflare). Consider breaking it into smaller, focused PRs.

If this scope is intentional, no action needed. A maintainer will review it. If not, please consider splitting this into smaller PRs.

See CONTRIBUTING.md for contribution guidelines.

@emdashbot
emdashbot Bot force-pushed the changeset-release/main branch from 7913924 to 57d13c5 Compare August 6, 2026 12:36
@emdashbot
emdashbot Bot force-pushed the changeset-release/main branch 7 times, most recently from 813a881 to 1e68cae Compare August 8, 2026 10:25
@github-actions github-actions Bot added size/L and removed size/M labels Aug 8, 2026
@emdashbot
emdashbot Bot force-pushed the changeset-release/main branch 7 times, most recently from 92a3a5d to 1565ca2 Compare August 8, 2026 11:33
@emdashbot
emdashbot Bot force-pushed the changeset-release/main branch 20 times, most recently from 35726ab to b64ff0b Compare August 11, 2026 07:13
@emdashbot
emdashbot Bot force-pushed the changeset-release/main branch from b64ff0b to ad2a9f5 Compare August 11, 2026 10:45
@ascorbic
ascorbic merged commit a891d73 into main Aug 11, 2026
47 checks passed
@ascorbic
ascorbic deleted the changeset-release/main branch August 11, 2026 14:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant