diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 86288f3..bbd1dc5 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -29,7 +29,7 @@ jobs:
- run: pnpm install --frozen-lockfile
- run: pnpm build
- run: pnpm typecheck
- - run: pnpm run --filter emdashcms-demo --filter @emdashcms/demo-cloudflare typecheck
+ - run: pnpm run --filter emdashcms-demo --filter @emdash-cms/demo-cloudflare typecheck
- run: pnpm typecheck:templates
lint:
@@ -156,7 +156,7 @@ jobs:
node-version: 22
cache: pnpm
- run: pnpm install --frozen-lockfile
- - run: pnpm run --filter @emdashcms/admin... build
+ - run: pnpm run --filter @emdash-cms/admin... build
- uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
id: playwright-cache
with:
@@ -164,7 +164,7 @@ jobs:
key: playwright-${{ hashFiles('pnpm-lock.yaml') }}
- run: pnpm exec playwright install --with-deps chromium
if: steps.playwright-cache.outputs.cache-hit != 'true'
- - run: pnpm run --filter @emdashcms/admin test
+ - run: pnpm run --filter @emdash-cms/admin test
test-e2e:
name: E2E tests (${{ matrix.shardIndex }}/${{ matrix.shardTotal }})
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8f4b3b9..4478483 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -43,19 +43,19 @@ Templates in `templates/` are workspace members and can be run directly:
```bash
# First time: set up database and seed content
-pnpm --filter @emdashcms/template-portfolio bootstrap
+pnpm --filter @emdash-cms/template-portfolio bootstrap
# Run the dev server
-pnpm --filter @emdashcms/template-portfolio dev
+pnpm --filter @emdash-cms/template-portfolio dev
```
Available templates:
| Template | Filter Name |
| --------- | ------------------------------ |
-| Blog | `@emdashcms/template-blog` |
-| Portfolio | `@emdashcms/template-portfolio` |
-| Marketing | `@emdashcms/template-marketing` |
+| Blog | `@emdash-cms/template-blog` |
+| Portfolio | `@emdash-cms/template-portfolio` |
+| Marketing | `@emdash-cms/template-marketing` |
Edit files in `templates/{name}/src/` and changes hot reload.
@@ -73,7 +73,7 @@ To start fresh, delete the database and re-bootstrap:
```bash
rm templates/portfolio/data.db
-pnpm --filter @emdashcms/template-portfolio bootstrap
+pnpm --filter @emdash-cms/template-portfolio bootstrap
```
## Development Workflow
@@ -123,9 +123,9 @@ Tests use real in-memory SQLite — no mocking. Each test gets a fresh database.
emdash/
├── packages/
│ ├── core/ # emdash — the main package (Astro integration + APIs + admin)
-│ ├── auth/ # @emdashcms/auth — passkeys, OAuth, magic links
-│ ├── admin/ # @emdashcms/admin — React admin SPA
-│ ├── cloudflare/ # @emdashcms/cloudflare — CF adapter + plugin sandbox
+│ ├── auth/ # @emdash-cms/auth — passkeys, OAuth, magic links
+│ ├── admin/ # @emdash-cms/admin — React admin SPA
+│ ├── cloudflare/ # @emdash-cms/cloudflare — CF adapter + plugin sandbox
│ ├── create-emdash/ # create-emdash — project scaffolder
│ ├── gutenberg-to-portable-text/ # WP block → Portable Text converter
│ └── plugins/ # first-party plugins (each dir = package)
diff --git a/demos/cloudflare/astro.config.mjs b/demos/cloudflare/astro.config.mjs
index 3c3b420..de86808 100644
--- a/demos/cloudflare/astro.config.mjs
+++ b/demos/cloudflare/astro.config.mjs
@@ -9,9 +9,9 @@ import {
cloudflareCache,
cloudflareImages,
cloudflareStream,
-} from "@emdashcms/cloudflare";
-import { formsPlugin } from "@emdashcms/plugin-forms";
-import { webhookNotifierPlugin } from "@emdashcms/plugin-webhook-notifier";
+} from "@emdash-cms/cloudflare";
+import { formsPlugin } from "@emdash-cms/plugin-forms";
+import { webhookNotifierPlugin } from "@emdash-cms/plugin-webhook-notifier";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
diff --git a/demos/cloudflare/package.json b/demos/cloudflare/package.json
index 4083cd2..310ceca 100644
--- a/demos/cloudflare/package.json
+++ b/demos/cloudflare/package.json
@@ -1,12 +1,12 @@
{
- "name": "@emdashcms/demo-cloudflare",
+ "name": "@emdash-cms/demo-cloudflare",
"version": "0.0.1",
"private": true,
"type": "module",
"scripts": {
"dev": "astro dev",
"build": "astro build",
- "build:all": "pnpm run --filter @emdashcms/demo-cloudflare... build",
+ "build:all": "pnpm run --filter @emdash-cms/demo-cloudflare... build",
"preview": "astro preview",
"deploy": "pnpm build:all && wrangler deploy",
"db:create": "wrangler d1 create emdash-demo",
@@ -16,9 +16,9 @@
"dependencies": {
"@astrojs/cloudflare": "catalog:",
"@astrojs/react": "catalog:",
- "@emdashcms/cloudflare": "workspace:*",
- "@emdashcms/plugin-forms": "workspace:*",
- "@emdashcms/plugin-webhook-notifier": "workspace:*",
+ "@emdash-cms/cloudflare": "workspace:*",
+ "@emdash-cms/plugin-forms": "workspace:*",
+ "@emdash-cms/plugin-webhook-notifier": "workspace:*",
"@tanstack/react-query": "catalog:",
"@tanstack/react-router": "catalog:",
"astro": "catalog:",
diff --git a/demos/cloudflare/src/worker.ts b/demos/cloudflare/src/worker.ts
index 6af9aaa..37f4434 100644
--- a/demos/cloudflare/src/worker.ts
+++ b/demos/cloudflare/src/worker.ts
@@ -10,7 +10,7 @@ import handler from "@astrojs/cloudflare/entrypoints/server";
// Re-export PluginBridge from the cloudflare sandbox runtime
// This makes it available via ctx.exports.PluginBridge
-export { PluginBridge } from "@emdashcms/cloudflare/sandbox";
+export { PluginBridge } from "@emdash-cms/cloudflare/sandbox";
/**
* Default export - just re-export the Astro handler
diff --git a/demos/playground/astro.config.mjs b/demos/playground/astro.config.mjs
index 3a5a12a..bc090d9 100644
--- a/demos/playground/astro.config.mjs
+++ b/demos/playground/astro.config.mjs
@@ -1,6 +1,6 @@
import cloudflare from "@astrojs/cloudflare";
import react from "@astrojs/react";
-import { playgroundDatabase } from "@emdashcms/cloudflare";
+import { playgroundDatabase } from "@emdash-cms/cloudflare";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
@@ -20,7 +20,7 @@ export default defineConfig({
// Playground mode: injects playground middleware before runtime init,
// skips setup/auth (handled by playground middleware)
playground: {
- middlewareEntrypoint: "@emdashcms/cloudflare/db/playground-middleware",
+ middlewareEntrypoint: "@emdash-cms/cloudflare/db/playground-middleware",
},
}),
],
diff --git a/demos/playground/package.json b/demos/playground/package.json
index 331ff95..03b17ff 100644
--- a/demos/playground/package.json
+++ b/demos/playground/package.json
@@ -1,5 +1,5 @@
{
- "name": "@emdashcms/playground",
+ "name": "@emdash-cms/playground",
"version": "0.0.1",
"private": true,
"type": "module",
@@ -13,7 +13,7 @@
"dependencies": {
"@astrojs/cloudflare": "catalog:",
"@astrojs/react": "catalog:",
- "@emdashcms/cloudflare": "workspace:*",
+ "@emdash-cms/cloudflare": "workspace:*",
"astro": "catalog:",
"emdash": "workspace:*",
"react": "catalog:",
diff --git a/demos/playground/src/worker.ts b/demos/playground/src/worker.ts
index fc264fe..704ad04 100644
--- a/demos/playground/src/worker.ts
+++ b/demos/playground/src/worker.ts
@@ -9,6 +9,6 @@
import handler from "@astrojs/cloudflare/entrypoints/server";
// Export the DO class so Cloudflare can instantiate it
-export { EmDashPreviewDB } from "@emdashcms/cloudflare/db/playground";
+export { EmDashPreviewDB } from "@emdash-cms/cloudflare/db/playground";
export default handler;
diff --git a/demos/plugins-demo/README.md b/demos/plugins-demo/README.md
index c9ad56c..8fea09f 100644
--- a/demos/plugins-demo/README.md
+++ b/demos/plugins-demo/README.md
@@ -4,7 +4,7 @@ This demo showcases EmDash's plugin system with plugins that demonstrate the hoo
## Plugins Included
-### 1. Audit Log Plugin (`@emdashcms/plugin-audit-log`)
+### 1. Audit Log Plugin (`@emdash-cms/plugin-audit-log`)
Tracks all content changes for compliance.
@@ -18,7 +18,7 @@ Tracks all content changes for compliance.
- Before/after state comparison
- Admin history page
-### 2. Webhook Notifier Plugin (`@emdashcms/plugin-webhook-notifier`)
+### 2. Webhook Notifier Plugin (`@emdash-cms/plugin-webhook-notifier`)
Posts JSON payloads to external webhook URLs on content/media events.
@@ -29,7 +29,7 @@ Posts JSON payloads to external webhook URLs on content/media events.
- SSRF protection
- Delivery tracking
-### 3. Embeds Plugin (`@emdashcms/plugin-embeds`)
+### 3. Embeds Plugin (`@emdash-cms/plugin-embeds`)
Provides Portable Text block types for embedding external content.
@@ -38,7 +38,7 @@ Provides Portable Text block types for embedding external content.
- Link previews (Open Graph)
- GitHub Gist embeds
-### 4. API Test Plugin (`@emdashcms/plugin-api-test`)
+### 4. API Test Plugin (`@emdash-cms/plugin-api-test`)
Exercises all v2 plugin APIs for testing.
diff --git a/demos/plugins-demo/astro.config.mjs b/demos/plugins-demo/astro.config.mjs
index 57fd098..d10c4d2 100644
--- a/demos/plugins-demo/astro.config.mjs
+++ b/demos/plugins-demo/astro.config.mjs
@@ -1,9 +1,9 @@
import node from "@astrojs/node";
import react from "@astrojs/react";
-import { apiTestPlugin } from "@emdashcms/plugin-api-test";
-import { auditLogPlugin } from "@emdashcms/plugin-audit-log";
-import { embedsPlugin } from "@emdashcms/plugin-embeds";
-import { webhookNotifierPlugin } from "@emdashcms/plugin-webhook-notifier";
+import { apiTestPlugin } from "@emdash-cms/plugin-api-test";
+import { auditLogPlugin } from "@emdash-cms/plugin-audit-log";
+import { embedsPlugin } from "@emdash-cms/plugin-embeds";
+import { webhookNotifierPlugin } from "@emdash-cms/plugin-webhook-notifier";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { sqlite } from "emdash/db";
diff --git a/demos/plugins-demo/package.json b/demos/plugins-demo/package.json
index 9cc499d..7549d2a 100644
--- a/demos/plugins-demo/package.json
+++ b/demos/plugins-demo/package.json
@@ -14,10 +14,10 @@
"dependencies": {
"@astrojs/node": "catalog:",
"@astrojs/react": "catalog:",
- "@emdashcms/plugin-audit-log": "workspace:*",
- "@emdashcms/plugin-api-test": "workspace:*",
- "@emdashcms/plugin-webhook-notifier": "workspace:*",
- "@emdashcms/plugin-embeds": "workspace:*",
+ "@emdash-cms/plugin-audit-log": "workspace:*",
+ "@emdash-cms/plugin-api-test": "workspace:*",
+ "@emdash-cms/plugin-webhook-notifier": "workspace:*",
+ "@emdash-cms/plugin-embeds": "workspace:*",
"@tanstack/react-query": "catalog:",
"@tanstack/react-router": "catalog:",
"astro": "catalog:",
diff --git a/demos/plugins-demo/src/pages/posts/[slug].astro b/demos/plugins-demo/src/pages/posts/[slug].astro
index a80c44a..0c39d26 100644
--- a/demos/plugins-demo/src/pages/posts/[slug].astro
+++ b/demos/plugins-demo/src/pages/posts/[slug].astro
@@ -7,7 +7,7 @@
*/
import { getEmDashEntry } from "emdash";
import { PortableText } from "emdash/ui";
-import { embedComponents } from "@emdashcms/plugin-embeds/astro";
+import { embedComponents } from "@emdash-cms/plugin-embeds/astro";
const { slug } = Astro.params;
diff --git a/demos/plugins-demo/src/pages/test-embeds.astro b/demos/plugins-demo/src/pages/test-embeds.astro
index 367a473..cfee9e5 100644
--- a/demos/plugins-demo/src/pages/test-embeds.astro
+++ b/demos/plugins-demo/src/pages/test-embeds.astro
@@ -5,7 +5,7 @@
* This page renders hardcoded Portable Text with embed blocks.
*/
import { PortableText } from "emdash/ui";
-import { embedComponents } from "@emdashcms/plugin-embeds/astro";
+import { embedComponents } from "@emdash-cms/plugin-embeds/astro";
// Sample Portable Text content with various embed types
const testContent = [
diff --git a/demos/postgres/package.json b/demos/postgres/package.json
index 0705973..0406a02 100644
--- a/demos/postgres/package.json
+++ b/demos/postgres/package.json
@@ -1,5 +1,5 @@
{
- "name": "@emdashcms/demo-postgres",
+ "name": "@emdash-cms/demo-postgres",
"version": "0.0.1",
"private": true,
"type": "module",
diff --git a/demos/preview/astro.config.mjs b/demos/preview/astro.config.mjs
index 9f1ccf4..8977e06 100644
--- a/demos/preview/astro.config.mjs
+++ b/demos/preview/astro.config.mjs
@@ -1,6 +1,6 @@
import cloudflare from "@astrojs/cloudflare";
import react from "@astrojs/react";
-import { previewDatabase } from "@emdashcms/cloudflare";
+import { previewDatabase } from "@emdash-cms/cloudflare";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
diff --git a/demos/preview/package.json b/demos/preview/package.json
index f0811a4..95e0dd3 100644
--- a/demos/preview/package.json
+++ b/demos/preview/package.json
@@ -1,12 +1,12 @@
{
- "name": "@emdashcms/demo-preview",
+ "name": "@emdash-cms/demo-preview",
"version": "0.0.1",
"private": true,
"type": "module",
"scripts": {
"dev": "astro dev",
"build": "astro build",
- "build:all": "pnpm run --filter @emdashcms/demo-preview... build",
+ "build:all": "pnpm run --filter @emdash-cms/demo-preview... build",
"preview": "astro preview",
"deploy": "pnpm build:all && wrangler deploy",
"typecheck": "astro check"
@@ -14,7 +14,7 @@
"dependencies": {
"@astrojs/cloudflare": "catalog:",
"@astrojs/react": "catalog:",
- "@emdashcms/cloudflare": "workspace:*",
+ "@emdash-cms/cloudflare": "workspace:*",
"@tanstack/react-query": "catalog:",
"@tanstack/react-router": "catalog:",
"astro": "catalog:",
diff --git a/demos/preview/src/middleware.ts b/demos/preview/src/middleware.ts
index b2e6319..8bd085d 100644
--- a/demos/preview/src/middleware.ts
+++ b/demos/preview/src/middleware.ts
@@ -5,7 +5,7 @@
* populates snapshots, and overrides the request-context DB.
*/
-import { createPreviewMiddleware } from "@emdashcms/cloudflare/db/do";
+import { createPreviewMiddleware } from "@emdash-cms/cloudflare/db/do";
import { sequence } from "astro:middleware";
const preview = createPreviewMiddleware({
diff --git a/demos/preview/src/worker.ts b/demos/preview/src/worker.ts
index 5c5bb13..1f7aa4a 100644
--- a/demos/preview/src/worker.ts
+++ b/demos/preview/src/worker.ts
@@ -9,6 +9,6 @@
import handler from "@astrojs/cloudflare/entrypoints/server";
// Export the DO class so Cloudflare can instantiate it
-export { EmDashPreviewDB } from "@emdashcms/cloudflare/db/do";
+export { EmDashPreviewDB } from "@emdash-cms/cloudflare/db/do";
export default handler;
diff --git a/demos/simple/astro.config.mjs b/demos/simple/astro.config.mjs
index 7700501..e84e940 100644
--- a/demos/simple/astro.config.mjs
+++ b/demos/simple/astro.config.mjs
@@ -1,6 +1,6 @@
import node from "@astrojs/node";
import react from "@astrojs/react";
-import { auditLogPlugin } from "@emdashcms/plugin-audit-log";
+import { auditLogPlugin } from "@emdash-cms/plugin-audit-log";
import { defineConfig } from "astro/config";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";
diff --git a/demos/simple/package.json b/demos/simple/package.json
index 4441a8e..8192ec3 100644
--- a/demos/simple/package.json
+++ b/demos/simple/package.json
@@ -18,8 +18,8 @@
"dependencies": {
"@astrojs/node": "catalog:",
"@astrojs/react": "catalog:",
- "@emdashcms/plugin-audit-log": "workspace:*",
- "@emdashcms/plugin-color": "workspace:*",
+ "@emdash-cms/plugin-audit-log": "workspace:*",
+ "@emdash-cms/plugin-color": "workspace:*",
"astro": "catalog:",
"better-sqlite3": "catalog:",
"emdash": "workspace:*",
diff --git a/docs/src/content/docs/coming-from/astro.mdx b/docs/src/content/docs/coming-from/astro.mdx
index 2514cfc..3a16c90 100644
--- a/docs/src/content/docs/coming-from/astro.mdx
+++ b/docs/src/content/docs/coming-from/astro.mdx
@@ -282,7 +282,7 @@ Extend EmDash with plugins that add hooks, storage, settings, and admin UI:
```ts title="astro.config.mjs"
import emdash from "emdash/astro";
-import seoPlugin from "@emdashcms/plugin-seo";
+import seoPlugin from "@emdash-cms/plugin-seo";
export default defineConfig({
integrations: [
diff --git a/docs/src/content/docs/concepts/admin-panel.mdx b/docs/src/content/docs/concepts/admin-panel.mdx
index 8e97480..606f851 100644
--- a/docs/src/content/docs/concepts/admin-panel.mdx
+++ b/docs/src/content/docs/concepts/admin-panel.mdx
@@ -204,8 +204,8 @@ Plugins can extend the admin with pages and dashboard widgets. The integration g
```ts
// virtual:emdash/plugin-admins (generated)
-import * as pluginAdmin0 from "@emdashcms/plugin-seo/admin";
-import * as pluginAdmin1 from "@emdashcms/plugin-analytics/admin";
+import * as pluginAdmin0 from "@emdash-cms/plugin-seo/admin";
+import * as pluginAdmin1 from "@emdash-cms/plugin-analytics/admin";
export const pluginAdmins = {
seo: pluginAdmin0,
@@ -218,7 +218,7 @@ export const pluginAdmins = {
Plugin pages mount under `/_emdash/admin/plugins/:pluginId/*`:
```tsx
-// @emdashcms/plugin-seo/src/admin.tsx
+// @emdash-cms/plugin-seo/src/admin.tsx
export const pages = [
{
path: "settings",
diff --git a/docs/src/content/docs/concepts/architecture.mdx b/docs/src/content/docs/concepts/architecture.mdx
index 25d7ff2..73d39d4 100644
--- a/docs/src/content/docs/concepts/architecture.mdx
+++ b/docs/src/content/docs/concepts/architecture.mdx
@@ -210,7 +210,7 @@ Plugins can run in two modes:
```ts
// astro.config.mjs
-import { seoPlugin } from "@emdashcms/plugin-seo";
+import { seoPlugin } from "@emdash-cms/plugin-seo";
emdash({
plugins: [seoPlugin({ maxTitleLength: 60 })],
diff --git a/docs/src/content/docs/contributing/index.mdx b/docs/src/content/docs/contributing/index.mdx
index 5dc1177..9861e56 100644
--- a/docs/src/content/docs/contributing/index.mdx
+++ b/docs/src/content/docs/contributing/index.mdx
@@ -15,9 +15,9 @@ EmDash is a **pnpm monorepo** with multiple packages:
emdash/
├── packages/
│ ├── core/ # emdash — Astro integration, APIs, admin (main package)
-│ ├── auth/ # @emdashcms/auth — Authentication (passkeys, OAuth, magic links)
-│ ├── cloudflare/ # @emdashcms/cloudflare — Cloudflare adapter + sandbox runner
-│ ├── admin/ # @emdashcms/admin — Admin React SPA
+│ ├── auth/ # @emdash-cms/auth — Authentication (passkeys, OAuth, magic links)
+│ ├── cloudflare/ # @emdash-cms/cloudflare — Cloudflare adapter + sandbox runner
+│ ├── admin/ # @emdash-cms/admin — Admin React SPA
│ ├── create-emdash/ # create-emdash — project scaffolder
│ ├── gutenberg-to-portable-text/ # WordPress block → Portable Text converter
│ └── plugins/ # First-party plugins (each subdirectory is its own package)
@@ -279,7 +279,7 @@ Route files live in `packages/core/src/astro/routes/api/`. Follow these conventi
```ts
// packages/core/src/astro/routes/api/my-resource.ts
import type { APIRoute } from "astro";
-import type { User } from "@emdashcms/auth";
+import type { User } from "@emdash-cms/auth";
import { apiError, handleError } from "#api/error.js";
import { requirePerm } from "#api/authorize.js";
import { parseBody } from "#api/parse.js";
@@ -398,7 +398,7 @@ Use `import type` for type-only imports:
```ts
import type { Kysely } from "kysely";
-import type { User } from "@emdashcms/auth";
+import type { User } from "@emdash-cms/auth";
```
### Error Handling
diff --git a/docs/src/content/docs/deployment/database.mdx b/docs/src/content/docs/deployment/database.mdx
index 823dd1e..00b4dee 100644
--- a/docs/src/content/docs/deployment/database.mdx
+++ b/docs/src/content/docs/deployment/database.mdx
@@ -84,7 +84,7 @@ D1 supports [read replication](https://developers.cloudflare.com/d1/configuratio
EmDash uses the D1 Sessions API to manage this transparently. Enable it with the `session` option:
```js title="astro.config.mjs"
-import { d1 } from "@emdashcms/cloudflare";
+import { d1 } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
diff --git a/docs/src/content/docs/guides/media-library.mdx b/docs/src/content/docs/guides/media-library.mdx
index f130710..1a7dc9a 100644
--- a/docs/src/content/docs/guides/media-library.mdx
+++ b/docs/src/content/docs/guides/media-library.mdx
@@ -349,7 +349,7 @@ In addition to local storage, EmDash supports external media providers for speci
```js title="astro.config.mjs"
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
-import { cloudflareImages } from "@emdashcms/cloudflare";
+import { cloudflareImages } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
@@ -381,7 +381,7 @@ export default defineConfig({
```js title="astro.config.mjs"
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
-import { cloudflareStream } from "@emdashcms/cloudflare";
+import { cloudflareStream } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
@@ -418,7 +418,7 @@ You can configure multiple providers. Each appears as a tab in the media picker:
```js title="astro.config.mjs"
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
-import { cloudflareImages, cloudflareStream } from "@emdashcms/cloudflare";
+import { cloudflareImages, cloudflareStream } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
diff --git a/docs/src/content/docs/guides/x402-payments.mdx b/docs/src/content/docs/guides/x402-payments.mdx
index ad07a74..e499e51 100644
--- a/docs/src/content/docs/guides/x402-payments.mdx
+++ b/docs/src/content/docs/guides/x402-payments.mdx
@@ -5,7 +5,7 @@ description: Monetize content with the x402 payment protocol — charge bots, no
import { Aside, Steps, Tabs, TabItem } from "@astrojs/starlight/components";
-The `@emdashcms/x402` package adds [x402 payment protocol](https://www.x402.org/) support to any Astro site on Cloudflare. It works standalone — no dependency on EmDash core — but pairs well with EmDash's CMS fields for per-page pricing.
+The `@emdash-cms/x402` package adds [x402 payment protocol](https://www.x402.org/) support to any Astro site on Cloudflare. It works standalone — no dependency on EmDash core — but pairs well with EmDash's CMS fields for per-page pricing.
x402 is an HTTP-native payment protocol. When a client requests a paid resource without payment, the server responds with `402 Payment Required` and machine-readable payment instructions. Agents and browsers that understand x402 can complete payment automatically and retry the request.
@@ -20,17 +20,17 @@ You can also enforce payment for all visitors, or check for payment headers with
```bash
-pnpm add @emdashcms/x402
+pnpm add @emdash-cms/x402
```
```bash
-npm install @emdashcms/x402
+npm install @emdash-cms/x402
```
```bash
-yarn add @emdashcms/x402
+yarn add @emdash-cms/x402
```
@@ -41,7 +41,7 @@ Add the integration to your Astro config:
```js title="astro.config.mjs"
import { defineConfig } from "astro/config";
-import { x402 } from "@emdashcms/x402";
+import { x402 } from "@emdash-cms/x402";
export default defineConfig({
integrations: [
@@ -59,7 +59,7 @@ export default defineConfig({
Add the type reference so TypeScript knows about `Astro.locals.x402`:
```ts title="src/env.d.ts"
-///
+///
```
## Basic Usage
diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx
index 855735b..74006e5 100644
--- a/docs/src/content/docs/index.mdx
+++ b/docs/src/content/docs/index.mdx
@@ -37,7 +37,7 @@ import { Card, CardGrid } from "@astrojs/starlight/components";
```bash
# Create a new EmDash site
-npm create astro@latest -- --template @emdashcms/template-blog
+npm create astro@latest -- --template @emdash-cms/template-blog
# Start the dev server
npm run dev
diff --git a/docs/src/content/docs/plugins/admin-ui.mdx b/docs/src/content/docs/plugins/admin-ui.mdx
index e8a4893..be75c21 100644
--- a/docs/src/content/docs/plugins/admin-ui.mdx
+++ b/docs/src/content/docs/plugins/admin-ui.mdx
@@ -83,7 +83,7 @@ Pages mount at `/_emdash/admin/plugins//`.
```typescript title="src/components/SettingsPage.tsx"
import { useState, useEffect } from "react";
-import { usePluginAPI } from "@emdashcms/admin";
+import { usePluginAPI } from "@emdash-cms/admin";
export function SettingsPage() {
const api = usePluginAPI();
@@ -135,7 +135,7 @@ export function SettingsPage() {
Use `usePluginAPI()` to call your plugin's routes:
```typescript
-import { usePluginAPI } from "@emdashcms/admin";
+import { usePluginAPI } from "@emdash-cms/admin";
function MyComponent() {
const api = usePluginAPI();
@@ -177,7 +177,7 @@ admin: {
```typescript title="src/components/SEOWidget.tsx"
import { useState, useEffect } from "react";
-import { usePluginAPI } from "@emdashcms/admin";
+import { usePluginAPI } from "@emdash-cms/admin";
export function SEOWidget() {
const api = usePluginAPI();
@@ -253,7 +253,7 @@ import {
Pagination,
Alert,
Loading
-} from "@emdashcms/admin";
+} from "@emdash-cms/admin";
function SettingsPage() {
return (
@@ -309,7 +309,7 @@ export default {
},
format: "esm",
dts: true,
- external: ["react", "react-dom", "emdash", "@emdashcms/admin"]
+ external: ["react", "react-dom", "emdash", "@emdash-cms/admin"]
};
```
@@ -319,7 +319,7 @@ export default {
entry: ["src/index.ts", "src/admin.tsx"],
format: "esm",
dts: true,
- external: ["react", "react-dom", "emdash", "@emdashcms/admin"]
+ external: ["react", "react-dom", "emdash", "@emdash-cms/admin"]
};
```
diff --git a/docs/src/content/docs/plugins/api-routes.mdx b/docs/src/content/docs/plugins/api-routes.mdx
index cc1d85d..6b16520 100644
--- a/docs/src/content/docs/plugins/api-routes.mdx
+++ b/docs/src/content/docs/plugins/api-routes.mdx
@@ -402,7 +402,7 @@ routes: {
Use the `usePluginAPI()` hook in admin components:
```typescript
-import { usePluginAPI } from "@emdashcms/admin";
+import { usePluginAPI } from "@emdash-cms/admin";
function SettingsPage() {
const api = usePluginAPI();
diff --git a/docs/src/content/docs/plugins/block-kit.mdx b/docs/src/content/docs/plugins/block-kit.mdx
index af74573..1f4081f 100644
--- a/docs/src/content/docs/plugins/block-kit.mdx
+++ b/docs/src/content/docs/plugins/block-kit.mdx
@@ -89,10 +89,10 @@ routes: {
## Builder helpers
-The `@emdashcms/blocks` package exports builder helpers for cleaner code:
+The `@emdash-cms/blocks` package exports builder helpers for cleaner code:
```typescript
-import { blocks, elements } from "@emdashcms/blocks";
+import { blocks, elements } from "@emdash-cms/blocks";
const { header, form, section, stats } = blocks;
const { textInput, toggle, select, button } = elements;
diff --git a/docs/src/content/docs/plugins/creating-plugins.mdx b/docs/src/content/docs/plugins/creating-plugins.mdx
index 6518728..2ec5c17 100644
--- a/docs/src/content/docs/plugins/creating-plugins.mdx
+++ b/docs/src/content/docs/plugins/creating-plugins.mdx
@@ -148,7 +148,7 @@ The `id` field must follow these rules:
// Valid IDs
"seo";
"audit-log";
-"@emdashcms/plugin-forms";
+"@emdash-cms/plugin-forms";
// Invalid IDs
"MyPlugin"; // No uppercase
@@ -445,7 +445,7 @@ export function myPlugin(options = {}): PluginDescriptor {
Plugin block components are automatically merged into `` — site authors don't need to import anything. User-provided components take precedence over plugin defaults.
diff --git a/docs/src/content/docs/plugins/installing.mdx b/docs/src/content/docs/plugins/installing.mdx
index 85d7182..38101a8 100644
--- a/docs/src/content/docs/plugins/installing.mdx
+++ b/docs/src/content/docs/plugins/installing.mdx
@@ -102,7 +102,7 @@ For trusted plugins (your own code, or packages you install via npm), add them d
```typescript title="astro.config.mjs"
import { defineConfig } from "astro/config";
import { emdash } from "emdash/astro";
-import seoPlugin from "@emdashcms/plugin-seo";
+import seoPlugin from "@emdash-cms/plugin-seo";
export default defineConfig({
integrations: [
diff --git a/docs/src/content/docs/plugins/overview.mdx b/docs/src/content/docs/plugins/overview.mdx
index 42d12b2..0baf4f0 100644
--- a/docs/src/content/docs/plugins/overview.mdx
+++ b/docs/src/content/docs/plugins/overview.mdx
@@ -135,8 +135,8 @@ Register plugins in your Astro configuration:
```typescript title="astro.config.mjs"
import { defineConfig } from "astro/config";
import { emdash } from "emdash/astro";
-import seoPlugin from "@emdashcms/plugin-seo";
-import auditLogPlugin from "@emdashcms/plugin-audit-log";
+import seoPlugin from "@emdash-cms/plugin-seo";
+import auditLogPlugin from "@emdash-cms/plugin-audit-log";
export default defineConfig({
integrations: [
diff --git a/docs/src/content/docs/plugins/publishing.mdx b/docs/src/content/docs/plugins/publishing.mdx
index f583b93..dfa8825 100644
--- a/docs/src/content/docs/plugins/publishing.mdx
+++ b/docs/src/content/docs/plugins/publishing.mdx
@@ -67,7 +67,7 @@ The bundle command finds your code through `package.json` exports:
| Export | Purpose | Built as |
| ------------ | ------- | -------- |
-| `"."` | Main entry — used to extract the manifest | Externals: `emdash`, `@emdashcms/*` |
+| `"."` | Main entry — used to extract the manifest | Externals: `emdash`, `@emdash-cms/*` |
| `"./sandbox"` | Backend code that runs in the sandbox | Fully self-contained (no externals) |
| `"./admin"` | Admin UI components | Fully self-contained |
diff --git a/docs/src/content/docs/plugins/sandbox.mdx b/docs/src/content/docs/plugins/sandbox.mdx
index acbd893..5587749 100644
--- a/docs/src/content/docs/plugins/sandbox.mdx
+++ b/docs/src/content/docs/plugins/sandbox.mdx
@@ -23,7 +23,7 @@ EmDash supports running plugins in two execution modes: **trusted** and **sandbo
Trusted plugins run in the same process as your Astro site. They are loaded from npm packages or local files and configured in `astro.config.mjs`:
```typescript title="astro.config.mjs"
-import myPlugin from "@emdashcms/plugin-analytics";
+import myPlugin from "@emdash-cms/plugin-analytics";
export default defineConfig({
integrations: [
@@ -54,7 +54,7 @@ To enable sandboxing, configure the sandbox runner in your Astro config:
export default defineConfig({
integrations: [
emdash({
- sandboxRunner: "@emdashcms/cloudflare/sandbox",
+ sandboxRunner: "@emdash-cms/cloudflare/sandbox",
sandboxed: [
{
manifest: seoPluginManifest,
diff --git a/docs/src/content/docs/reference/configuration.mdx b/docs/src/content/docs/reference/configuration.mdx
index 3d0e012..dbe1e43 100644
--- a/docs/src/content/docs/reference/configuration.mdx
+++ b/docs/src/content/docs/reference/configuration.mdx
@@ -49,7 +49,7 @@ database: libsql({
authToken: process.env.LIBSQL_AUTH_TOKEN,
});
-// Cloudflare D1 (import from @emdashcms/cloudflare)
+// Cloudflare D1 (import from @emdash-cms/cloudflare)
database: d1({ binding: "DB" });
```
@@ -90,7 +90,7 @@ See [Storage Options](/deployment/storage/) for details.
**Optional.** Array of EmDash plugins.
```js
-import seoPlugin from "@emdashcms/plugin-seo";
+import seoPlugin from "@emdash-cms/plugin-seo";
plugins: [seoPlugin()];
```
@@ -258,7 +258,7 @@ postgres({ connectionString: process.env.DATABASE_URL });
### `d1(config)`
-Cloudflare D1 database. Import from `@emdashcms/cloudflare`.
+Cloudflare D1 database. Import from `@emdash-cms/cloudflare`.
| Option | Type | Default | Description |
| ---------------- | -------- | -------------------- | --------------------------------------------------- |
@@ -417,7 +417,7 @@ EmDash generates types in `.emdash/types.ts`. Add to your `tsconfig.json`:
{
"compilerOptions": {
"paths": {
- "@emdashcms/types": ["./.emdash/types.ts"]
+ "@emdash-cms/types": ["./.emdash/types.ts"]
}
}
}
diff --git a/docs/src/content/docs/themes/overview.mdx b/docs/src/content/docs/themes/overview.mdx
index 6dd6573..e30af76 100644
--- a/docs/src/content/docs/themes/overview.mdx
+++ b/docs/src/content/docs/themes/overview.mdx
@@ -64,7 +64,7 @@ When you create a site from a theme, this happens:
Use `create-astro` with a template:
```bash
-npm create astro@latest -- --template @emdashcms/template-blog
+npm create astro@latest -- --template @emdash-cms/template-blog
```
Community themes work via GitHub:
@@ -125,18 +125,18 @@ EmDash provides official starter themes, each available in local (SQLite + files
| Theme | Description | Use Case |
| ----- | ----------- | -------- |
-| `@emdashcms/template-blog` | Minimal blog with posts, pages, categories, and dark mode | Personal blogs, simple sites |
-| `@emdashcms/template-portfolio` | Editorial-style portfolio with projects, serif typography (Playfair Display), and image-focused layouts | Freelancers, agencies, creatives |
-| `@emdashcms/template-marketing` | Bold marketing site with custom Portable Text blocks (hero, features, testimonials, pricing, FAQ) | Landing pages, SaaS sites, product marketing |
+| `@emdash-cms/template-blog` | Minimal blog with posts, pages, categories, and dark mode | Personal blogs, simple sites |
+| `@emdash-cms/template-portfolio` | Editorial-style portfolio with projects, serif typography (Playfair Display), and image-focused layouts | Freelancers, agencies, creatives |
+| `@emdash-cms/template-marketing` | Bold marketing site with custom Portable Text blocks (hero, features, testimonials, pricing, FAQ) | Landing pages, SaaS sites, product marketing |
### Cloudflare Variants
For deployment on Cloudflare Pages with D1 and R2, append `-cloudflare` to the template name:
```bash
-npm create astro@latest -- --template @emdashcms/template-blog-cloudflare
-npm create astro@latest -- --template @emdashcms/template-portfolio-cloudflare
-npm create astro@latest -- --template @emdashcms/template-marketing-cloudflare
+npm create astro@latest -- --template @emdash-cms/template-blog-cloudflare
+npm create astro@latest -- --template @emdash-cms/template-portfolio-cloudflare
+npm create astro@latest -- --template @emdash-cms/template-marketing-cloudflare
```
These variants include `wrangler.jsonc` for deployment configuration.
diff --git a/e2e/fixture/astro.config.mjs b/e2e/fixture/astro.config.mjs
index a4cfd9a..57f2919 100644
--- a/e2e/fixture/astro.config.mjs
+++ b/e2e/fixture/astro.config.mjs
@@ -6,7 +6,7 @@
*/
import node from "@astrojs/node";
import react from "@astrojs/react";
-import { colorPlugin } from "@emdashcms/plugin-color";
+import { colorPlugin } from "@emdash-cms/plugin-color";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { sqlite } from "emdash/db";
diff --git a/e2e/fixture/package.json b/e2e/fixture/package.json
index 3fb8ac2..8cffc3c 100644
--- a/e2e/fixture/package.json
+++ b/e2e/fixture/package.json
@@ -5,8 +5,8 @@
"dependencies": {
"@astrojs/node": "catalog:",
"@astrojs/react": "catalog:",
- "@emdashcms/auth": "workspace:*",
- "@emdashcms/plugin-color": "workspace:*",
+ "@emdash-cms/auth": "workspace:*",
+ "@emdash-cms/plugin-color": "workspace:*",
"astro": "catalog:",
"better-sqlite3": "catalog:",
"emdash": "workspace:*",
diff --git a/e2e/global-setup.ts b/e2e/global-setup.ts
index 7d23ed9..3fbedd9 100644
--- a/e2e/global-setup.ts
+++ b/e2e/global-setup.ts
@@ -41,7 +41,7 @@ async function ensureBuilt(): Promise {
/**
* Ensure all e2e fixture dependencies are built.
* The CI build filter (--filter emdash...) only builds emdash and its deps,
- * not the fixture's plugin dependencies like @emdashcms/plugin-color.
+ * not the fixture's plugin dependencies like @emdash-cms/plugin-color.
*/
async function ensureFixtureDepsBuilt(): Promise {
const colorDist = join(ROOT, "packages/plugins/color/dist/index.mjs");
diff --git a/package.json b/package.json
index 9237897..fc051e7 100644
--- a/package.json
+++ b/package.json
@@ -6,12 +6,12 @@
"description": "Agent-portable reimplementation of WordPress on Astro",
"scripts": {
"typecheck": "pnpm run --filter './packages/**' typecheck",
- "typecheck:demos": "pnpm run --workspace-concurrency=1 --filter './demos/*' --filter '!@emdashcms/demo-cloudflare' typecheck",
+ "typecheck:demos": "pnpm run --workspace-concurrency=1 --filter './demos/*' --filter '!@emdash-cms/demo-cloudflare' typecheck",
"typecheck:templates": "pnpm run --workspace-concurrency=1 --filter './templates/*' typecheck",
"check": "pnpm run typecheck && pnpm run --filter './packages/*' check",
"test": "pnpm run --filter './packages/*' test",
- "test:unit": "pnpm run --filter emdash --filter @emdashcms/auth --filter @emdashcms/blocks --filter @emdashcms/gutenberg-to-portable-text --filter @emdashcms/marketplace test",
- "test:browser": "pnpm run --filter @emdashcms/admin test",
+ "test:unit": "pnpm run --filter emdash --filter @emdash-cms/auth --filter @emdash-cms/blocks --filter @emdash-cms/gutenberg-to-portable-text --filter @emdash-cms/marketplace test",
+ "test:browser": "pnpm run --filter @emdash-cms/admin test",
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"build": "pnpm run --filter './packages/**' build",
diff --git a/packages/admin/package.json b/packages/admin/package.json
index ae4becf..fb83a44 100644
--- a/packages/admin/package.json
+++ b/packages/admin/package.json
@@ -1,5 +1,5 @@
{
- "name": "@emdashcms/admin",
+ "name": "@emdash-cms/admin",
"version": "0.0.0",
"description": "Admin UI for EmDash CMS",
"type": "module",
@@ -27,7 +27,7 @@
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
- "@emdashcms/blocks": "workspace:*",
+ "@emdash-cms/blocks": "workspace:*",
"@floating-ui/react": "^0.27.16",
"@phosphor-icons/react": "catalog:",
"@tanstack/react-query": "catalog:",
diff --git a/packages/admin/src/components/AdminCommandPalette.tsx b/packages/admin/src/components/AdminCommandPalette.tsx
index 0e24c64..3ccf5b7 100644
--- a/packages/admin/src/components/AdminCommandPalette.tsx
+++ b/packages/admin/src/components/AdminCommandPalette.tsx
@@ -28,7 +28,7 @@ import { useHotkeys } from "react-hotkeys-hook";
import { apiFetch } from "../lib/api/client";
import { useCurrentUser } from "../lib/api/current-user";
-// Role levels (matching @emdashcms/auth)
+// Role levels (matching @emdash-cms/auth)
const ROLE_ADMIN = 50;
const ROLE_EDITOR = 40;
diff --git a/packages/admin/src/components/BlockKitFieldWidget.tsx b/packages/admin/src/components/BlockKitFieldWidget.tsx
index a12c4f5..eb8e242 100644
--- a/packages/admin/src/components/BlockKitFieldWidget.tsx
+++ b/packages/admin/src/components/BlockKitFieldWidget.tsx
@@ -1,5 +1,5 @@
import { Input, Switch } from "@cloudflare/kumo";
-import type { Element } from "@emdashcms/blocks";
+import type { Element } from "@emdash-cms/blocks";
import * as React from "react";
interface BlockKitFieldWidgetProps {
diff --git a/packages/admin/src/components/ContentEditor.tsx b/packages/admin/src/components/ContentEditor.tsx
index 24759b2..d7ddf01 100644
--- a/packages/admin/src/components/ContentEditor.tsx
+++ b/packages/admin/src/components/ContentEditor.tsx
@@ -69,7 +69,7 @@ import { SaveButton } from "./SaveButton";
import { SeoPanel } from "./SeoPanel";
import { TaxonomySidebar } from "./TaxonomySidebar";
-// Editor role level (40) from @emdashcms/auth
+// Editor role level (40) from @emdash-cms/auth
const ROLE_EDITOR = 40;
export interface FieldDescriptor {
diff --git a/packages/admin/src/components/PortableTextEditor.tsx b/packages/admin/src/components/PortableTextEditor.tsx
index 6100ca4..536297d 100644
--- a/packages/admin/src/components/PortableTextEditor.tsx
+++ b/packages/admin/src/components/PortableTextEditor.tsx
@@ -41,7 +41,7 @@ import {
type Icon,
} from "@phosphor-icons/react";
import { X } from "@phosphor-icons/react";
-import type { Element } from "@emdashcms/blocks";
+import type { Element } from "@emdash-cms/blocks";
import { Extension, type Range } from "@tiptap/core";
import CharacterCount from "@tiptap/extension-character-count";
import Focus from "@tiptap/extension-focus";
diff --git a/packages/admin/src/components/SandboxedPluginPage.tsx b/packages/admin/src/components/SandboxedPluginPage.tsx
index 39e79d8..588da73 100644
--- a/packages/admin/src/components/SandboxedPluginPage.tsx
+++ b/packages/admin/src/components/SandboxedPluginPage.tsx
@@ -6,8 +6,8 @@
*/
import { CircleNotch, WarningCircle } from "@phosphor-icons/react";
-import { BlockRenderer } from "@emdashcms/blocks";
-import type { Block, BlockInteraction, BlockResponse } from "@emdashcms/blocks";
+import { BlockRenderer } from "@emdash-cms/blocks";
+import type { Block, BlockInteraction, BlockResponse } from "@emdash-cms/blocks";
import { useCallback, useEffect, useState } from "react";
import { apiFetch, API_BASE } from "../lib/api/client.js";
diff --git a/packages/admin/src/components/SandboxedPluginWidget.tsx b/packages/admin/src/components/SandboxedPluginWidget.tsx
index 271eae7..1e105fa 100644
--- a/packages/admin/src/components/SandboxedPluginWidget.tsx
+++ b/packages/admin/src/components/SandboxedPluginWidget.tsx
@@ -6,8 +6,8 @@
*/
import { CircleNotch } from "@phosphor-icons/react";
-import { BlockRenderer } from "@emdashcms/blocks";
-import type { Block, BlockInteraction, BlockResponse } from "@emdashcms/blocks";
+import { BlockRenderer } from "@emdash-cms/blocks";
+import type { Block, BlockInteraction, BlockResponse } from "@emdash-cms/blocks";
import { useCallback, useEffect, useState } from "react";
import { apiFetch, API_BASE } from "../lib/api/client.js";
diff --git a/packages/admin/src/components/Sidebar.tsx b/packages/admin/src/components/Sidebar.tsx
index 92d2841..2e9ac77 100644
--- a/packages/admin/src/components/Sidebar.tsx
+++ b/packages/admin/src/components/Sidebar.tsx
@@ -28,7 +28,7 @@ import { cn } from "../lib/utils";
// Re-export for Shell.tsx and Header.tsx
export { KumoSidebar as Sidebar, useSidebar };
-// Role levels (matching @emdashcms/auth)
+// Role levels (matching @emdash-cms/auth)
const ROLE_ADMIN = 50;
const ROLE_EDITOR = 40;
diff --git a/packages/admin/src/components/editor/PluginBlockNode.tsx b/packages/admin/src/components/editor/PluginBlockNode.tsx
index fad31bf..8f9eb64 100644
--- a/packages/admin/src/components/editor/PluginBlockNode.tsx
+++ b/packages/admin/src/components/editor/PluginBlockNode.tsx
@@ -24,7 +24,7 @@ import {
Cube,
ListBullets,
} from "@phosphor-icons/react";
-import type { Element } from "@emdashcms/blocks";
+import type { Element } from "@emdash-cms/blocks";
import { Node, mergeAttributes } from "@tiptap/core";
import type { NodeViewProps } from "@tiptap/react";
import { ReactNodeViewRenderer, NodeViewWrapper } from "@tiptap/react";
diff --git a/packages/admin/src/lib/api/client.ts b/packages/admin/src/lib/api/client.ts
index fd4798a..721b113 100644
--- a/packages/admin/src/lib/api/client.ts
+++ b/packages/admin/src/lib/api/client.ts
@@ -2,7 +2,7 @@
* Base API client configuration and shared types
*/
-import type { Element } from "@emdashcms/blocks";
+import type { Element } from "@emdash-cms/blocks";
export const API_BASE = "/_emdash/api";
@@ -72,7 +72,7 @@ export interface AdminManifest {
{
name?: string;
version?: string;
- /** Package name for dynamic import (e.g., "@emdashcms/plugin-audit-log") */
+ /** Package name for dynamic import (e.g., "@emdash-cms/plugin-audit-log") */
package?: string;
/** Whether the plugin is enabled */
enabled?: boolean;
@@ -97,7 +97,7 @@ export interface AdminManifest {
name: string;
label: string;
fieldTypes: string[];
- elements?: import("@emdashcms/blocks").Element[];
+ elements?: import("@emdash-cms/blocks").Element[];
}>;
/** Block types for Portable Text editor */
portableTextBlocks?: Array<{
diff --git a/packages/admin/src/router.tsx b/packages/admin/src/router.tsx
index ddf64f8..bf82584 100644
--- a/packages/admin/src/router.tsx
+++ b/packages/admin/src/router.tsx
@@ -469,7 +469,7 @@ const contentEditRoute = createRoute({
component: ContentEditPage,
});
-// Editor role level from @emdashcms/auth
+// Editor role level from @emdash-cms/auth
const ROLE_EDITOR = 40;
function ContentEditPage() {
@@ -889,7 +889,7 @@ const commentsRoute = createRoute({
component: CommentsPage,
});
-// Admin role level from @emdashcms/auth
+// Admin role level from @emdash-cms/auth
const ROLE_ADMIN = 50;
function CommentsPage() {
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 5f00ba8..4a739c3 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -1,5 +1,5 @@
{
- "name": "@emdashcms/auth",
+ "name": "@emdash-cms/auth",
"version": "0.0.0",
"description": "Passkey-first authentication for EmDash",
"type": "module",
diff --git a/packages/auth/src/adapters/kysely.ts b/packages/auth/src/adapters/kysely.ts
index d278946..24d3207 100644
--- a/packages/auth/src/adapters/kysely.ts
+++ b/packages/auth/src/adapters/kysely.ts
@@ -1,5 +1,5 @@
/**
- * Kysely database adapter for @emdashcms/auth
+ * Kysely database adapter for @emdash-cms/auth
*/
import type { Kysely, Insertable, Selectable, Updateable } from "kysely";
diff --git a/packages/auth/src/config.ts b/packages/auth/src/config.ts
index b979a43..1d930ec 100644
--- a/packages/auth/src/config.ts
+++ b/packages/auth/src/config.ts
@@ -1,5 +1,5 @@
/**
- * Configuration schema for @emdashcms/auth
+ * Configuration schema for @emdash-cms/auth
*/
import { z } from "zod";
diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts
index 9c2a6af..9c39814 100644
--- a/packages/auth/src/index.ts
+++ b/packages/auth/src/index.ts
@@ -1,5 +1,5 @@
/**
- * @emdashcms/auth - Passkey-first authentication for EmDash
+ * @emdash-cms/auth - Passkey-first authentication for EmDash
*
* Email is now handled by the plugin email pipeline (see PLUGIN-EMAIL.md).
* Auth functions accept an optional `email` send function instead of a
@@ -8,7 +8,7 @@
*
* @example
* ```ts
- * import { auth } from '@emdashcms/auth'
+ * import { auth } from '@emdash-cms/auth'
*
* export default defineConfig({
* integrations: [
diff --git a/packages/auth/src/types.ts b/packages/auth/src/types.ts
index c9c26a3..0cd2c46 100644
--- a/packages/auth/src/types.ts
+++ b/packages/auth/src/types.ts
@@ -1,5 +1,5 @@
/**
- * Core types for @emdashcms/auth
+ * Core types for @emdash-cms/auth
*/
// ============================================================================
diff --git a/packages/blocks/package.json b/packages/blocks/package.json
index eb1fb99..e0c6444 100644
--- a/packages/blocks/package.json
+++ b/packages/blocks/package.json
@@ -1,5 +1,5 @@
{
- "name": "@emdashcms/blocks",
+ "name": "@emdash-cms/blocks",
"version": "0.0.0",
"description": "Declarative plugin UI blocks for EmDash CMS",
"type": "module",
diff --git a/packages/blocks/playground/package.json b/packages/blocks/playground/package.json
index 76240f6..5959e0b 100644
--- a/packages/blocks/playground/package.json
+++ b/packages/blocks/playground/package.json
@@ -1,5 +1,5 @@
{
- "name": "@emdashcms/blocks-playground",
+ "name": "@emdash-cms/blocks-playground",
"version": "0.0.0",
"private": true,
"type": "module",
@@ -9,7 +9,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@emdashcms/blocks": "workspace:*",
+ "@emdash-cms/blocks": "workspace:*",
"@cloudflare/kumo": "^1.1.0",
"@phosphor-icons/react": "catalog:",
"react": "catalog:",
diff --git a/packages/blocks/playground/src/Playground.tsx b/packages/blocks/playground/src/Playground.tsx
index 82d3ecc..4bf052b 100644
--- a/packages/blocks/playground/src/Playground.tsx
+++ b/packages/blocks/playground/src/Playground.tsx
@@ -1,6 +1,6 @@
import { Sun, Moon, Share, Check, Trash, CaretDown, Warning, Plus } from "@phosphor-icons/react";
-import { BlockRenderer, validateBlocks } from "@emdashcms/blocks";
-import type { Block, BlockInteraction } from "@emdashcms/blocks";
+import { BlockRenderer, validateBlocks } from "@emdash-cms/blocks";
+import type { Block, BlockInteraction } from "@emdash-cms/blocks";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { blockCatalog } from "./block-defaults";
diff --git a/packages/blocks/playground/src/block-defaults.ts b/packages/blocks/playground/src/block-defaults.ts
index 0b1bace..ea607a6 100644
--- a/packages/blocks/playground/src/block-defaults.ts
+++ b/packages/blocks/playground/src/block-defaults.ts
@@ -1,4 +1,4 @@
-import type { Block } from "@emdashcms/blocks";
+import type { Block } from "@emdash-cms/blocks";
interface BlockCatalogEntry {
type: Block["type"];
diff --git a/packages/blocks/playground/src/templates.ts b/packages/blocks/playground/src/templates.ts
index ff3ddd2..7f6de91 100644
--- a/packages/blocks/playground/src/templates.ts
+++ b/packages/blocks/playground/src/templates.ts
@@ -1,4 +1,4 @@
-import type { Block, ChartSeries } from "@emdashcms/blocks";
+import type { Block, ChartSeries } from "@emdash-cms/blocks";
export interface Template {
name: string;
@@ -508,7 +508,7 @@ export const templates: Template[] = [
},
{
type: "code",
- code: 'import { blocks } from "@emdashcms/blocks";\n\nconst page = [\n\tblocks.header("Hello"),\n\tblocks.section("Welcome to EmDash."),\n];',
+ code: 'import { blocks } from "@emdash-cms/blocks";\n\nconst page = [\n\tblocks.header("Hello"),\n\tblocks.section("Welcome to EmDash."),\n];',
language: "ts",
},
{ type: "divider" },
diff --git a/packages/blocks/playground/vite.config.ts b/packages/blocks/playground/vite.config.ts
index 6dff4fd..79faa3b 100644
--- a/packages/blocks/playground/vite.config.ts
+++ b/packages/blocks/playground/vite.config.ts
@@ -6,8 +6,8 @@ export default defineConfig({
plugins: [react(), tailwindcss()],
resolve: {
alias: {
- // Resolve @emdashcms/blocks from source for HMR
- "@emdashcms/blocks": new URL("../src/index.ts", import.meta.url).pathname,
+ // Resolve @emdash-cms/blocks from source for HMR
+ "@emdash-cms/blocks": new URL("../src/index.ts", import.meta.url).pathname,
},
},
});
diff --git a/packages/blocks/src/server.ts b/packages/blocks/src/server.ts
index 47bdb90..a0f1698 100644
--- a/packages/blocks/src/server.ts
+++ b/packages/blocks/src/server.ts
@@ -1,5 +1,5 @@
/**
- * Server-safe exports for @emdashcms/blocks.
+ * Server-safe exports for @emdash-cms/blocks.
*
* Use this entry point in plugin route handlers and other server-side code
* that doesn't have React available. Provides builders, validation, and types
diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json
index 54fa361..cc3d7a6 100644
--- a/packages/cloudflare/package.json
+++ b/packages/cloudflare/package.json
@@ -1,5 +1,5 @@
{
- "name": "@emdashcms/cloudflare",
+ "name": "@emdash-cms/cloudflare",
"version": "0.0.0",
"description": "Cloudflare adapters for EmDash - D1, R2, Access, and Worker Loader sandbox",
"type": "module",
diff --git a/packages/cloudflare/src/auth/index.ts b/packages/cloudflare/src/auth/index.ts
index 06af791..69cee15 100644
--- a/packages/cloudflare/src/auth/index.ts
+++ b/packages/cloudflare/src/auth/index.ts
@@ -4,7 +4,7 @@
* This module is loaded at runtime when authenticating requests.
* It exports the `authenticate` function required by the auth provider interface.
*
- * For config-time usage, import { access } from "@emdashcms/cloudflare" instead.
+ * For config-time usage, import { access } from "@emdash-cms/cloudflare" instead.
*/
export { authenticate } from "./cloudflare-access.js";
diff --git a/packages/cloudflare/src/cache/config.ts b/packages/cloudflare/src/cache/config.ts
index 0d94138..053d123 100644
--- a/packages/cloudflare/src/cache/config.ts
+++ b/packages/cloudflare/src/cache/config.ts
@@ -4,7 +4,7 @@
* This is the config-time helper. Import it in your astro.config.mjs:
*
* ```ts
- * import { cloudflareCache } from "@emdashcms/cloudflare";
+ * import { cloudflareCache } from "@emdash-cms/cloudflare";
*
* export default defineConfig({
* experimental: {
@@ -49,7 +49,7 @@ export type { CloudflareCacheConfig };
* ```ts
* import { defineConfig } from "astro/config";
* import cloudflare from "@astrojs/cloudflare";
- * import { cloudflareCache } from "@emdashcms/cloudflare";
+ * import { cloudflareCache } from "@emdash-cms/cloudflare";
*
* export default defineConfig({
* adapter: cloudflare(),
@@ -75,7 +75,7 @@ export function cloudflareCache(
): CacheProviderConfig {
return {
// Resolved by Vite/Astro at build time — points to the runtime module
- entrypoint: "@emdashcms/cloudflare/cache",
+ entrypoint: "@emdash-cms/cloudflare/cache",
config,
};
}
diff --git a/packages/cloudflare/src/cache/runtime.ts b/packages/cloudflare/src/cache/runtime.ts
index 927b416..0d3bd2c 100644
--- a/packages/cloudflare/src/cache/runtime.ts
+++ b/packages/cloudflare/src/cache/runtime.ts
@@ -15,7 +15,7 @@
* headers from the response that next() returns.
*
* Do NOT import this at config time. Use cloudflareCache() from
- * "@emdashcms/cloudflare" or "@emdashcms/cloudflare/cache/config" instead.
+ * "@emdash-cms/cloudflare" or "@emdash-cms/cloudflare/cache/config" instead.
*/
import type { CacheProviderFactory } from "astro";
@@ -41,7 +41,7 @@ const SWR_REGEX = /stale-while-revalidate=(\d+)/;
/** Internal headers to strip before returning responses to the client */
const INTERNAL_HEADERS = [STORED_AT_HEADER, MAX_AGE_HEADER, SWR_HEADER];
-/** Default D1 bookmark cookie name (from @emdashcms/cloudflare d1 config) */
+/** Default D1 bookmark cookie name (from @emdash-cms/cloudflare d1 config) */
const DEFAULT_BOOKMARK_COOKIE = "__ec_d1_bookmark";
export interface CloudflareCacheConfig {
diff --git a/packages/cloudflare/src/db/d1.ts b/packages/cloudflare/src/db/d1.ts
index 83f03ab..4ef0e89 100644
--- a/packages/cloudflare/src/db/d1.ts
+++ b/packages/cloudflare/src/db/d1.ts
@@ -5,7 +5,7 @@
* Loaded at runtime via virtual module when database queries are needed.
*
* This module imports directly from cloudflare:workers to access the D1 binding.
- * Do NOT import this at config time - use { d1 } from "@emdashcms/cloudflare" instead.
+ * Do NOT import this at config time - use { d1 } from "@emdash-cms/cloudflare" instead.
*/
import { env } from "cloudflare:workers";
diff --git a/packages/cloudflare/src/db/do-preview.ts b/packages/cloudflare/src/db/do-preview.ts
index dc69fff..6a9b0be 100644
--- a/packages/cloudflare/src/db/do-preview.ts
+++ b/packages/cloudflare/src/db/do-preview.ts
@@ -11,7 +11,7 @@
* @example
* ```ts
* // src/middleware.ts (in the preview Worker)
- * import { createPreviewMiddleware } from "@emdashcms/cloudflare/db/do";
+ * import { createPreviewMiddleware } from "@emdash-cms/cloudflare/db/do";
*
* export const onRequest = createPreviewMiddleware({
* binding: "PREVIEW_DB",
diff --git a/packages/cloudflare/src/db/playground-middleware.ts b/packages/cloudflare/src/db/playground-middleware.ts
index 00885aa..e56b552 100644
--- a/packages/cloudflare/src/db/playground-middleware.ts
+++ b/packages/cloudflare/src/db/playground-middleware.ts
@@ -320,7 +320,7 @@ export const onRequest = defineMiddleware(async (context, next) => {
// Stash the DO database and user on locals so downstream middleware
// (runtime init, request-context) can use them. We can't use ALS directly
- // because this middleware is in @emdashcms/cloudflare and resolves to a
+ // because this middleware is in @emdash-cms/cloudflare and resolves to a
// different AsyncLocalStorage instance than the emdash core package
// (workerd loads dist modules separately from Vite's source modules).
// The request-context middleware (same module context as the loader)
diff --git a/packages/cloudflare/src/index.ts b/packages/cloudflare/src/index.ts
index 08fdb6f..3fcb108 100644
--- a/packages/cloudflare/src/index.ts
+++ b/packages/cloudflare/src/index.ts
@@ -1,5 +1,5 @@
/**
- * @emdashcms/cloudflare
+ * @emdash-cms/cloudflare
*
* Cloudflare adapters for EmDash:
* - D1 database adapter
@@ -12,13 +12,13 @@
*
* For runtime exports (PluginBridge, authenticate), import from the specific
* runtime entrypoints:
- * - @emdashcms/cloudflare/sandbox (PluginBridge, createSandboxRunner)
- * - @emdashcms/cloudflare/auth (authenticate)
+ * - @emdash-cms/cloudflare/sandbox (PluginBridge, createSandboxRunner)
+ * - @emdash-cms/cloudflare/auth (authenticate)
*
* @example
* ```ts
* import emdash from "emdash/astro";
- * import { d1, r2, access, sandbox } from "@emdashcms/cloudflare";
+ * import { d1, r2, access, sandbox } from "@emdash-cms/cloudflare";
*
* export default defineConfig({
* integrations: [
@@ -160,7 +160,7 @@ export interface AccessConfig {
*/
export function d1(config: D1Config): DatabaseDescriptor {
return {
- entrypoint: "@emdashcms/cloudflare/db/d1",
+ entrypoint: "@emdash-cms/cloudflare/db/d1",
config,
type: "sqlite",
};
@@ -183,7 +183,7 @@ export type { PreviewDOConfig } from "./db/do-types.js";
*/
export function previewDatabase(config: PreviewDOConfig): DatabaseDescriptor {
return {
- entrypoint: "@emdashcms/cloudflare/db/do",
+ entrypoint: "@emdash-cms/cloudflare/db/do",
config,
type: "sqlite",
};
@@ -205,7 +205,7 @@ export function previewDatabase(config: PreviewDOConfig): DatabaseDescriptor {
*/
export function playgroundDatabase(config: PreviewDOConfig): DatabaseDescriptor {
return {
- entrypoint: "@emdashcms/cloudflare/db/playground",
+ entrypoint: "@emdash-cms/cloudflare/db/playground",
config,
type: "sqlite",
};
@@ -231,7 +231,7 @@ export function playgroundDatabase(config: PreviewDOConfig): DatabaseDescriptor
*/
export function r2(config: R2StorageConfig): StorageDescriptor {
return {
- entrypoint: "@emdashcms/cloudflare/storage/r2",
+ entrypoint: "@emdash-cms/cloudflare/storage/r2",
config: { binding: config.binding, publicUrl: config.publicUrl },
};
}
@@ -257,7 +257,7 @@ export function r2(config: R2StorageConfig): StorageDescriptor {
export function access(config: AccessConfig): AuthDescriptor {
return {
type: "cloudflare-access",
- entrypoint: "@emdashcms/cloudflare/auth",
+ entrypoint: "@emdash-cms/cloudflare/auth",
config,
};
}
@@ -274,7 +274,7 @@ export function access(config: AccessConfig): AuthDescriptor {
* ```
*/
export function sandbox(): string {
- return "@emdashcms/cloudflare/sandbox";
+ return "@emdash-cms/cloudflare/sandbox";
}
// Re-export media providers (config-time)
diff --git a/packages/cloudflare/src/media/images.ts b/packages/cloudflare/src/media/images.ts
index a6c5577..82dadfe 100644
--- a/packages/cloudflare/src/media/images.ts
+++ b/packages/cloudflare/src/media/images.ts
@@ -79,7 +79,7 @@ const IMAGES_ICON = `data:image/svg+xml,${encodeURIComponent('