Primeros pasos

En esta página

Esta guía te lleva desde la instalación hasta publicar tu primera entrada en un sitio EmDash.

Requisitos previos

  • Node.js v22.12.0 o superior (no se admiten versiones impares)
  • npm, pnpm o yarn
  • Un editor de código (se recomienda VS Code)

Crear un proyecto nuevo

npm

npm create emdash@latest

pnpm

pnpm create emdash@latest

yarn

yarn create emdash

Sigue las indicaciones para nombrar el proyecto y configurar tus preferencias.

Iniciar el servidor de desarrollo

  1. Entra en el directorio del proyecto:

    cd my-emdash-site
  2. Instala las dependencias:

    npm install
  3. Arranca el servidor de desarrollo:

    npm run dev
  4. Abre el navegador en http://localhost:4321

Completar el asistente de configuración

La primera vez que visites el panel de administración, el asistente de configuración de EmDash te guía en la configuración inicial:

  1. Ve a http://localhost:4321/_emdash/admin

  2. Serás redirigido al asistente. Introduce:

    • Site Title — El nombre de tu sitio
    • Tagline — Una breve descripción
    • Admin Email — Tu correo electrónico
  3. Haz clic en Create Site para registrar tu passkey

  4. El navegador te pedirá crear un passkey con Touch ID, Face ID, Windows Hello o una llave de seguridad

Cuando el passkey esté registrado, iniciarás sesión y serás redirigido al panel de administración.

Panel de administración de EmDash con resumen de contenido, actividad reciente y barra lateral de navegación

Tu primera entrada

  1. En la barra lateral del admin, haz clic en Posts dentro de Content.

  2. Haz clic en New Post.

  3. Escribe un título y algo de contenido con el editor de texto enriquecido.

    Editor de entradas de EmDash con barra de herramientas de texto enriquecido y barra lateral de publicación
  4. Pon el estado en Published y haz clic en Save.

  5. Visita la página principal de tu sitio para ver la entrada en vivo, ¡sin reconstruir!

Estructura del proyecto

Tu proyecto EmDash sigue la estructura habitual de Astro con algunos añadidos:

my-emdash-site/
├── astro.config.mjs      # Configuración de Astro + EmDash
├── src/
│   ├── live.config.ts    # Configuración de Live Collections
│   ├── pages/
│   │   ├── index.astro   # Página de inicio
│   │   └── posts/
│   │       └── [...slug].astro  # Páginas dinámicas de entradas
│   ├── layouts/
│   │   └── Base.astro    # Diseño base
│   └── components/       # Tus componentes Astro
├── .emdash/
│   ├── seed.json         # Archivo semilla de la plantilla
│   └── types.ts          # Tipos TypeScript generados
└── package.json

Archivos de configuración

astro.config.mjs

Configura EmDash como integración de Astro:

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

Conecta EmDash al sistema de contenidos de Astro:

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

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

Variables de entorno

En despliegues de producción necesitarás definir:

# Required for authentication
EMDASH_AUTH_SECRET=your-secret-here

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

Genera un secreto de autenticación seguro con:

npx emdash auth secret

Consultar contenido en las páginas

Usa las funciones de consulta de EmDash en tus páginas Astro. Siguen el patrón de live collections de Astro y devuelven { entries, error } para colecciones y { entry, error } para entradas individuales:

---
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>

Para una sola entrada:

---
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>

Generar tipos de TypeScript

Para seguridad de tipos completa, genera tipos a partir del esquema de la base de datos:

npx emdash types

Esto crea .emdash/types.ts con interfaces para todas tus colecciones. El editor autocompletará nombres de campo y detectará errores de tipo.

Próximos pasos

¡Ya tienes un sitio EmDash en marcha! Sigue por aquí: