{"id":97992,"date":"2026-10-03T05:26:00","date_gmt":"2026-10-03T09:26:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=97992"},"modified":"2026-09-29T07:49:01","modified_gmt":"2026-09-29T11:49:01","slug":"install-emdash-locally-nodejs-sqlite-97992","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/install-emdash-locally-nodejs-sqlite-97992\/","title":{"rendered":"How to Install and Configure EmDash Locally With Node.js and SQLite"},"content":{"rendered":"<p>Installing EmDash locally with <a href=\"https:\/\/nodejs.org\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Node.js<\/a> and SQLite is the smartest way to test Cloudflare&#8217;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.<\/p>\n<h2>Prerequisites<\/h2>\n<p>You need Node.js version 22.12 or higher. Check with <code>node --version<\/code>codecodecode. If you are behind, install the latest LTS from nodejs.org. SQLite is included by default \u2014 no separate server required. For package management, use <code>npm<\/code>codecodecode, <code>pnpm<\/code>codecodecode, or <code>bun<\/code>codecodecode. This guide uses <code>bun<\/code>codecodecode because it installs dependencies in under a minute, compared to <code>npm<\/code>codecodecode which can take several.<\/p>\n<h2>Step-by-Step Installation<\/h2>\n<p>Open a terminal. Create a project folder and navigate into it:<\/p>\n<p>&#8220;`bash<\/p>\n<p>mkdir emdash-local<\/p>\n<p>cd emdash-local<\/p>\n<p>&#8220;`<\/p>\n<p>Run the EmDash create command:<\/p>\n<p>&#8220;`bash<\/p>\n<p>npx create-emdash@latest .<\/p>\n<p>&#8220;`<\/p>\n<p>The CLI asks four questions. First, choose the target runtime: select <strong>Node.js<\/strong> (not Cloudflare Workers). Second, pick a database: <strong>SQLite<\/strong> (the default). Third, select a starter template \u2014 <strong>Blog<\/strong>, <strong>Marketing Site<\/strong>, or <strong>Portfolio<\/strong>. Choose one that matches your project. Fourth, confirm the package manager (use <code>bun<\/code>codecodecode if available, else <code>npm<\/code>codecodecode).<\/p>\n<p>After the install finishes, start the dev server:<\/p>\n<p>&#8220;`bash<\/p>\n<p>bun dev<\/p>\n<p>&#8220;`<\/p>\n<p>The Astro dev server boots on port 4321. Open <code>http:\/\/localhost:4321\/admin<\/code>codecodecode in your browser.<\/p>\n<h2>Configuration and First Run<\/h2>\n<p>You see a setup wizard similar to WordPress. Enter your site title, tagline, email, and name. EmDash uses passkey authentication by default \u2014 create a passkey through your browser&#8217;s credential manager. No passwords to leak.<\/p>\n<p>Once inside the admin dashboard, you can create pages, posts, custom content types, and manage media. The SQLite database file lives in <code>data\/emdash.db<\/code>codecodecode. You can inspect it with any SQLite browser. All uploaded files go into a local <code>storage\/<\/code>codecodecode directory.<\/p>\n<p>The initial template provides a working front end. Edit content in the block editor. The interface is deliberately familiar to anyone coming from WordPress.<\/p>\n<h2>The Counterargument: &#8220;But the Plugin Sandbox Requires Cloudflare&#8221;<\/h2>\n<p>The strongest objection to local development is that EmDash&#8217;s headline feature \u2014 sandboxed plugins via dynamic workers \u2014 only works on Cloudflare&#8217;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.<\/p>\n<p>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. <a href=\"https:\/\/overcentral.com\/en\/eu-cra-reporting-requirements-80362\/\" title=\"EU CRA Demands What Shipped and When You Knew\" data-iacss-internal=\"1\">When you<\/a> 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 \u2014 neither requires the sandbox.<\/p>\n<h2>Verdict: Local Setup Is the Correct Starting Point<\/h2>\n<p>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&#8217;s infrastructure is impressive, but it should not dictate how you develop.<\/p>\n<p><strong>FAQ<\/strong><\/p>\n<p><strong>Q: Can I switch from SQLite to Cloudflare D1 later?<\/strong><\/p>\n<p>A: Yes. EmDash uses a portable database abstraction. Change the <code>db<\/code>codecodecode setting in <code>astro.config.mjs<\/code>codecodecode from <code>sqlite<\/code>codecodecode to <code>d1<\/code>codecodecode and adjust the connection string. Your content schema remains intact.<\/p>\n<p><strong>Q: Does local EmDash support all the features of the Cloudflare version?<\/strong><\/p>\n<p>A: No. Dynamic workers, the MCP server, and <a href=\"https:\/\/overcentral.com\/en\/meta-muse-ai-agent-80441\/\" title=\"Meta Launches Muse AI Agent, Needs User Trust\" data-iacss-internal=\"1\">AI agent<\/a> skills are Cloudflare-only. Local gives you the core CMS: content editing, themes, custom types, and media management.<\/p>\n<p><strong>Q: How do I import a WordPress site locally?<\/strong><\/p>\n<p>A: In the admin panel, go to Tools \u2192 Import. Upload a WordPress WXR export file. EmDash maps posts, pages, media, and Yoast SEO fields automatically.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Installing EmDash locally with Node.js and SQLite is the smartest way to test Cloudflare&#8217;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 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":98854,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/97992.png","fifu_image_alt":"How to Install and Configure EmDash Locally With Node.js and SQLite","footnotes":""},"categories":[31],"tags":[],"class_list":["post-97992","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/97992.png","fifu_image_alt":"How to Install and Configure EmDash Locally With Node.js and SQLite","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/97992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=97992"}],"version-history":[{"count":2,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/97992\/revisions"}],"predecessor-version":[{"id":98855,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/97992\/revisions\/98855"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/98854"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=97992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=97992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=97992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}