EmDash eCommerce: DashCommerce vs Stripe Checkout vs Moksa
Three ways to sell on EmDash, measured side by side: DashCommerce's native shop, the Stripe Checkout bridge, and Moksa's Taiwan-first suite, with install steps, permissions and a clear pick for each store.

The honest answer to "can you sell on EmDash?" used to be no. The CMS ships typed content collections and a sandboxed plugin system, but no cart, no checkout, no tax, and no shipping. That changed fast. As of 27 October 2026 the official registry lists 16 plugins under the ecommerce tag, and one Taiwanese publisher alone, Moksa, ships 23 plugins covering gateways, logistics, and e-invoicing. EmDash 1.0 went stable on 28 September, and three releases later (1.3 landed 15 October) commerce is the most contested plugin category on the registry.

The 30-second answer
Pick in 30 seconds
- DashCommerce Lite v0.2.0
Sandboxed registry plugin for a native cart and Stripe checkout. Best for a small global store with real products and variants. 2 permissions.
- Stripe Checkout v0.10.4
Bridge that syncs products to Stripe and hands off to hosted checkout. Best for one product, a tip jar, or a digital download. 5 permissions.
- Moksa Commerce Core v0.1.3
Foundation of a modular Taiwan commerce suite. Best for Taiwan or East Asia retail. 3 permissions.
Tip jar or single product: Stripe Checkout. It installs from the registry without touching package.json, gives you a Buy Now button, and puts PCI compliance and fraud detection on Stripe's side of the fence. Nothing else is worth the setup time at this size.
Small physical store selling globally: DashCommerce. It is the only one of the three that ships a multi-item cart, variable products, inventory soft-locks, and an order dashboard. If you are moving a WooCommerce catalogue with sizes, colors, and shipping zones, this is the route.
Taiwan or East Asia retail: Moksa. Not by preference, by necessity. ECPay, NewebPay, 7-ELEVEN and FamilyMart pickup with cash on delivery, and Ministry of Finance e-invoices are non-negotiable in that market, and no Stripe-based plugin covers them. Moksa does.
DashCommerce: the native shop
What it is: a full storefront (cart, checkout, orders, admin) built on typed EmDash collections and Stripe.
The registry shows two listings, and the difference matters. @dashcommerce.bsky.social/dashcommerce-lite is the sandboxed plugin at v0.2.0 with 2 declared permissions (Read content, network requests to api.stripe.com only). The full product is the npm package @dashcommerce/core at v0.3.2, which runs as a native Astro integration in your host process and therefore declares no sandbox permissions at all. The registry also carries a DashCommerce Setup listing with 0 permissions: it is documentation, not the product.

What you get. Six product types (simple, variable, grouped, digital with signed file delivery and license keys, subscription, affiliate), a multi-item edge cart, Stripe Payment Element with Apple Pay, Google Pay, and 3DS 2, eight currencies (USD, EUR, GBP, JPY, CAD, AUD, SGD, BRL), subscriptions with trials and proration, inventory soft-locks so checkout cannot oversell, multi-zone shipping, Stripe Tax via an environment flag, Stripe Connect payouts for multi-vendor setups, and a 12-page React admin dashboard at /_emdash/admin with refunds and revenue graphs. Storefront islands ship with it: <AddToCart />, <Cart />, <CartCount />, <CheckoutSuccess />, plus a customer account portal. It is MIT, free, with a 0% platform fee; you pay Stripe's standard 2.9% + 30¢ and nothing on top.
Install: scaffold or registry. The fastest start is the scaffolder:
npm create @dashcommerce@latest
cd your-shop && bun run bootstrap
bun run dev # runs on http://localhost:4321Or wire it into an existing EmDash site:
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { sqlite } from "emdash/db";
import { dashcommerce } from "@dashcommerce/core";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: process.env.DATABASE_URL }),
sandboxed: [
dashcommerce({
stripeSecretKey: process.env.STRIPE_SECRET_KEY,
stripeWebhookSecret: process.env.STRIPE_WEBHOOK_SECRET,
})
]
})
]
});The Lite route is different. It needs:
What the Lite route needs
- Add worker_loaders: [{ binding: "LOADER" }] to wrangler.jsonc (Cloudflare Workers Paid is required for dynamic worker loaders)
- Set EMDASH_ENCRYPTION_KEY
- Install dashcommerce-lite from EmDash admin and approve its 2 permissions
- Paste your Stripe keys into DashCommerce settings
- Copy the storefront files from packages/lite/storefront into src/lib/ and src/components/

