b3a7f98e5a
CI / E2E Cloudflare (4/8) (push) Failing after 0s
CI / E2E Cloudflare (8/8) (push) Failing after 1s
CI / Lint (push) Failing after 1s
Auto Extract / Extract (push) Failing after 4s
CI / Version Check (push) Failing after 9s
CI / Integration Tests (push) Failing after 1s
CI / E2E tests (1/8) (push) Failing after 1s
CI / E2E tests (2/8) (push) Failing after 2s
CI / E2E tests (3/8) (push) Failing after 2s
CI / Browser Tests (push) Failing after 1s
CI / E2E tests (5/8) (push) Failing after 1s
CI / E2E Cloudflare (2/8) (push) Failing after 2s
CI / Typecheck (push) Failing after 1s
CI / Changeset Validation (push) Failing after 2s
CI / E2E Cloudflare (5/8) (push) Failing after 1s
CI / E2E Cloudflare (6/8) (push) Failing after 1s
CI / E2E Cloudflare (7/8) (push) Failing after 1s
CodeQL / Analyze (javascript-typescript) (push) Failing after 1s
Format / Format (push) Failing after 0s
CodeQL / Analyze (actions) (push) Failing after 4s
CI / E2E tests (4/8) (push) Failing after 1s
CI / E2E tests (6/8) (push) Failing after 1s
CI / E2E tests (7/8) (push) Failing after 2s
CI / E2E tests (8/8) (push) Failing after 1s
CI / E2E Cloudflare (1/8) (push) Failing after 1s
CI / E2E Cloudflare (3/8) (push) Failing after 2s
Preview Releases / Publish Preview (push) Failing after 0s
zizmor / Run zizmor (push) Failing after 1s
Release / Release (push) Failing after 2s
CI / Smoke Tests (push) Failing after 5m36s
CI / Tests (push) Failing after 6m36s
Release / Sync Templates (push) Has been skipped
CI / E2E Tests (push) Has been cancelled
90 lines
2.1 KiB
Markdown
90 lines
2.1 KiB
Markdown
# emdash
|
|
|
|
The core EmDash CMS package - an Astro-native, agent-portable reimplementation of WordPress.
|
|
|
|
## Installation
|
|
|
|
```shell
|
|
npm install emdash
|
|
```
|
|
|
|
## Features
|
|
|
|
- **Content Management** - Collections, fields, Live Collections integration
|
|
- **Media Library** - Upload via signed URLs, S3-compatible storage
|
|
- **Full-Text Search** - FTS5 with Porter stemming, per-collection config
|
|
- **Navigation Menus** - Hierarchical menus with URL resolution
|
|
- **Taxonomies** - Categories, tags, custom taxonomies
|
|
- **Widget Areas** - Content, menu, and component widgets
|
|
- **Sections** - Reusable content blocks
|
|
- **Plugin System** - Hooks, storage, settings, admin pages
|
|
- **WordPress Import** - WXR, REST API, WordPress.com
|
|
|
|
## Quick Start
|
|
|
|
```typescript
|
|
// astro.config.mjs
|
|
import { defineConfig } from "astro/config";
|
|
import emdash, { local } from "emdash/astro";
|
|
import { sqlite } from "emdash/db";
|
|
|
|
export default defineConfig({
|
|
integrations: [
|
|
emdash({
|
|
database: sqlite({ url: "file:./data.db" }),
|
|
storage: local({
|
|
directory: "./uploads",
|
|
baseUrl: "/_emdash/api/media/file",
|
|
}),
|
|
}),
|
|
],
|
|
});
|
|
```
|
|
|
|
```typescript
|
|
// src/live.config.ts
|
|
import { defineLiveCollection } from "astro:content";
|
|
import { emdashLoader } from "emdash/runtime";
|
|
|
|
export const collections = {
|
|
_emdash: defineLiveCollection({ loader: emdashLoader() }),
|
|
};
|
|
```
|
|
|
|
## API
|
|
|
|
```typescript
|
|
import {
|
|
getEmDashCollection,
|
|
getEmDashEntry,
|
|
getSiteSettings,
|
|
getMenu,
|
|
getTaxonomyTerms,
|
|
getWidgetArea,
|
|
search,
|
|
} from "emdash";
|
|
|
|
// Content
|
|
const { entries } = await getEmDashCollection("posts");
|
|
const { entry } = await getEmDashEntry("posts", "hello-world");
|
|
|
|
// Site settings
|
|
const settings = await getSiteSettings();
|
|
|
|
// Navigation
|
|
const menu = await getMenu("primary");
|
|
|
|
// Taxonomies
|
|
const categories = await getTaxonomyTerms("categories");
|
|
|
|
// Widgets
|
|
const sidebar = await getWidgetArea("sidebar");
|
|
|
|
// Search
|
|
const results = await search("hello world", { collections: ["posts"] });
|
|
```
|
|
|
|
## Documentation
|
|
|
|
See the [documentation site](https://docs.emdashcms.com) for guides, API reference, and plugin development.
|