Si vous êtes dans l'écosystème PHP et Laravel depuis un certain temps, il est probable que vous ayez déjà dû évaluer des plateformes e-commerce. WooCommerce, Magento, PrestaShop — le marché regorge d'options. Mais Bagisto est un cas à part : une plateforme construite nativement sur Laravel et Vue.js, conçue pour les développeurs qui veulent un contrôle réel sur leur architecture sans sacrifier la vitesse de développement.

Dans cet article, j'explore Bagisto en profondeur : son architecture, ses fonctionnalités clés, quand l'utiliser et comment il se compare aux autres alternatives du marché.


Qu'est-ce que Bagisto ?

Bagisto est un framework e-commerce open source lancé en 2018 par Webkul Software. Il est construit sur une stack que de nombreux développeurs PHP connaissent déjà bien :

  • Laravel (backend et logique métier)
  • Vue.js (frontend réactif)
  • MySQL / PostgreSQL (persistance)
  • Eloquent ORM (gestion des modèles)
  • Contrairement à Magento — qui a une courbe d'apprentissage brutale et une architecture qui peut sembler étrangère — ou à WooCommerce — qui vit dans l'écosystème WordPress —, Bagisto a été conçu dès le départ comme une application Laravel. Si vous connaissez déjà Laravel, vous vous déplacerez naturellement dans le code.

    Dépôt officiel : github.com/bagisto/bagisto

    Plus de 13 000 étoiles GitHub et une communauté active avec des versions régulières.


    Architecture Technique

    Structure des Paquets

    Bagisto implémente une architecture modulaire basée sur les paquets Laravel. Le noyau est divisé en plusieurs paquets dans packages/Webkul/ :

    packages/
    └── Webkul/
        ├── Admin/          # Panneau d'administration
        ├── Attribute/      # Système d'attributs EAV
        ├── Cart/           # Panier d'achat
        ├── Catalog/        # Produits et catégories
        ├── Category/       # Arborescence des catégories
        ├── Checkout/       # Processus de paiement
        ├── Core/           # Fonctionnalités de base
        ├── Customer/       # Gestion des clients
        ├── Inventory/      # Contrôle des stocks
        ├── Order/          # Gestion des commandes
        ├── Payment/        # Passerelles de paiement
        ├── Product/        # Types de produits
        ├── Sales/          # Module de ventes
        ├── Shipping/       # Méthodes d'expédition
        ├── Tax/            # Calcul des taxes
        └── User/           # Gestion des utilisateurs admin

    Cette séparation en paquets facilite la maintenance, l'extensibilité et les tests isolés. Chaque paquet enregistre ses propres routes, vues, migrations et fournisseurs de services.

    Le Modèle EAV

    Bagisto utilise le modèle Entity-Attribute-Value (EAV) pour les attributs de produits, similaire à Magento. Cela offre une flexibilité pour définir des attributs personnalisés sans modifier le schéma de la base de données. Cependant, comme toute implémentation EAV, cela a un coût en complexité de requêtes — un point à considérer lorsque le catalogue atteint des centaines de milliers de produits.

    Frontend : Blade + Vue.js

    Le panneau d'administration est construit avec Vue.js et utilise intensivement des composants réactifs. La boutique publique utilise des templates Blade avec Vue pour les composants interactifs (panier, recherche en temps réel, filtres).

    Bagisto offre également une API REST et GraphQL complète, ce qui le rend viable comme backend headless pour des frontends en Next.js, Nuxt ou applications mobiles.


    Fonctionnalités Principales

    Gestion du Catalogue

  • Types de produits : Simple, Configurable (avec variantes), Virtuel, Téléchargeable, Groupé, Bundle
  • Attributs personnalisés avec types : texte, nombre, date, booléen, select, multiselect, image
  • Groupes d'attributs et familles d'attributs réutilisables
  • Catégories hiérarchiques avec arbre de navigation
  • SEO par produit : meta title, meta description, URL personnalisée
  • Multi-Canal et Multi-Langue

    L'un des points forts de Bagisto est son support natif pour plusieurs canaux, langues et devises :

    // Chaque canal peut avoir son propre domaine, thème, catalogue et configuration
    Channel::create([
        'code'        => 'eu_store',
        'name'        => 'European Store',
        'hostname'    => 'eu.mystore.com',
        'locales'     => ['en', 'de', 'fr', 'es'],
        'currencies'  => ['EUR'],
        'root_category_id' => 2,
    ]);

    C'est particulièrement utile pour les projets à présence internationale ou les agences gérant plusieurs boutiques depuis une seule installation.

    Système de Tarification

  • Prix par groupe de clients
  • Prix de catalogue (règles de remise sur les produits)
  • Prix de panier (coupons, règles par quantité)
  • Prix spéciaux avec dates de début et de fin
  • Support multi-devises avec conversion automatique
  • Passerelles de Paiement

    Bagisto inclut des intégrations avec :

  • PayPal (Standard, Express, Smart Buttons)
  • Stripe
  • Razorpay
  • PayU
  • Paiement à la livraison (COD)
  • Virement bancaire
  • Pour les projets au Costa Rica et en Amérique latine, l'intégration Stripe est tout à fait viable via Stripe Connect, bien qu'il soit utile de valider la méthode de paiement locale disponible dans chaque pays.

    Gestion des Stocks

  • Stock par produit et par variante
  • Multi-entrepôt (inventaire par entrepôt)
  • Alertes de stock bas
  • Backorders configurables
  • Gestion des stocks en temps réel pendant le paiement

  • Installation et Configuration

    Prérequis Système

    PHP >= 8.1
    Laravel >= 10.x
    MySQL >= 8.0 / PostgreSQL >= 13
    Composer 2.x
    Node.js >= 18.x

    Installation avec Composer

    # Créer le projet
    composer create-project bagisto/bagisto my-store
    
    cd my-store
    
    # Configurer les variables d'environnement
    cp .env.example .env
    
    # Modifier .env avec les identifiants de la base de données
    # DB_CONNECTION=mysql
    # DB_HOST=127.0.0.1
    # DB_DATABASE=bagisto_db
    # DB_USERNAME=root
    # DB_PASSWORD=secret
    
    # Exécuter l'installateur
    php artisan bagisto:install
    
    # Compiler les assets
    npm install && npm run build

    La commande bagisto:install exécute les migrations, les seeders avec données initiales et configure le stockage. Une fois terminé, le panneau d'administration est disponible sur /admin.

    Installation avec Docker

    Pour les environnements de développement ou de production avec Docker :

    # docker-compose.yml simplifié
    version: '3.8'
    
    services:
      app:
        image: bagisto/bagisto:latest
        ports:
          - "8000:80"
        environment:
          DB_HOST: db
          DB_DATABASE: bagisto
          DB_USERNAME: bagisto_user
          DB_PASSWORD: secret
        depends_on:
          - db
    
      db:
        image: mysql:8.0
        environment:
          MYSQL_DATABASE: bagisto
          MYSQL_USER: bagisto_user
          MYSQL_PASSWORD: secret
          MYSQL_ROOT_PASSWORD: rootsecret
        volumes:
          - db_data:/var/lib/mysql
    
    volumes:
      db_data:

    Extensibilité : Créer un Paquet Personnalisé

    La bonne façon d'étendre Bagisto est d'utiliser des paquets Laravel. Le cœur n'est jamais modifié directement.

    php artisan package:make Acme/CustomModule

    Cela génère la structure de base dans packages/Acme/CustomModule/ :

    CustomModule/
    ├── src/
    │   ├── Config/
    │   │   └── menu.php          # Entrées du menu admin
    │   ├── Http/
    │   │   ├── Controllers/
    │   │   └── Middleware/
    │   ├── Models/
    │   ├── Repositories/
    │   ├── Resources/
    │   │   ├── assets/
    │   │   └── views/
    │   ├── Routes/
    │   │   ├── admin-routes.php
    │   │   └── shop-routes.php
    │   └── Providers/
    │       └── CustomModuleServiceProvider.php
    └── package.json

    Bagisto utilise le pattern Repository au lieu d'accéder directement aux modèles, ce qui facilite les tests et la substitution d'implémentations :

    // Au lieu de :
    $product = Product::find($id);
    
    // Bagisto utilise :
    $product = $this->productRepository->find($id);

    API REST et Commerce Headless

    Bagisto expose une API REST complète sous /api/v1/. Elle permet de construire des frontends découplés ou des intégrations avec des systèmes externes.

    # Authentification
    POST /api/v1/customer/login
    
    # Catalogue
    GET /api/v1/products
    GET /api/v1/products/{id}
    GET /api/v1/categories
    
    # Panier
    POST /api/v1/checkout/cart/add
    GET  /api/v1/checkout/cart
    DELETE /api/v1/checkout/cart/remove/{id}
    
    # Commandes
    POST /api/v1/checkout/order
    GET  /api/v1/orders

    De plus, Bagisto prend en charge GraphQL via le paquet bagisto/headless-ecommerce, idéal pour les projets avec des frontends dans des frameworks modernes comme Nuxt ou React.


    Comparatif : Bagisto vs Autres Plateformes

    FonctionnalitéBagistoMagento 2WooCommerceSylius
    Stack de baseLaravel + VuePropriétaire + KOWordPress + PHPSymfony + Twig
    Courbe d'apprentissageMoyenne (Laravel)ÉlevéeFaibleÉlevée (Symfony)
    Multi-boutique✅ Natif✅ NatifExtension✅ Natif
    API REST✅ Complète✅ Complète✅ Complète✅ Complète
    GraphQL✅ Paquet✅ NatifExtension
    Prêt pour headlessPartiel
    LicenceMITOSL/EE commercialGPLMIT
    PerformancesÉlevéesMoyennes-FaiblesMoyennesÉlevées
    CommunautéEn croissanceGrandeTrès grandeMoyenne

    Quand choisir Bagisto :

  • L'équipe travaille déjà avec Laravel et préfère rester dans cet écosystème
  • Le multi-canal/multi-langue est nécessaire dès le départ
  • Vous voulez une solution headless avec une API robuste
  • Le projet a des exigences de personnalisation avancée
  • Quand ne pas choisir Bagisto :

  • Vous avez besoin d'un écosystème de plugins massif déjà disponible (WooCommerce gagne ici)
  • L'équipe n'a pas d'expérience avec Laravel/PHP
  • Vous cherchez une solution SaaS sans gestion d'infrastructure (Shopify peut être un meilleur choix)

  • Performance et Optimisation

    Bagisto exploite les outils d'optimisation de Laravel :

    # Mettre en cache la configuration, les routes et les vues
    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
    
    # Optimisation Composer
    composer install --optimize-autoloader --no-dev

    Pour la production, il est recommandé d'utiliser :

  • Redis pour le cache et les sessions
  • Queue workers pour les e-mails, notifications et processus lourds
  • CDN pour les assets statiques
  • Horizon pour la surveillance des files d'attente

  • Cas d'Usage Réels

    Bagisto est particulièrement adapté pour :

  • Agences de développement construisant des boutiques sur mesure pour des clients, ayant besoin d'une base solide sans réinventer la roue
  • Marketplaces B2B avec des catalogues complexes, plusieurs niveaux de prix et groupes de clients
  • Projets headless où le frontend est sur une stack différente (Next.js, Flutter) et nécessite un backend e-commerce avec API complète
  • Multi-boutique régionale avec différentes devises, langues et catalogues par pays
  • Projets d'intégration avec des ERP ou systèmes legacy, exploitant la flexibilité de Laravel

  • Conclusion

    Bagisto est un pari sérieux pour les projets e-commerce qui nécessitent flexibilité, architecture propre et contrôle total sur le code. Ce n'est pas l'option la plus simple si vous cherchez quelque chose de prêt à l'emploi en quelques heures, mais si votre contexte implique une équipe avec de l'expérience Laravel et des exigences qui vont au-delà d'une boutique standard, cela vaut la peine de l'évaluer attentivement.

    Le pari sur Laravel comme base garantit que le code est maintenable, testable et extensible d'une manière que les plateformes plus monolithiques ne permettent tout simplement pas. Et l'adoption croissante de l'approche headless rend son API robuste de plus en plus pertinente.

    Si vous évaluez Bagisto pour un projet, je recommande d'explorer le dépôt officiel, de consulter la documentation et de lancer une instance locale avec Docker — en moins de 30 minutes, vous aurez un environnement fonctionnel pour évaluer s'il répond à vos besoins.


    Ressources

  • Dépôt GitHub : github.com/bagisto/bagisto
  • Documentation officielle : devdocs.bagisto.com
  • Communauté Slack : bagisto.com/slack
  • Marketplace d'extensions : store.bagisto.com
  • Démo en ligne : demo.bagisto.com

  • Vous travaillez avec Bagisto ou vous évaluez des plateformes e-commerce pour un projet Laravel ? Vous pouvez me contacter via mon portfolio ou sur GitHub.