Skip to content

Maho CLI - storefront:build ​

The Maho backend includes a CLI command that builds storefront assets using Bun. It auto-downloads Bun if not installed, runs CSS/JS builds, and optionally deploys to Cloudflare Workers with cache purging.

Usage ​

bash
./maho storefront:build [options]

Options ​

OptionShortDescription
--path-pStorefront project path (auto-detected if omitted)
--css-onlyOnly build CSS
--js-onlyOnly build JS
--install-iRun bun install before building
--deploy-dDeploy to Cloudflare Workers after build
--update-bunForce re-download of Bun binary

Examples ​

bash
# Full build (CSS + JS)
./maho storefront:build

# Build and deploy
./maho storefront:build --deploy

# CSS only, with dependency install
./maho storefront:build --css-only --install

# Specify custom storefront path
./maho storefront:build --path /var/www/maho-storefront

What It Does ​

1. Bun Resolution ​

The command finds Bun in this order:

  1. Project-local - .bun/bin/bun in the storefront directory
  2. System PATH - globally installed bun
  3. Auto-download - downloads the correct binary from GitHub (Linux/macOS, x64/arm64)

Downloaded Bun is stored at {storefront}/.bun/bin/bun for future use.

2. Build ​

Runs bun run build:css and bun run build:js, which execute:

ScriptCommandOutput
build:cssUnoCSS scan + DaisyUI + theme tokenspublic/styles.css
build:jsesbuild bundle + minifypublic/controllers.js.txt

After each build, file sizes are reported in human-readable format.

3. Deploy (with --deploy) ​

  1. Reads Cloudflare credentials from deploy.sh in the storefront directory
  2. Runs bun x wrangler deploy -c wrangler.toml
  3. Purges Cloudflare edge cache for all configured hosts
  4. Prewarms the edge cache (if WARM_HOSTS is configured)

Storefront Path Resolution ​

If --path is not specified:

  1. STOREFRONT_PATH environment variable
  2. Auto-detect: {maho-web-root}/../maho-storefront/

This means on a standard Maho installation where the storefront lives next to the web root, no path configuration is needed.

Manual Alternative ​

The same steps can be run directly with Bun:

bash
cd maho-storefront

# Install dependencies
bun install

# Build assets
bun run build

# Deploy
bun run deploy

# Sync data from Maho backend to KV
curl -X POST https://your-store.com/sync \
  -H "Authorization: Bearer YOUR_SYNC_SECRET"

Deploy Script ​

The deploy.sh script handles deployment to demo environments:

bash
./deploy.sh

This script:

  1. Runs bun run build (CSS + JS + plugin registry generation)
  2. Deploys via bun x wrangler deploy --config wrangler.toml
  3. Purges Cloudflare edge cache for all configured hostnames
  4. Prewarms the edge cache by fetching all known URLs (categories, products, CMS pages, blog posts)

Cache warming is optional -- set WARM_HOSTS and SYNC_SECRET in .env:

bash
SYNC_SECRET="your-sync-secret"
WARM_HOSTS='["https://your-store.com"]'

Source: lib/MahoCLI/Commands/StorefrontBuild.php, deploy.sh, package.json