What it does not do. Stripe only, so no PayPal, Adyen, crypto, or Asian local gateways. Lite omits variable products, subscriptions, and transactional emails (those need @dashcommerce/core). You cannot run Lite and core side by side; the webhooks and cart storage collide. And it is pre-1.0 software at v0.2.0/v0.3.2, with 61 GitHub stars (the highest in the category) and a live demo at demo.dashcommerce.dev to show for it.
Stripe Checkout for EmDash: the hosted checkout bridge
What it is: product sync to Stripe plus Buy Now buttons that hand the buyer to checkout.stripe.com.
The registry listing is @ecommerceave.com/emdash-stripe-checkout, currently v0.10.4, MIT, with 5 declared permissions. That is the largest permission footprint of the three, and it is legible: read products, write order status, talk to Stripe.
The 5 permissions you approve
- Read content
- Manage content
- Read content structure
- Read media
- Network requests restricted to api.stripe.com

What you get. When you publish or edit a product in EmDash, the plugin creates and updates the matching Stripe Products and Prices. Buyers click Buy Now, land on Stripe-hosted checkout (cards, Apple Pay, Google Pay, whatever your Stripe Dashboard enables; native currencies USD, CAD, EUR, GBP), and on checkout.session.completed an order record appears back in EmDash. Refunds made in the Stripe Dashboard sync through refund.created, refund.updated, and refund.failed. Astro helper functions and public API endpoints render the buttons. MIT, free, 0% platform fee, standard Stripe processing fees.
Install. EmDash admin, Plugins, search "Stripe Checkout" by @ecommerceave.com, install, approve the 5 permissions, enable. Paste your Stripe secret key (sk_test_... first) into plugin settings and click Test Stripe Connection. Then the step people miss: in the Stripe Dashboard (Webhooks) create the endpoint and subscribe exactly these events.
Endpoint: https://yourdomain.com/_emdash/api/plugins/{PLUGIN_INSTALLATION_ID}/stripeWebhook
Events: checkout.session.completed
refund.created
refund.updated
refund.failedCopy the signing secret (whsec_...) back into the plugin settings. No webhook secret means orders never sync and you will think the plugin is broken.
What it does not do. There is no cart. One SKU per checkout, always. No inventory soft-locks (stock syncs passively after payment), no shipping rate engine (configure shipping in the Stripe Dashboard), no subscription management of its own (Stripe handles that), and no public demo. EmDashBits reported zero adoption as of 20 October. If a reader needs a bundle of two items, this plugin cannot sell it.
Moksa: the Taiwan commerce suite
What it is: a modular 22-plus plugin suite from the Taiwanese agency Moksa Web (moksaweb.com), anchored by a commerce core.
"Moksa" is a brand, not a single plugin. The foundation is @moksaweb.com/moksa-commerce-core at v0.1.3 (updated 25 October 2026) with 3 declared permissions: Read content, Read taxonomies, and Send email for order notices through the EmDash mail transport. Search the registry for moksa and you get 23 plugins from one publisher.

