How to Install and Configure EmDash Locally With Node.js and SQLite

Set up EmDash locally with Node.js and SQLite for a free, offline development environment before deploying to Cloudflare.

By Central
Step-by-step guide to installing EmDash locally with Node.js and SQLite for offline CMS development.
Highlights
  • EmDash local setup requires Node.js version 22.12 or higher and uses SQLite by default.
  • The local development environment supports content editing, themes, custom types, and media management.
  • Plugin sandboxing via dynamic workers is a Cloudflare-only feature not available in local mode.

Installing EmDash locally with Node.js and SQLite is the smartest way to test Cloudflare’s new CMS before committing to their infrastructure. You get a fully functional, offline development environment without paying a cent. The official documentation pushes toward Cloudflare Workers, but the local path gives you full control over your data and code. Here is the exact process.

Prerequisites

You need Node.js version 22.12 or higher. Check with node --versioncodecodecode. If you are behind, install the latest LTS from nodejs.org. SQLite is included by default — no separate server required. For package management, use npmcodecodecode, pnpmcodecodecode, or buncodecodecode. This guide uses buncodecodecode because it installs dependencies in under a minute, compared to npmcodecodecode which can take several.

The local path is free, portable, and gives you a safety net.

Step-by-Step Installation

Open a terminal. Create a project folder and navigate into it:

“`bash

mkdir emdash-local

cd emdash-local

“`

Run the EmDash create command:

“`bash

npx create-emdash@latest .

“`

The CLI asks four questions. First, choose the target runtime: select Node.js (not Cloudflare Workers). Second, pick a database: SQLite (the default). Third, select a starter template — Blog, Marketing Site, or Portfolio. Choose one that matches your project. Fourth, confirm the package manager (use buncodecodecode if available, else npmcodecodecode).

After the install finishes, start the dev server:

“`bash

bun dev

“`

The Astro dev server boots on port 4321. Open http://localhost:4321/admincodecodecode in your browser.

Configuration and First Run

You see a setup wizard similar to WordPress. Enter your site title, tagline, email, and name. EmDash uses passkey authentication by default — create a passkey through your browser’s credential manager. No passwords to leak.

Once inside the admin dashboard, you can create pages, posts, custom content types, and manage media. The SQLite database file lives in data/emdash.dbcodecodecode. You can inspect it with any SQLite browser. All uploaded files go into a local storage/codecodecode directory.

The initial template provides a working front end. Edit content in the block editor. The interface is deliberately familiar to anyone coming from WordPress.

The Counterargument: “But the Plugin Sandbox Requires Cloudflare”

The strongest objection to local development is that EmDash’s headline feature — sandboxed plugins via dynamic workers — only works on Cloudflare’s paid Workers plan. Without it, plugins run in-process, offering no security isolation. Critics argue this makes local testing pointless because you cannot replicate the production security model.

This objection misses the point of a local development environment. You are not running production. You are building and testing content structures, themes, and basic plugin logic. The in-process mode is sufficient for that. The sandbox is a deployment concern, not a development one. When you are ready to go live, you deploy to Cloudflare and the sandbox activates. Trying to simulate V8 isolates on your laptop adds complexity without benefit. In most development workflows, you test functionality first and security boundaries later. Based on reported feedback from early adopters, the most common local use case is theme customization and content modeling — neither requires the sandbox.

Verdict: Local Setup Is the Correct Starting Point

Start locally. Build your content types. Test your theme. Verify your import from WordPress. Only then push to Cloudflare for the full security model. The local path is free, portable, and gives you a safety net. Cloudflare’s infrastructure is impressive, but it should not dictate how you develop.

FAQ

Q: Can I switch from SQLite to Cloudflare D1 later?

A: Yes. EmDash uses a portable database abstraction. Change the dbcodecodecode setting in astro.config.mjscodecodecode from sqlitecodecodecode to d1codecodecode and adjust the connection string. Your content schema remains intact.

Q: Does local EmDash support all the features of the Cloudflare version?

A: No. Dynamic workers, the MCP server, and AI agent skills are Cloudflare-only. Local gives you the core CMS: content editing, themes, custom types, and media management.

Q: How do I import a WordPress site locally?

A: In the admin panel, go to Tools → Import. Upload a WordPress WXR export file. EmDash maps posts, pages, media, and Yoast SEO fields automatically.

Questions answered
  • Can I switch from SQLite to Cloudflare D1 later?Yes. EmDash uses a portable database abstraction. Change the db setting in astro.config.mjs from sqlite to d1 and adjust the connection string.
  • Does local EmDash support all the features of the Cloudflare version?No. Dynamic workers, the MCP server, and AI agent skills are Cloudflare-only. Local gives you the core CMS: content editing, themes, custom types, and media management.
  • How do I import a WordPress site locally?In the admin panel, go to Tools → Import. Upload a WordPress WXR export file. EmDash maps posts, pages, media, and Yoast SEO fields automatically.
Share This Article