Bagisto is an open-source Laravel eCommerce platform that replaces SaaS services like Ecwid with self-hosted multi-channel stores and zero SKU fees.
An agency rolling out bespoke client storefronts hits an expensive ceiling as SaaS commerce providers charge escalating monthly fees for extra product tiers, multi-channel setups, and localized currencies. Per-transaction revenue cuts and seat-based add-ons continuously inflate operational overhead as sales volume climbs. Bagisto shifts the entire catalog, checkout, and inventory engine to self-hosted PHP infrastructure, eliminating recurring software royalties and SKU caps.
Ecwid charges recurring monthly subscriptions that scale with catalog size, capping entry tiers at ten products and charging higher tiers for larger catalogs and multi-currency selling. Hosted commerce options like Volusion similarly attach platform fees to annual gross merchandise volume ceilings, levying overage penalties when an online shop succeeds. Bagisto eliminates these fee schedules by running on a self-hosted Laravel backend, allowing businesses to maintain hundreds of thousands of SKUs across distinct storefronts without per-product pricing or transaction taxes.
The trade-off is operational ownership. Ecwid and Volusion bundle managed server infrastructure, turnkey payment gateways, and hosted checkout compliance into a single subscription. In Bagisto, engineering teams manage server provisioning, database backups, Redis caching, queue workers, and server hardening. For an organization with internal PHP talent or an agency serving multiple merchants, trading managed SaaS convenience for raw infrastructure costs drastically reduces long-term software expenses.
Is Bagisto free for commercial use? Yes, the core software is free for commercial deployment, client projects, and custom modifications without licensing fees or revenue shares.
Bagisto vs Ecwid — which should you choose? Choose Ecwid for a zero-maintenance hosted widget that embeds into an existing site. Choose Bagisto if you have Laravel engineers and need control over product data, custom checkout logic, and hosting costs.
What hosting requirements does Bagisto have? Bagisto requires a standard LEMP stack running PHP 8.2 or newer, MySQL or MariaDB, and Composer. High-volume setups typically add Redis for caching and queue processing.
Bagisto is a sensible foundation when your team possesses Laravel experience and needs to avoid the compounding monthly costs of hosted e-commerce platforms. It is ill-suited for non-technical merchants who require a turnkey site builder and cannot maintain their own server infrastructure. Ongoing development with updates continuing into late 2026 and an MIT license that permits unconstrained commercial customization make Bagisto a dependable platform for ambitious agency builds.
We started this exact setup from scratch in a clean Linux machine on Oct 31, 2026 and checked it through Bagisto's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p bagisto && cd bagisto
curl -fsSL https://open-source.store/tools/bagisto/compose.yml -o compose.ymlcat > .env <<EOF
APP_KEY=$(openssl rand -base64 32)
APP_URL=http://localhost:8080
ADMIN_PASSWORD=$(openssl rand -hex 12)
EOFAPP_KEY — Random 32-byte base64 encryption key for sessions and data. Generated above; keep it secret.APP_URL — Public URL people use to open Bagisto; set it to your domain (or http://<your-server>:8080 for testing).ADMIN_PASSWORD — Password used by smoke tests to configure the administrator account. Generated above; keep it secret.docker compose up -dservices:
bagisto:
image: webkul/bagisto:2.5.0
restart: unless-stopped
ports:
- "8080:80"
environment:
APP_URL: ${APP_URL}
APP_KEY: base64:${APP_KEY}
volumes:
- bagisto-mysql:/var/lib/mysql
- bagisto-storage:/var/www/bagisto/storage
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost/health || exit 1"]
interval: 10s
timeout: 5s
retries: 30
start_period: 30s
volumes:
bagisto-mysql:
bagisto-storage:
Lint, codegen, breaking-change checks and dependency management in one Git-native CLI. Open source, no registry lock-in.
Show that Bagisto is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 202 s: webkul/bagisto:2.5.0.
Based on the upstream setup. Official production single-container image with bundled MySQL 8, PHP 8.4-FPM and Nginx. The image is HTTP-only (TLS needs an external reverse proxy) and bundles MySQL 8 and demo products. Port 8080 exposed, APP_URL and generated APP_KEY configured.
bagisto-1 | 2026-10-31T21:52:56.669321465Z [bagisto-entrypoint] 2026-10-31 21:52:56 Database: bundled MySQL on port 3306 bagisto-1 | 2026-10-31T21:52:56.670166798Z [bagisto-entrypoint] 2026-10-31 21:52:56 Applying environment overrides... bagisto-1 | 2026-10-31T21:52:56.678130882Z [bagisto-entrypoint] 2026-10-31 21:52:56 Rebuilding the cached configuration... bagisto-1 | 2026-10-31T21:52:56.835184423Z bagisto-1 | 2026-10-31T21:52:56.835209882Z INFO Clearing cached bootstrap files. bagisto-1 | 2026-10-31T21:52:56.835211048Z bagisto-1 | 2026-10-31T21:52:56.835940798Z config ......................................................... 0.48ms DONE bagisto-1 | 2026-10-31T21:52:56.836533840Z cache .......................................................... 0.42ms FAIL bagisto-1 | 2026-10-31T21:52:56.840578590Z bagisto-1 | 2026-10-31T21:52:56.840635007Z In Connection.php line 857: bagisto-1 | 2026-10-31T21:52:56.840638673Z bagisto-1 | 2026-10-31T21:52:56.840639882Z SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, Host: 127.0.0 bagisto-1 | 2026-10-31T21:52:56.840642965Z .1, Port: 3306, Database: bagisto, SQL: delete from `cache`) bagisto-1 | 2026-10-31T21:52:56.840643673Z bagisto-1 | 2026-10-31T21:52:56.840645340Z bagisto-1 | 2026-10-31T21:52:56.840680173Z In Connector.php line 67: bagisto-1 | 2026-10-31T21:52:56.840681507Z bagisto-1 | 2026-10-31T21:52:56.840682132Z SQLSTATE[HY000] [2002] Connection refused bagisto-1 | 2026-10-31T21:52:56.840682715Z bagisto-1 | 2026-10-31T21:52:56.840684465Z bagisto-1 | 2026-10-31T21:52:56.956975173Z bagisto-1 | 2026-10-31T21:52:56.956988298Z INFO Caching framework bootstrap, configuration, and metadata. bagisto-1 | 2026-10-31T21:52:56.956989423Z bagisto-1 | 2026-10-31T21:52:56.976111840Z config ........................................................ 18.84ms DONE bagisto-1 | 2026-10-31T21:52:56.976733840Z events ......................................................... 0.47ms DONE bagisto-1 | 2026-10-31T21:52:57.004095798Z routes ........................................................ 27.17ms DONE bagisto-1 | 2026-10-31T21:52:57.398018340Z views ........................................................ 393.76ms DONE bagisto-1 | 2026-10-31T21:52:57.398029924Z bagisto-1 | 2026-10-31T21:52:57.405876174Z [bagisto-entrypoint] 2026-10-31 21:52:57 Starting services via Supervisor... bagisto-1 | 2026-10-31T21:52:57.461229840Z 2026-10-31 21:52:57,461 INFO Included extra file "/etc/supervisor/conf.d/bagisto.conf" during parsing bagisto-1 | 2026-10-31T21:52:57.461241007Z 2026-10-31 21:52:57,461 INFO Included extra file "/etc/supervisor/conf.d/database.conf" during parsing bagisto-1 | 2026-10-31T21:52:57.461242174Z 2026-10-31 21:52:57,461 INFO Set uid to user 0 succeeded bagisto-1 | 2026-10-31T21:52:57.464731757Z 2026-10-31 21:52:57,464 INFO RPC interface 'supervisor' initialized bagisto-1 | 2026-10-31T21:52:57.464738465Z 2026-10-31 21:52:57,464 CRIT Server 'unix_http_server' running without any HTTP authentication checking bagisto-1 | 2026-10-31T21:52:57.464777507Z 2026-10-31 21:52:57,464 INFO supervisord started with pid 1 bagisto-1 | 2026-10-31T21:52:58.471200757Z 2026-10-31 21:52:58,470 INFO spawned: 'mysql' with pid 27 bagisto-1 | 2026-10-31T21:52:58.472385716Z 2026-10-31 21:52:58,472 INFO spawned: 'php-fpm' with pid 28 bagisto-1 | 2026-10-31T21:52:58.473516674Z 2026-10-31 21:52:58,473 INFO spawned: 'nginx' with pid 29 bagisto-1 | 2026-10-31T21:52:59.727008633Z 2026-10-31 21:52:59,726 INFO success: mysql entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) bagisto-1 | 2026-10-31T21:52:59.727024091Z 2026-10-31 21:52:59,726 INFO success: php-fpm entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) bagisto-1 | 2026-10-31T21:52:59.727025466Z 2026-10-31 21:52:59,726 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)