What you get. Core handles the catalog, multi-item cart state, temporary stock holds, an order state machine, and an event bus that the other modules hook into. The modules are where the value is, and every one of them is Taiwanese retail infrastructure: ECPay (綠界), NewebPay (藍新), TapPay, SmilePay, PChomePay, PAYUNi, PayNow, LINE Pay; 7-ELEVEN and FamilyMart convenience store pickup with an electronic store map and cash on delivery; T-Cat home delivery; Ministry of Finance compliant B2C/B2B e-invoicing via Amego (光貿), ezPay, and ECPay; LINE login and notifications; packing slips for A4, A5, and 80mm thermal printers; and a WooCommerce CSV importer for products, customers, orders, and coupons. All registry plugins, free to install, 0% platform fee; you pay your gateway's domestic rates (roughly 2.0 to 2.8% for cards, about 1% for ATM transfers, per your ECPay or NewebPay contract).
Install: order matters. Everything runs from EmDash admin, but the sequence is the product:
Moksa install order
Install @moksaweb.com/moksa-commerce-core
Approve its 3 permissions.
Install a gateway
@moksaweb.com/moksa-ecpay or @moksaweb.com/moksa-newebpay.
Add docs and logistics
@moksaweb.com/moksa-amego plus @moksaweb.com/moksa-commerce-documents.
Enter merchant credentials
MerchantID, HashKey and HashIV in each gateway's settings screen.
A gateway module without core has nothing to hook into. A store built for real usually needs five to eight modules.
What it does not do. No Stripe or PayPal adapter exists, so US and EU stores cannot use it out of the box. Multi-currency support stops at TWD and regional Asian currencies. Documentation, admin labels, and notifications are predominantly Traditional Chinese. And everything is v0.1.x, publicly released in late October 2026.
How they compare

