bagisto/bagisto-standard
Bagisto Standard is the official Laravel-based ecommerce project skeleton for launching customizable online stores. It bundles the Bagisto admin, storefront, catalog, checkout, and marketplace-ready features on a modern PHP stack, giving developers a fast, scalable starting point for ecommerce appli...
What the artifact is. bagisto/bagisto-standard is not a library you depend on — it is the Composer project skeleton for a self-hosted Bagisto storefront, the laravel/laravel of the Bagisto platform. There is no require path into an existing application. The TPM decision is therefore binary: adopt Bagisto as the commerce platform (against the maintained upstream distribution and the packages/Webkul/* module set), or adopt this repository — which is indefensible on its own terms: archived, 10 stars, 0 dependents, last release 2020-07-06, whose sole published change was a composer install fix. Treat the repo as a reference template with a short half-life, not a baseline.
Architecture fit. The bundled surface is genuinely broad and correctly shaped for a mid-market storefront: catalog, cart, checkout, orders, admin panel, tax, shipping, payments, promotions, plus multi-channel / multi-currency / multi-locale scaffolding. It is a modular monolith — Concord contracts resolve models through interfaces, with admin datagrids, ACL nodes, and service providers in-tree. That is a good fit for an org that wants to own its commerce stack on Laravel, and a poor fit for one that wants a managed service. The architectural tell that matters strategically: the Vue storefront talks to the backend over REST/GraphQL, which forces the "monolith to extend vs. service to call" boundary decision early. Retrofitting that boundary later means untangling Blade-coupled checkout logic — the most expensive refactor in the codebase.
Integration feasibility. High if the org is already a PHP/Laravel + MySQL + Redis shop: runtime, hiring profile, on-call muscle, and PHP SDKs for ERP/PIM/payment/shipping all reuse. Payment and shipping are abstract-base-class driven with clear extension seams (authorize/capture/refund, per-carrier rate calculation). Order placement, shipment, and refund events give an ERP/analytics integration path that does not touch the revenue path. The caveat: the skeleton is not the integration layer. Integrations are a separate build against events and contracts, and must be budgeted as such. Payment webhooks are public, CSRF-exempt routes — that is a security review item, not a config detail.
Technical risk. The vintage dominates. A 2020-07-06 snapshot pinned to PHP 7.x / Laravel 7–8-era constraints means: stale payment SDKs (PCI-adjacent, so a review gate), a Node build toolchain pinned to node-sass binaries that fail on modern Node, and a composer.lock that must be treated as sacred — a blind composer update resolves transitive dependencies to versions that break the app in non-obvious ways. Because packages/Webkul/* ships in-tree rather than in vendor/, everything is editable, which is the trap: every core edit is an upgrade merge conflict. Catalog search degrades sharply without Elasticsearch/OpenSearch past a few thousand SKUs; that infrastructure decision must precede the import, not follow the complaint. Queue workers are not optional — indexers, mail, and integration listeners all assume a running worker.
Key questions to answer before commitment.
Stack fit. Strongest when the existing estate is PHP/Laravel + MySQL + Redis with containerized deploys. In that context the skeleton's pre-configured environment and directory layout collapses setup to a single composer create-project plus .env, key:generate, storage:link, and migrate --seed. In a non-PHP shop, the fit argument evaporates and the build-vs-buy comparison should default to a managed platform.
Migration path — three distinct tracks, choose deliberately.
create-project from an archived skeleton for anything revenue-bearing today.Compatibility. Two hard constraints must be pinned before work starts: a 2020-era Node/npm version for the Vue admin and storefront theme (pin via .nvmrc or container image — budget an afternoon before the first asset change), and the PHP/Laravel pair from the lockfile. Resist --ignore-platform-reqs as a permanent fix; it hides a real mismatch that resurfaces as a runtime fatal. If composer install fails on platform requirements, that is signal, not noise. Confirm whether bagisto:install exists in this snapshot — it arrives in later releases and should not be assumed.
Sequencing. Order the work so the cheapest decisions are made before the expensive ones:
/admin, storefront render at /, queue worker running against the production driver (not sync).packages/Webkul/{YourVendor}/{YourPackage}/ with PSR-4 autoload, service provider, Concord registration. Everything you build lives there, which is what keeps the upgrade delta a diff instead of an excavation.Extension preference order, enforced by review: Concord contract rebind → event listener → view/config override → documented patch to core. Anything below that line is debt written today and repaid at upgrade time. Maintain a patches/ directory or git-tracked diff for any unavoidable core touch; prefer overrides first, patches second, edits never. Admin screens are a two-file commit — menu entry plus ACL node — or authorized users hit a 403 on a route that exists and the feature ships invisible.
Maintenance. This is the dominant cost and it is permanent. Archived, no maintainer, zero dependents: the org owns every future bug, security patch, and dependency bump. Budget it as a standing fraction of an engineer, not a project line. The composer.lock is the operational contract — move packages one at a time, run the app after each bump, and expect signature changes and removed helpers rather than clean upgrades. Keep the cache-clearing one-liner (config:clear, cache:clear, view:clear, route:clear, dump-autoload) in a Makefile target; most "my change isn't picked up" reports are stale config or view caches, not code — and a cached config:cache will silently resurrect old Concord bindings and defeat an override.
Support. No upstream. Support means internal runbooks and internal expertise. Two mitigations are worth funding early: a documented debugging toolkit (route:list to confirm registration, tinker with Concord::getRepository(...) to confirm bindings, ACL config to distinguish 403-as-permission from 403-as-routing, structured logs on the queue worker for anything integration-shaped) and a deliberate practice of debugging in the repository, not the controller — the controller is usually innocent. The PCI-adjacent nature of self-hosted checkout makes stale payment SDKs a security review gate. That is a scheduled obligation, not a backlog item.
Scaling. Three axes, each with a different answer. Traffic: the modular monolith scales conventionally behind a load balancer with Redis sessions/cache and a horizontally scaled queue worker pool; nothing here is exotic. Catalog: Blade/LIKE search and faceting hold to a few thousand SKUs and degrade painfully past that — Elasticsearch/OpenSearch is the answer and must exist before import. Channels: multi-store, multi-currency, and multi-locale are on by default and add a channel dimension to nearly every query. If the business runs one channel, that is complexity paid for capability never exercised; if it runs several, APP_URL and per-channel hostnames must be correct or sessions and admin redirects bounce between domains in ways that present as auth bugs.
Failure modes to instrument for.
update breaks the app non-obviously. Guard the lockfile in CI.sync masks ordering and retry bugs until deploy.storage:link and the media disk differ between dev and prod more often than any other config, especially S3 URL/ACL settings.node-sass binaries — expected, not surprising; pin the runtime.Ramp-up. The learning curve is real but has known landmarks, and the order matters: start in packages/Webkul/ (Admin, Shop, Customer, Product, Checkout, Payment, Shipping, Tax, Sales, Core, plus the Velocity theme) — that is 90% of reading time; then packages/Webkul/Core/src/Config/ and config/ for behavior toggles; then admin routes and their views; then concord.php and module configs, which must be understood before anything is overridden; then composer.json + composer.lock as the version reality check. The fastest ramp is the custom-product-attribute slice described above — it touches every layer a real feature will touch. Admin datagrids are declarative and consistent across packages, which is one of the codebase's better traits and shortens the curve meaningfully. Realistic estimate for a competent Laravel developer new to Bagisto: productive within a sprint, confident in the Concord and extension seams within a quarter.
Bottom line for the roadmap. The skeleton's value to a PM is as a framing device and scope baseline: it makes the build-vs-buy branch concrete and cheap to inspect, and its bundled surface is a ready-made "what we get for free vs. what we must build" checklist that prevents checkout, tax, and shipping from being scoped as "just CRUD." Adopt the platform from maintained upstream if the org is a Laravel shop that wants to own commerce. Do not adopt this repository for anything revenue-bearing — its vintage means the upgrade bill arrives sooner than the plan assumes.
How can I help you explore Laravel packages today?