Prerequisites
Before you begin, make sure you have the following installed:
- Node.js v22.12.0 or higher (odd-numbered versions are not supported)
- npm, pnpm, or yarn
- A code editor — VS Code is recommended
Create a New Project
Scaffold a new EmDash site with a single command:
npm create emdash@latest
Follow the interactive prompts to choose a project name and starter template. Once complete, navigate into your new directory:
cd my-emdash-site
npm install
npm run dev
Open http://localhost:4321 in your browser to see your site live.
Complete the Setup Wizard
On first launch, EmDash greets you with a Setup Wizard. Navigate to http://localhost:4321/_emdash/admin and you will be automatically redirected to it. Fill in:
- Site Title — the name of your site
- Tagline — a short one-line description
- Admin Email — your email address
Click Create Site. Your browser will prompt you to register a passkey — a secure, password-free credential stored in your browser's password manager (Touch ID, Face ID, Windows Hello, or a hardware key). Once registered, you are automatically logged into the admin dashboard.
Note: EmDash uses passkey authentication instead of passwords by design. Passkeys are phishing-resistant and require no password manager setup.
Publish Your First Post
- In the admin sidebar, click Posts under Content.
- Click New Post.
- Enter a title and write content in the rich-text editor.
- Set the status to Published and click Save.
Your post goes live immediately — no rebuild step needed. EmDash uses Live Content Collections, so content changes are reflected in real time.
Project Structure
A freshly scaffolded EmDash project follows a standard Astro layout:
my-emdash-site/
├── astro.config.mjs # Astro + EmDash integration config
├── src/
│ ├── live.config.ts # Live Collections configuration
│ ├── pages/
│ │ ├── index.astro
│ │ └── posts/
│ │ └── [...slug].astro
│ ├── layouts/
│ │ └── Base.astro
│ └── components/
├── .emdash/
│ ├── seed.json # Content type definitions
│ └── types.ts # Auto-generated TypeScript types
└── package.json
Generate TypeScript Types
For full type safety across your Astro components, run:
npx emdash types
This creates .emdash/types.ts with interfaces for every collection in your database. Your editor will now autocomplete field names and catch type errors at build time.
Next Steps
- Import a theme from the EmDash Marketplace to give your site a polished look
- Browse plugins to add functionality like forms, SEO, and analytics
- Read the Core Concepts guide to understand how EmDash works under the hood
- Deploy to Cloudflare Workers when you're ready to go live
