Open
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-playground | a5bd0cd | Apr 11 2026, 05:00 PM |
Contributor
Scope checkThis PR touches 47 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. |
fca0cf3 to
2dc55ab
Compare
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/blocks
@emdash-cms/cloudflare
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@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-forms
@emdash-cms/plugin-webhook-notifier
commit: |
937503b to
64d309f
Compare
1be5cd5 to
da21443
Compare
10 tasks
ff63030 to
fdfe7d8
Compare
fdfe7d8 to
a5bd0cd
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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@1.0.0
Minor Changes
87b0439Thanks @mvanhorn! - Adds repeater field type for structured repeating dataPatch Changes
#349
53dec88Thanks @tsikatawill! - Fixes menu editor rejecting relative URLs like /about by changing input type from url to text with pattern validation.#99
3b6b75bThanks @all3f0r1! - Fix content list not fetching beyond the first API page when navigating to the last client-side page#247
a293708Thanks @NaeemHaque! - Fixes email settings page showing empty by registering the missing API route. Adds error state to the admin UI so fetch failures are visible instead of silently swallowed.#316
c9bf640Thanks @mvanhorn! - Allow relative URLs in menu custom links by changing input type from "url" to "text"#377
5eeab91Thanks @Pouf5! - Fixes new content always being created with localeenregardless of which locale is selected in the collection locale switcher. The "Add New" link now forwards the active locale to the new-content route, and the new-content page passes it through to the create API.#185
e3f7db8Thanks @ophirbucai! - Fixes field scroll-into-view not triggering when navigating to a field via URL parameter.#93
a5e0603Thanks @eyupcanakman! - Fix taxonomy links missing from admin sidebarUpdated dependencies [
e1349e3]:emdash@1.0.0
Minor Changes
#367
8f44ec2Thanks @ttmx! - Addscontent:afterPublishandcontent:afterUnpublishplugin hooks, fired after content is published or unpublished. Both are fire-and-forget notifications requiringread:contentcapability, supporting trusted and sandboxed plugins.#431
7ee7d95Thanks @jdevalk! - Per-collection sitemaps with sitemap index and lastmod/sitemap.xmlnow serves a<sitemapindex>with one child sitemap per SEO-enabled collection. Each collection's sitemap is at/sitemap-{collection}.xmlwith<lastmod>on both index entries and individual URLs. Uses the collection'surl_patternfor correct URL building.#414
4d4ac53Thanks @jdevalk! - Addsbreadcrumbs?: BreadcrumbItem[]toPublicPageContextso themes can publish a breadcrumb trail as part of the page context, and SEO plugins (or any otherpage:metadataconsumer) can read it without having to invent their own per-theme override mechanism.BreadcrumbItemis also exported from theemdashpackage root. The field is optional and non-breaking — existing themes and plugins work unchanged, and consumers can adopt it incrementally. Empty array (breadcrumbs: []) is an explicit opt-out signal (e.g. for homepages);undefinedmeans "no opinion, fall back to consumer's own derivation".#111
87b0439Thanks @mvanhorn! - Adds repeater field type for structured repeating data#382
befaeecThanks @UpperM! - AddssiteUrlconfig option to fix reverse-proxy origin mismatch. ReplacespasskeyPublicOriginwith a single setting that covers all origin-dependent features: passkeys, CSRF, OAuth, auth redirects, MCP discovery, snapshots, sitemap, robots.txt, and JSON-LD.Supports
EMDASH_SITE_URL/SITE_URLenvironment variables for container deployments where the domain is only known at runtime.Disables Astro's
security.checkOrigin(EmDash's own CSRF layer handles origin validation with dual-origin support and runtime siteUrl resolution). WhensiteUrlis set in config, also setssecurity.allowedDomainssoAstro.urlreflects the public origin in templates.Breaking:
passkeyPublicOriginis removed. Rename tositeUrlin yourastro.config.mjs.Patch Changes
#182
156ba73Thanks @masonjames! - Fixes media routes so storage keys with slashes resolve correctly.#422
80a895bThanks @baezor! - Fixes SEO hydration exceeding D1 SQL variable limit on large collections by chunking thecontent_id IN (...)clause inSeoRepository.getMany.#94
da957ceThanks @eyupcanakman! - Reject dangerous URL schemes in menu custom links#223
fcd8b7bThanks @baezor! - Fixes byline hydration exceeding D1 SQL variable limit on large collections by chunking IN clauses.#250
ba2b020Thanks @JULJERYT! - Optimize dashboard stats (3x fewer db queries)#340
0b108cfThanks @mvanhorn! - Passes emailPipeline to plugin route handler context so plugins with email:send capability can send email from route handlers.#148
1989e8bThanks @masonjames! - Adds public plugin settings helpers.#352
e190324Thanks @barckcode! - Allows external HTTPS images in the admin UI by addinghttps:to theimg-srcCSP directive. Fixes external content images (e.g. from migration or external hosting) being blocked in the content editor.#72
724191cThanks @travisbreaks! - Fix CLI login against remote Cloudflare-deployed instances by unwrapping API response envelope and adding admin scope#247
a293708Thanks @NaeemHaque! - Fixes email settings page showing empty by registering the missing API route. Adds error state to the admin UI so fetch failures are visible instead of silently swallowed.#324
c75cc5bThanks @barckcode! - Fixes admin editor crash when image blocks lack theassetwrapper. Image blocks withurlat the top level (e.g. from CMS migrations) now render correctly instead of throwingTypeError: Cannot read properties of undefined (reading 'url').#353
6ebb797Thanks @ilicfilip! - fix(core): pass field.options through to admin manifest for plugin field widgets#209
d421ee2Thanks @JonahFoster! - Fixes base OG, Twitter, and article JSON-LD titles so they can use a page-specific title without including the site name suffix from the document title.#394
391caf4Thanks @datienzalopez! - Fixesplugin:activateandplugin:deactivatehooks not being called when enabling or disabling a plugin via the admin UI orsetPluginStatus. Previously,setPluginStatusrebuilt the hook pipeline but never invoked the lifecycle hooks. Nowplugin:activatefires after the pipeline is rebuilt with the plugin included, andplugin:deactivatefires on the current pipeline before the plugin is removed.#357
6474daeThanks @Vallhalen! - Fix: default adminPages and dashboardWidgets to empty arrays in manifest to prevent admin UI crash when plugins omit these properties.#453
30c9a96Thanks @all3f0r1! - Fixesctx.content.create()andctx.content.update()so plugins can writeto the core SEO panel. When the input
datacontains a reservedseokey,it is now extracted and routed to
_emdash_seovia the SEO repository,matching the REST API shape.
ctx.content.get()andctx.content.list()also hydrate the
seofield on returned items for SEO-enabled collections.#326
122c236Thanks @barckcode! - Fixes WXR import not preserving original post dates or publish status. Useswp:post_date_gmt(UTC) with fallback chain topubDate(RFC 2822) thenwp:post_date(site-local). Handles the WordPress0000-00-00 00:00:00sentinel for unpublished drafts. Setspublished_atfor published posts. Applies to both WXR file upload and plugin-based import paths.#338
b712ae3Thanks @mvanhorn! - Fixes standalone wildcard "" in plugin allowedHosts so plugins declaring allowedHosts: [""] can make outbound HTTP requests to any host.#434
9cb5a28Thanks @hayatosc! - Avoid accessing sessions on prerendered public routes.#119
e1014efThanks @blmyr! - Fix pluginpage:metadataandpage:fragmentshooks not firing for anonymous public page visitors. The middleware's early-return fast-path for unauthenticated requests now initializes the runtime (skipping only the manifest query), so plugin contributions render via<EmDashHead>,<EmDashBodyStart>, and<EmDashBodyEnd>for all visitors. Also addscollectPageMetadataandcollectPageFragmentsto theEmDashHandlersinterface.#424
476cb3aThanks @csfalcao! - Fixes public access to the search API (Search API requires authentication, preventing frontend search #104). The auth middleware blocked/_emdash/api/searchbefore the handler ran, so fix: allow public access to search API for frontend LiveSearch #107's handler-level change never took effect for anonymous callers. Adds the endpoint toPUBLIC_API_EXACTso the shippedLiveSearchcomponent works on public sites without credentials. Admin endpoints (/search/enable,/search/rebuild,/search/stats,/search/suggest) remain authenticated.#333
dd708b1Thanks @mvanhorn! - Adds composite index on (deleted_at, published_at DESC, id DESC) to eliminate full table scans for frontend listing queries that order by published_at.#319
2ba1f1fThanks @ideepakchauhan7! - Fixes i18n config returning null in Vite dev SSR by reading from virtual module instead of dynamic import.#251
a13c4ecThanks @yohaann196! - fix: expose client_id in device flow discovery response#93
a5e0603Thanks @eyupcanakman! - Fix taxonomy links missing from admin sidebarUpdated dependencies [
53dec88,3b6b75b,a293708,1a93d51,c9bf640,87b0439,5eeab91,e3f7db8,a5e0603]:@emdash-cms/auth@1.0.0
Patch Changes
1a93d51Thanks @kamine81! - Fixes GitHub OAuth login failing with 403 on accounts where email is private. GitHub's API requires aUser-Agentheader and rejects requests without it.@emdash-cms/blocks@1.0.0
Patch Changes
e1349e3Thanks @estepanov! - Adds overflow-hidden and text-ellipsis to field value elements, with a title attribute for full-text tooltip on hover@emdash-cms/cloudflare@1.0.0
Patch Changes
156ba73,80a895b,da957ce,fcd8b7b,ba2b020,0b108cf,1989e8b,e190324,724191c,a293708,c75cc5b,6ebb797,d421ee2,391caf4,6474dae,30c9a96,122c236,8f44ec2,b712ae3,9cb5a28,7ee7d95,e1014ef,4d4ac53,476cb3a,87b0439,dd708b1,befaeec,2ba1f1f,a13c4ec,a5e0603]:@emdash-cms/plugin-ai-moderation@1.0.0
Patch Changes
156ba73,80a895b,da957ce,fcd8b7b,ba2b020,0b108cf,1989e8b,e190324,724191c,a293708,c75cc5b,6ebb797,d421ee2,391caf4,6474dae,30c9a96,122c236,8f44ec2,b712ae3,9cb5a28,7ee7d95,e1014ef,4d4ac53,476cb3a,87b0439,dd708b1,befaeec,2ba1f1f,a13c4ec,a5e0603]:@emdash-cms/plugin-atproto@1.0.0
Patch Changes
156ba73,80a895b,da957ce,fcd8b7b,ba2b020,0b108cf,1989e8b,e190324,724191c,a293708,c75cc5b,6ebb797,d421ee2,391caf4,6474dae,30c9a96,122c236,8f44ec2,b712ae3,9cb5a28,7ee7d95,e1014ef,4d4ac53,476cb3a,87b0439,dd708b1,befaeec,2ba1f1f,a13c4ec,a5e0603]:@emdash-cms/plugin-audit-log@1.0.0
Patch Changes
156ba73,80a895b,da957ce,fcd8b7b,ba2b020,0b108cf,1989e8b,e190324,724191c,a293708,c75cc5b,6ebb797,d421ee2,391caf4,6474dae,30c9a96,122c236,8f44ec2,b712ae3,9cb5a28,7ee7d95,e1014ef,4d4ac53,476cb3a,87b0439,dd708b1,befaeec,2ba1f1f,a13c4ec,a5e0603]:@emdash-cms/plugin-color@1.0.0
Patch Changes
156ba73,80a895b,da957ce,fcd8b7b,ba2b020,0b108cf,1989e8b,e190324,724191c,a293708,c75cc5b,6ebb797,d421ee2,391caf4,6474dae,30c9a96,122c236,8f44ec2,b712ae3,9cb5a28,7ee7d95,e1014ef,4d4ac53,476cb3a,87b0439,dd708b1,befaeec,2ba1f1f,a13c4ec,a5e0603]:@emdash-cms/plugin-embeds@1.0.0
Patch Changes
156ba73,80a895b,da957ce,fcd8b7b,ba2b020,0b108cf,1989e8b,e190324,724191c,a293708,c75cc5b,6ebb797,d421ee2,391caf4,6474dae,30c9a96,122c236,8f44ec2,b712ae3,9cb5a28,7ee7d95,e1014ef,4d4ac53,476cb3a,e1349e3,87b0439,dd708b1,befaeec,2ba1f1f,a13c4ec,a5e0603]:@emdash-cms/plugin-forms@1.0.0
Patch Changes
156ba73,80a895b,da957ce,fcd8b7b,ba2b020,0b108cf,1989e8b,e190324,724191c,a293708,c75cc5b,6ebb797,d421ee2,391caf4,6474dae,30c9a96,122c236,8f44ec2,b712ae3,9cb5a28,7ee7d95,e1014ef,4d4ac53,476cb3a,87b0439,dd708b1,befaeec,2ba1f1f,a13c4ec,a5e0603]:@emdash-cms/plugin-webhook-notifier@1.0.0
Patch Changes
156ba73,80a895b,da957ce,fcd8b7b,ba2b020,0b108cf,1989e8b,e190324,724191c,a293708,c75cc5b,6ebb797,d421ee2,391caf4,6474dae,30c9a96,122c236,8f44ec2,b712ae3,9cb5a28,7ee7d95,e1014ef,4d4ac53,476cb3a,87b0439,dd708b1,befaeec,2ba1f1f,a13c4ec,a5e0603]:create-emdash@1.0.0
@emdash-cms/gutenberg-to-portable-text@1.0.0
@emdash-cms/x402@1.0.0