Feature comparison at a glance (27 Oct 2026)
- Architecture
- DashCommerce: full-stack edge storefront. Stripe Checkout: hosted checkout bridge. Moksa: modular regional suite.
- Version (27 Oct 2026)
- DashCommerce: v0.3.2 npm, v0.2.0 Lite. Stripe Checkout: v0.10.4 registry. Moksa: v0.1.3 core.
- Sandbox permissions
- DashCommerce: 2. Stripe Checkout: 5. Moksa: 3.
- Shopping cart
- DashCommerce: multi-item. Stripe Checkout: none (Buy Now). Moksa: multi-item.
- Product types
- DashCommerce: 6 (simple, variable, grouped, digital, sub, affiliate). Stripe Checkout: simple products from collections. Moksa: simple and variable.
- Gateways
- DashCommerce: Stripe (Payment Element, Apple Pay, Google Pay). Stripe Checkout: Stripe (hosted checkout). Moksa: ECPay, NewebPay, TapPay, LINE Pay.
- Currencies
- DashCommerce: 8 (USD, EUR, GBP, JPY, CAD, AUD, SGD, BRL). Stripe Checkout: 4 (USD, CAD, EUR, GBP). Moksa: TWD primary, regional.
- Subscriptions
- DashCommerce: built in (trials, dunning, proration). Stripe Checkout: Stripe Dashboard only. Moksa: dedicated module.
- Inventory
- DashCommerce: soft-locks at checkout, low-stock alerts. Stripe Checkout: passive webhook sync. Moksa: native stock holds.
- Shipping
- DashCommerce: multi-zone, weight, flat, local pickup. Stripe Checkout: Stripe Dashboard config. Moksa: CVS pickup map, T-Cat.
- E-invoicing
- DashCommerce: Stripe Tax. Stripe Checkout: Stripe Tax. Moksa: Amego, ezPay, ECPay B2C and B2B.
- Multi-vendor payouts
- DashCommerce: Stripe Connect built in. Stripe Checkout: none. Moksa: none (REST hooks for ERP).
- Admin
- DashCommerce: 12-page dashboard. Stripe Checkout: order and refund viewer. Moksa: one panel per module.
- Cost
- DashCommerce: MIT, 0% platform fee. Stripe Checkout: MIT, 0% platform fee. Moksa: free, 0% platform fee.
Read the table as three philosophies, not three feature races. DashCommerce wants to be your store. Stripe Checkout wants to get out of the way of your payment. Moksa wants to be your country's retail infrastructure.
What is still missing
The category is young and the numbers say so. InstaWP queried the registry's public discovery API on 21 October, and EmDashBits counted 13 approved ecommerce listings on 20 October.
there is no WooCommerce equivalent yet: you get products and checkout, but not an ecosystem of payment gateways, shipping plugins or store extensions.
the CMS does about a third of it, one of the plugins does a second third, and the last third is yours.
Versions across the category are mostly 0.x, adoption is near zero, and the star counts are inflated by the same product listing twice.
Underneath the plugins, two EmDash core gaps still shape store builds. There are no child pages, so a catalogue with nested URLs (/shop/mens/shirts) means manual slugs and collection routing instead of a page tree. And roles are locked to the five legacy WordPress-style ones, with no custom roles and no field-level permissions, so a "regional store manager" or "fulfillment only" account is not something the core can express today. Workaround plugins such as @moorage.dev/approvals add editorial checkpoints on top, which is not the same thing. Both gaps are among the most requested features in the project's issue tracker.
If you are comparing this stack to WooCommerce, the honest framing is this: EmDash wins on cost and supply chain (sandboxed plugins with declared permissions beat 40 unaudited plugins), and WooCommerce still wins on breadth (gateways, shipping carriers, and store extensions the registry simply does not have). For a migration, the honest EmDash vs WordPress comparison is the right companion piece.
What we would pick
Single product, digital download, or tip jar: Stripe Checkout. No cart code, no package.json changes, and Stripe owns the compliance surface. If you sell one ebook or one consulting package, installing anything heavier is waste.
Small physical or D2C store, US/EU/global: DashCommerce. Variants, inventory soft-locks, multi-zone shipping, and an order dashboard are the price of entry for a real store, and only DashCommerce ships them. Start with the scaffolder, keep Stripe as the only gateway, and accept that you are early software's guest.
Taiwan or East Asia retail: Moksa. No contest and no alternative.
Moksa's 22-plugin suite is the first serious effort to make an edge-native CMS viable for Taiwanese agency client deployments.
Budget time for assembling five to eight modules, and expect Traditional Chinese docs.
FAQ
Common questions
Can EmDash do e-commerce?
Yes, through plugins. The core CMS has zero commerce facilities (no cart, checkout, tax, shipping, or inventory), but its typed collections are a good fit for a product catalogue and the sandboxed registry now carries 16 ecommerce plugins. Three of them are real routes: DashCommerce, Stripe Checkout, and Moksa.
Does DashCommerce Lite need npm?
The Lite plugin installs from the EmDash registry and its 2 permissions, but it still wants worker_loaders in wrangler.jsonc (Cloudflare Workers Paid), an EMDASH_ENCRYPTION_KEY, and a manual copy of the storefront files from packages/lite/storefront into your src/. Lite also omits variable products, subscriptions, and transactional emails. For the full store you take @dashcommerce/core from npm at v0.3.2.
Does the Stripe Checkout plugin cost money?
No. It is MIT licensed with a 0% platform fee. You pay Stripe's standard processing (2.9% + 30¢ per successful card charge) and nothing to the plugin author.
Can Moksa work outside Taiwan?
Not today. Core gives generic cart and order primitives, but there is no Stripe or PayPal adapter, the gateways are all Taiwanese (ECPay, NewebPay, TapPay, LINE Pay and friends), logistics assume convenience store pickup and T-Cat, invoicing targets the Ministry of Finance e-invoice system, and documentation is mostly Traditional Chinese. A US or EU store should pick DashCommerce or Stripe Checkout instead.
Where to start
Open the EmDash plugin catalog, install the one that matches your store type, and push a single test product through to a real (test-mode) payment before you model the rest of the catalogue. The receipt you get back from that first checkout tells you more than any comparison table, including this one.