ci: release - #2350
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-demo-cache | ad2a9f5 | Aug 11 2026, 10:48 AM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-demo-do | ad2a9f5 | Aug 11 2026, 10:48 AM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-playground | ad2a9f5 | Aug 11 2026, 10:48 AM |
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/auth-atproto
@emdash-cms/blocks
@emdash-cms/cloudflare
@emdash-cms/contentful-to-portable-text
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@emdash-cms/plugin-cli
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/registry-verification
@emdash-cms/sandbox-workerd
@emdash-cms/x402
@emdash-cms/plugin-ai-moderation
@emdash-cms/plugin-atproto
@emdash-cms/plugin-audit-log
@emdash-cms/plugin-color
@emdash-cms/plugin-embeds
@emdash-cms/plugin-field-kit
@emdash-cms/plugin-forms
@emdash-cms/plugin-webhook-notifier
commit: |
Scope checkThis PR touches 35 files. PRs with a broad scope are harder to review. Please confirm the scope hasn't drifted beyond the intended change. 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. |
7913924 to
57d13c5
Compare
813a881 to
1e68cae
Compare
92a3a5d to
1565ca2
Compare
35726ab to
b64ff0b
Compare
b64ff0b to
ad2a9f5
Compare
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
e8048e4Thanks @DavidPivert! - Adds an explicit sidebar order for collections. Drag the rows on the Content Types screen, or setsortOrderin a seed file, and the admin sidebar follows that order instead of sorting alphabetically by slug. Collections without asortOrderkeep the alphabetical order and are listed after the ordered ones, so existing sites look the same until someone reorders.reorderis now a reserved collection slug.#2264
741c40cThanks @DavidPivert! - Adds ahiddenflag 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
ea4c39bThanks @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
6215e93Thanks @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
28b17fdThanks @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
d9b76beThanks @thefrana! - Adds Czech (Čeština) to the admin UI. Select it from the language picker on thelogin page or in Settings.
#2348
640da63Thanks @khoinguyenpham04! - Fixes numbered lists restarting at 1 after intervening content blocks in the editor and rendered pages.#2301
e61cb63Thanks @ankit-fastcurveservices! - Enables Hindi (हिन्दी) locale in the admin UI#2401
6e47033Thanks @danielmlr! - Fixes the status badge and status filter labeling published content "Publish" instead of "Published". Existing translations of "Published" now apply there too.#2406
1cf2811Thanks @ascorbic! - Fixes the redirects screen so all redirects can be loaded beyond the first 100 results.#2236
2400a3eThanks @bimsonz! - Shows the derived title and description as placeholders in the SEO panel.getSeoMetaalready falls back to an entry's owndata.titleanddata.excerptwhen 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/cloudflare@0.33.0
Minor Changes
#2353
ea4c39bThanks @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
51cbe2eThanks @scottbuscemi! - DeprecatescloudflareCache()(legacy Cache API + zone REST purge). It now emits a one-time console warning and is marked@deprecatedin types. New sites should use native Workers Caching ("cache": { "enabled": true }in wrangler pluscacheCloudflare()from@astrojs/cloudflare/cache) and purge withcache.purge()— no zone ID or Cache Purge API token.#2280
f586100Thanks @scottbuscemi! - Fixes anonymous public pages reseeding edge/object caches with stale Hyperdrive query results right after content publishes. WhencachedBindingand 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 viapreferUncachedAfterWriteMsto 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
Minor Changes
#2267
e8048e4Thanks @DavidPivert! - Adds an explicit sidebar order for collections. Drag the rows on the Content Types screen, or setsortOrderin a seed file, and the admin sidebar follows that order instead of sorting alphabetically by slug. Collections without asortOrderkeep the alphabetical order and are listed after the ordered ones, so existing sites look the same until someone reorders.reorderis now a reserved collection slug.#2044
534f238Thanks @scottbuscemi! - Addsemdash/ui/commentsforCommentsandCommentFormso their CSS only loads on pages that import them. Importing fromemdash/uistill works but is deprecated and will be removed in 1.0 — preferimport { Comments, CommentForm } from "emdash/ui/comments".#2264
741c40cThanks @DavidPivert! - Adds ahiddenflag 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
ea4c39bThanks @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
85dd99dThanks @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
f6385daThanks @ascorbic! - Deprecatesemdash devand hides it from CLI help. Existing invocations still work, but now warn you to use the project'sdevscript, such aspnpm dev, or runastro devdirectly.#2349
72660daThanks @khoinguyenpham04! - Fixes scheduled content appearing publicly before its staged slug and content are atomically published.#2407
969c6cbThanks @ascorbic! - Fixes scheduled maintenance reading the entire revision history on every cron invocation.#2409
0c3af01Thanks @ascorbic! - Fixes Hyperdrive requests leaving request-scoped pool teardown pending when background layout prefetch outlives the response.#2348
640da63Thanks @khoinguyenpham04! - Fixes numbered lists restarting at 1 after intervening content blocks in the editor and rendered pages.#2257
e7c445cThanks @mvanhorn! - Adds per-collection search tokenizers so multilingual content can use trigram or non-stemming Unicode search.#2370
ef78aa1Thanks @danielmlr! - Fixes outbound email links (magic link, invites, signup confirmation, account recovery, comment notifications) ignoring the configuredsiteUrl. The configured origin —siteUrlin the integration options or theEMDASH_SITE_URL/SITE_URLenvironment 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
0237678Thanks @ascorbic! - Fixes redirect changes remaining stale across Cloudflare Worker isolates by refreshing cached rules within 30 seconds.#2306
e07f0c8Thanks @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
425e7c0Thanks @dchaudhari7177! - Plugin API routes with an input schema now work over GET, HEAD, and DELETE. These methods carry no request body, sorequest.json()resolved toundefinedand 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
7099d13Thanks @edrpls! - Fixes plugin-declared storage indexes never being created. Indexes declared in a plugin manifest'sstoragesection 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
f586100Thanks @scottbuscemi! - Fixes anonymous public pages reseeding edge/object caches with stale Hyperdrive query results right after content publishes. WhencachedBindingand 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 viapreferUncachedAfterWriteMsto match your Hyperdrive max_age).#2251
1dd7f13Thanks @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 fullMediaValue(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
447647dThanks @marcusbellamyshaw-cell! - Fixes public routes onsandboxed: [](config-declared) plugins requiring authentication regardless of the plugin's ownpublic: truedeclaration. Declareroutes(and optionallyhooks) on the plugin's descriptor to have them honored, the same wayadminPages/capabilitiesalready are.#2315
aec4fa1Thanks @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
8040e27Thanks @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-columntranslation_groupone, 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/sandbox-workerd@0.4.0
Minor Changes
#2353
ea4c39bThanks @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
85dd99d,e8048e4,534f238,f6385da,72660da,969c6cb,0c3af01,640da63,e7c445c,ef78aa1,0237678,741c40c,e07f0c8,425e7c0,7099d13,f586100,1dd7f13,447647d,aec4fa1,ea4c39b,8040e27]:@emdash-cms/auth-atproto@0.2.33
Patch Changes
@emdash-cms/plugin-embeds@0.1.41
Patch Changes
@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
85dd99d,51cbe2e,e8048e4,534f238,f6385da,72660da,969c6cb,0c3af01,640da63,e7c445c,ef78aa1,0237678,741c40c,e07f0c8,425e7c0,7099d13,f586100,1dd7f13,447647d,aec4fa1,ea4c39b,8040e27]:@emdash-cms/perf-demo-site@0.0.36
Patch Changes
85dd99d,51cbe2e,e8048e4,534f238,f6385da,72660da,969c6cb,0c3af01,640da63,e7c445c,ef78aa1,0237678,741c40c,e07f0c8,425e7c0,7099d13,f586100,1dd7f13,447647d,aec4fa1,ea4c39b,8040e27]:@emdash-cms/cache-demo-site@0.0.36
Patch Changes
85dd99d,51cbe2e,e8048e4,534f238,f6385da,72660da,969c6cb,0c3af01,640da63,e7c445c,ef78aa1,0237678,741c40c,e07f0c8,425e7c0,7099d13,f586100,1dd7f13,447647d,aec4fa1,ea4c39b,8040e27]:@emdash-cms/do-demo-site@0.0.36
Patch Changes
85dd99d,51cbe2e,e8048e4,534f238,f6385da,72660da,969c6cb,0c3af01,640da63,e7c445c,ef78aa1,0237678,741c40c,e07f0c8,425e7c0,7099d13,f586100,1dd7f13,447647d,aec4fa1,ea4c39b,8040e27]:@emdash-cms/do-solo-demo-site@0.0.36
Patch Changes
85dd99d,51cbe2e,e8048e4,534f238,f6385da,72660da,969c6cb,0c3af01,640da63,e7c445c,ef78aa1,0237678,741c40c,e07f0c8,425e7c0,7099d13,f586100,1dd7f13,447647d,aec4fa1,ea4c39b,8040e27]:@emdash-cms/plugin-mcp-smoke@4.0.0
Patch Changes
85dd99d,e8048e4,534f238,f6385da,72660da,969c6cb,0c3af01,640da63,e7c445c,ef78aa1,0237678,741c40c,e07f0c8,425e7c0,7099d13,f586100,1dd7f13,447647d,aec4fa1,ea4c39b,8040e27]: