Erste Schritte

Auf dieser Seite

Diese Anleitung führt dich durch die Erstellung deiner ersten EmDash-Website – von der Installation bis zur Veröffentlichung deines ersten Beitrags.

Voraussetzungen

  • Node.js v22.12.0 oder höher (ungerade Versionsnummern werden nicht unterstützt)
  • npm, pnpm oder yarn
  • Ein Code-Editor (VS Code empfohlen)

Neues Projekt erstellen

npm

npm create emdash@latest

pnpm

pnpm create emdash@latest

yarn

yarn create emdash

Folge den Eingabeaufforderungen, um dein Projekt zu benennen und deine Einstellungen festzulegen.

Entwicklungsserver starten

  1. Wechsle in dein Projektverzeichnis:

    cd my-emdash-site
  2. Installiere die Abhängigkeiten:

    npm install
  3. Starte den Entwicklungsserver:

    npm run dev
  4. Öffne im Browser http://localhost:4321

Setup-Assistent abschließen

Wenn du das Admin-Panel zum ersten Mal aufrufst, führt dich der EmDash-Setup-Assistent durch die Erstkonfiguration:

  1. Öffne http://localhost:4321/_emdash/admin

  2. Du wirst zum Setup-Assistenten weitergeleitet. Gib Folgendes ein:

    • Site Title — Der Name deiner Website
    • Tagline — Eine kurze Beschreibung
    • Admin Email — Deine E-Mail-Adresse
  3. Klicke auf Create Site, um deinen Passkey zu registrieren

  4. Dein Browser fordert dich auf, einen Passkey mit Touch ID, Face ID, Windows Hello oder einem Sicherheitsschlüssel zu erstellen

Sobald dein Passkey registriert ist, bist du angemeldet und wirst zum Admin-Dashboard weitergeleitet.

EmDash-Admin-Dashboard mit Inhaltsübersicht, jüngsten Aktivitäten und Navigationsleiste

Dein erster Beitrag

  1. Klicke in der Admin-Seitenleiste unter Content auf Posts.

  2. Klicke auf New Post.

  3. Gib einen Titel ein und schreibe Inhalte im Rich-Text-Editor.

    EmDash-Beitragseditor mit Rich-Text-Werkzeugleiste und Veröffentlichungs-Seitenleiste
  4. Setze den Status auf Published und klicke auf Save.

  5. Öffne die Startseite deiner Website, um deinen Beitrag live zu sehen – ganz ohne Rebuild!

Projektstruktur

Dein EmDash-Projekt folgt einer Standard-Astro-Struktur mit einigen Ergänzungen:

my-emdash-site/
├── astro.config.mjs      # Astro- + EmDash-Konfiguration
├── src/
│   ├── live.config.ts    # Live-Collections-Konfiguration
│   ├── pages/
│   │   ├── index.astro   # Startseite
│   │   └── posts/
│   │       └── [...slug].astro  # Dynamische Beitragsseiten
│   ├── layouts/
│   │   └── Base.astro    # Basis-Layout
│   └── components/       # Deine Astro-Komponenten
├── .emdash/
│   ├── seed.json         # Seed-Datei des Templates
│   └── types.ts          # Generierte TypeScript-Typen
└── package.json

Konfigurationsdateien

astro.config.mjs

Damit wird EmDash als Astro-Integration konfiguriert:

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",
			}),
		}),
	],
});

src/live.config.ts

Damit wird EmDash mit Astros Content-System verbunden:

import { defineLiveCollection } from "astro:content";
import { emdashLoader } from "emdash/runtime";

export const collections = {
	_emdash: defineLiveCollection({ loader: emdashLoader() }),
};

Umgebungsvariablen

Für Produktionsdeployments musst du Folgendes setzen:

# Required for authentication
EMDASH_AUTH_SECRET=your-secret-here

# Optional: for content preview
EMDASH_PREVIEW_SECRET=your-preview-secret

Erzeuge ein sicheres Auth-Secret mit:

npx emdash auth secret

Inhalte in Seiten abfragen

Verwende EmDash-Abfragefunktionen in deinen Astro-Seiten. Sie folgen dem Live-Collections-Muster von Astro und liefern für Collections { entries, error } sowie für einzelne Einträge { entry, error } zurück:

---
import { getEmDashCollection } from "emdash";
import Base from "../layouts/Base.astro";

const { entries: posts } = await getEmDashCollection("posts");
---

<Base title="Home">
  <h1>Latest Posts</h1>
  <ul>
    {posts.map((post) => (
      <li>
        <a href={`/posts/${post.slug}`}>{post.data.title}</a>
      </li>
    ))}
  </ul>
</Base>

Für einzelne Einträge:

---
import { getEmDashEntry } from "emdash";

const { slug } = Astro.params;
const { entry: post } = await getEmDashEntry("posts", slug);

if (!post) {
  return Astro.redirect("/404");
}
---

<h1>{post.data.title}</h1>

TypeScript-Typen erzeugen

Für vollständige Typsicherheit generierst du Typen aus deinem Datenbankschema:

npx emdash types

Dadurch wird .emdash/types.ts mit Interfaces für all deine Collections erstellt. Dein Editor vervollständigt nun Feldnamen automatisch und erkennt Typfehler.

Nächste Schritte

Du hast jetzt eine funktionierende EmDash-Website! Hier geht es weiter: