Skip to content

minshop

Small server-rendered store with an admin, Stripe and Lightning checkout, and APIs that let AI agents shop

minshop demo storefront: All products grid with category links, sort options and sold-out badges

minshop is an Astro storefront and admin on Workers, D1 and R2 whose product pages, cart and search work with JavaScript turned off. Shoppers pay by card through Stripe Checkout or in Bitcoin over Lightning. AI agents can browse and check out through a JSON API or an optional MCP server.

Payments in minshop go through adapters behind a PaymentProvider interface. Stripe Checkout handles cards, Stripe-managed discount codes and optional Stripe Tax. Lightning payments run through a self-hosted phoenixd or LNbits node or through hosted OpenNode, and a demo rail reserves stock without charging. Provider keys entered in the admin are encrypted under a key-encryption key before they reach D1. Order confirmation email goes out through Resend or Cloudflare Email. Pages render on the server with near-zero client JavaScript. The cart drawer and live search are progressive enhancements on plain forms, and search runs on SQLite FTS5 in D1 with prefix matching and typo correction. Optional customer accounts use magic-link sign-in to show order history. The admin manages products, nested categories, Markdown pages, media, orders and fulfillment, plus shipping zones with flat or weight-banded rates and store settings that change without a redeploy. Digital products can carry a downloadable file of up to 25 MB, kept in a private R2 bucket. A public JSON API (/api/products and /api/checkout) lets AI agents browse and buy. A separate MCP Worker offers buyer tools and, with a bearer token, operator tools for products and orders. The default wrangler.jsonc binds one D1 database, two R2 buckets (public product images and private deliverables), three rate-limiting namespaces and a five-minute Cron Trigger that releases expired inventory holds. Workers AI with Vectorize semantic search, Cloudflare Images and the email binding are commented out and can be turned on later. A password set in the setup wizard or Cloudflare Access JWT verification protects the admin, with optional Turnstile on login. The Deploy to Cloudflare button provisions D1 and both buckets, applies migrations and asks for SECRETS_KEK and AUTH_SECRET. For a CLI install, npm create minshop scaffolds a fresh repository and npm run provision:cf creates an independent instance. A demo store with test payments runs at demo.minshop.dev.

Built for: Solo merchants, indie makers selling digital goods, and developers who want a small self-hosted store with Stripe or Lightning payments.

What you can use it for

  • Sell digital or physical products from your own Cloudflare account
  • Accept cards through Stripe and Bitcoin over Lightning in the same store
  • Let AI agents browse and buy through a JSON API or MCP
  • Manage products and orders from an MCP client with an operator token

Deploy

  • One-click · main path

    Branch main

  • CLI

    npm create minshop@latest my-store
    cd my-store
    npx wrangler login
    npm run provision:cf my-store

Generate two random values for SECRETS_KEK and AUTH_SECRET before using the button. After the deploy, set the admin password at /admin/setup, then add payment keys in the admin settings and register the production Stripe webhook.

What it needs to run

  • D1 databases__DB_NAME__
  • Durable ObjectsStoreMcp
  • R2 buckets__BUCKET__, __FILES_BUCKET__

Also uses

  • Resend (optional): Sends order confirmation and customer sign-in emails
  • Stripe (optional): Card payments through Stripe Checkout, with discount codes and optional Stripe TaxSource

Good to know

/admin/setup stays open to anyone until the admin password is set, unless Cloudflare Access protects /admin. Discount codes have to be created in the Stripe Dashboard. The MCP server is a separate Worker that the Deploy to Cloudflare button does not deploy. Customer accounts need an email provider to send their sign-in links. The optional Shippo integration buys shipping labels for domestic shipments only.

Cost on Cloudflare

Likely fits the free plan

The README says the default Worker, D1 database and R2 buckets fit within free-plan allowances for a small store. Workers Free allows 100,000 requests per day, and D1 includes 5 GB of storage. Payment processors, Resend, Vectorize and Cloudflare Images have their own pricing. Sending order email through Cloudflare Email needs Workers Paid.

Source

The estimate is based on Cloudflare’s documented limits and the app’s configuration. What you pay depends on your usage and plan.

Where this comes from

An alternative to Big Cartel, Ecwid, Shopify, Squarespace Commerce, Wix eCommerce.

Listing history

  • Oct 2, 2026 · minshop listed

Similar apps

All Commerce apps
  • Minvoice invoice list with status tabs, client filter, due dates, totals and Draft, Sent, Overdue and Paid labels

    Invoicing for one business: PDF invoices by email, Stripe or PayPal pay links and overdue reminders

    Deploy
    One-click
    License
    MIT
    GitHub stars
    37 stars
    Last commit