Si llevas tiempo en el ecosistema PHP y Laravel, es probable que en algún momento hayas tenido que evaluar plataformas de e-commerce. WooCommerce, Magento, PrestaShop... el mercado está lleno de opciones. Pero Bagisto es un caso aparte: una plataforma construida nativamente sobre Laravel y Vue.js, pensada para desarrolladores que quieren control real sobre su arquitectura sin sacrificar velocidad de desarrollo.

En este artículo exploro Bagisto en profundidad: su arquitectura, sus características más importantes, cuándo tiene sentido usarlo y cómo se compara con otras alternativas del mercado.


¿Qué es Bagisto?

Bagisto es un framework de e-commerce open source lanzado en 2018 por Webkul Software. Está construido sobre el stack que muchos desarrolladores PHP ya conocen bien:

  • Laravel (backend y lógica de negocio)
  • Vue.js (frontend reactivo)
  • MySQL / PostgreSQL (persistencia)
  • Eloquent ORM (gestión de modelos)
  • A diferencia de Magento —que tiene una curva de aprendizaje brutal y una arquitectura que puede sentirse ajena— o de WooCommerce —que vive dentro del ecosistema WordPress—, Bagisto fue diseñado desde cero como una aplicación Laravel. Si ya sabes Laravel, te mueves con naturalidad dentro del código.

    Repositorio oficial: github.com/bagisto/bagisto

    Más de 13,000 estrellas en GitHub y una comunidad activa con releases regulares.


    Arquitectura Técnica

    Estructura de Paquetes

    Bagisto implementa una arquitectura modular basada en paquetes de Laravel. El núcleo está dividido en múltiples paquetes dentro de packages/Webkul/:

    packages/
    └── Webkul/
        ├── Admin/          # Panel de administración
        ├── Attribute/      # Sistema de atributos EAV
        ├── Cart/           # Carrito de compras
        ├── Catalog/        # Productos y categorías
        ├── Category/       # Árbol de categorías
        ├── Checkout/       # Flujo de checkout
        ├── Core/           # Funcionalidades base
        ├── Customer/       # Gestión de clientes
        ├── Inventory/      # Control de inventario
        ├── Order/          # Gestión de órdenes
        ├── Payment/        # Pasarelas de pago
        ├── Product/        # Tipos de producto
        ├── Sales/          # Módulo de ventas
        ├── Shipping/       # Métodos de envío
        ├── Tax/            # Cálculo de impuestos
        └── User/           # Gestión de usuarios admin

    Esta separación en paquetes facilita el mantenimiento, la extensibilidad y el testing de forma aislada. Cada paquete registra sus propias rutas, vistas, migraciones y service providers.

    El Modelo EAV

    Bagisto utiliza el patrón Entity-Attribute-Value (EAV) para los atributos de productos, de forma similar a Magento. Esto permite flexibilidad al definir atributos personalizados sin necesidad de modificar el esquema de la base de datos. Sin embargo, como todo EAV, implica un costo en complejidad de queries —algo a considerar cuando el catálogo escala a cientos de miles de productos.

    Frontend: Blade + Vue.js

    El panel de administración está construido con Vue.js y hace uso intensivo de componentes reactivos. El storefront (tienda pública) usa Blade templates con Vue para los componentes interactivos (carrito, búsqueda en tiempo real, filtros).

    Bagisto también ofrece una API REST y GraphQL completa, lo que lo hace viable como backend headless para frontends en Next.js, Nuxt, o aplicaciones móviles.


    Características Principales

  • Tipos de producto: Simple, Configurable (con variantes), Virtual, Downloadable, Grouped, Bundle
  • Atributos personalizados con tipos: texto, número, fecha, booleano, select, multiselect, imagen
  • Grupos de atributos y familias de atributos reutilizables
  • Categorías jerárquicas con árbol de navegación
  • SEO por producto: meta title, meta description, URL slug personalizada
  • Multi-Canal y Multi-Locale

    Una de las fortalezas de Bagisto es su soporte nativo para múltiples canales, locales y divisas:

    // Cada canal puede tener su propio dominio, tema, catálogo y configuración
    Channel::create([
        'code'        => 'eu_store',
        'name'        => 'European Store',
        'hostname'    => 'eu.mystore.com',
        'locales'     => ['en', 'de', 'fr', 'es'],
        'currencies'  => ['EUR'],
        'root_category_id' => 2,
    ]);

    Esto es especialmente valioso para proyectos con presencia internacional o para agencias que gestionan múltiples tiendas desde una sola instalación.

    Sistema de Precios

  • Precios por grupo de clientes
  • Precios de catálogo (reglas de descuento sobre productos)
  • Precios de carrito (cupones, reglas por cantidad)
  • Precios especiales con fechas de inicio y fin
  • Soporte para múltiples divisas con conversión automática
  • Pasarelas de Pago

    Bagisto incluye integraciones con:

  • PayPal (Standard, Express, Smart Buttons)
  • Stripe
  • Razorpay
  • PayU
  • Pago contra entrega (COD)
  • Pago por transferencia bancaria
  • Para proyectos en Costa Rica y América Latina, la integración con Stripe es completamente viable a través de Stripe Connect, aunque conviene validar el método de cobro local disponible en cada país.

    Gestión de Inventario

  • Stock por producto y por variante
  • Multi-warehouse (inventario por almacén)
  • Alertas de stock bajo
  • Backorders configurables
  • Gestión de stock en tiempo real durante el checkout

  • Instalación y Configuración

    Requisitos del Sistema

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

    Instalación con Composer

    # Crear proyecto
    composer create-project bagisto/bagisto my-store
    
    cd my-store
    
    # Configurar variables de entorno
    cp .env.example .env
    
    # Editar .env con credenciales de base de datos
    # DB_CONNECTION=mysql
    # DB_HOST=127.0.0.1
    # DB_DATABASE=bagisto_db
    # DB_USERNAME=root
    # DB_PASSWORD=secret
    
    # Ejecutar instalador
    php artisan bagisto:install
    
    # Compilar assets
    npm install && npm run build

    El comando bagisto:install ejecuta migraciones, seeders con datos iniciales y configura el almacenamiento. Al finalizar, el panel de administración está disponible en /admin.

    Instalación con Docker

    Para entornos de desarrollo o producción con Docker:

    # docker-compose.yml simplificado
    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:

    Extensibilidad: Crear un Paquete Personalizado

    La forma correcta de extender Bagisto es mediante paquetes Laravel. No se modifica el core directamente.

    php artisan package:make Acme/CustomModule

    Esto genera la estructura base en packages/Acme/CustomModule/:

    CustomModule/
    ├── src/
    │   ├── Config/
    │   │   └── menu.php          # Entradas del menú admin
    │   ├── Http/
    │   │   ├── Controllers/
    │   │   └── Middleware/
    │   ├── Models/
    │   ├── Repositories/
    │   ├── Resources/
    │   │   ├── assets/
    │   │   └── views/
    │   ├── Routes/
    │   │   ├── admin-routes.php
    │   │   └── shop-routes.php
    │   └── Providers/
    │       └── CustomModuleServiceProvider.php
    └── package.json

    Bagisto utiliza el patrón Repository en lugar de acceder directamente a los modelos, lo que facilita el testing y la sustitución de implementaciones:

    // En lugar de:
    $product = Product::find($id);
    
    // Bagisto utiliza:
    $product = $this->productRepository->find($id);

    API REST y Headless Commerce

    Bagisto expone una API REST completa bajo /api/v1/. Permite construir frontends desacoplados o integraciones con sistemas externos.

    # Autenticación
    POST /api/v1/customer/login
    
    # Catálogo
    GET /api/v1/products
    GET /api/v1/products/{id}
    GET /api/v1/categories
    
    # Carrito
    POST /api/v1/checkout/cart/add
    GET  /api/v1/checkout/cart
    DELETE /api/v1/checkout/cart/remove/{id}
    
    # Órdenes
    POST /api/v1/checkout/order
    GET  /api/v1/orders

    Adicionalmente, Bagisto tiene soporte para GraphQL a través del paquete bagisto/headless-ecommerce, ideal para proyectos con frontends en frameworks modernos como Nuxt o React.


    Comparativa: Bagisto vs Otras Plataformas

    CaracterísticaBagistoMagento 2WooCommerceSylius
    Stack baseLaravel + VuePHP propio + KOWordPress + PHPSymfony + Twig
    Curva de aprendizajeMedia (Laravel)AltaBajaAlta (Symfony)
    Multi-tienda✅ Nativo✅ NativoPlugin✅ Nativo
    API REST✅ Completa✅ Completa✅ Completa✅ Completa
    GraphQL✅ Paquete✅ NativoPlugin
    Headless readyParcial
    LicenciaMITOSL/EE comercialGPLMIT
    PerformanceAltaMedia-BajaMediaAlta
    ComunidadCreciendoGrandeMuy grandeMedia

    Cuándo elegir Bagisto:

  • El equipo ya trabaja con Laravel y prefiere mantenerse en ese ecosistema
  • Se necesita multi-canal/multi-locale desde el inicio
  • Se quiere una solución headless con API robusta
  • El proyecto tiene requerimientos de personalización profunda
  • Cuándo no elegir Bagisto:

  • Se necesita un ecosistema de plugins masivo ya disponible (WooCommerce gana aquí)
  • El equipo no tiene experiencia con Laravel/PHP
  • Se busca una solución SaaS sin gestión de infraestructura (Shopify puede ser mejor opción)

  • Performance y Optimización

    Bagisto aprovecha las herramientas de optimización de Laravel:

    # Cachear configuración, rutas y vistas
    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
    
    # Optimización de Composer
    composer install --optimize-autoloader --no-dev

    Para producción, se recomienda:

  • Redis para cache y sesiones
  • Queue workers para emails, notificaciones y procesos pesados
  • CDN para assets estáticos
  • Horizon para monitoreo de colas

  • Casos de Uso Reales

    Bagisto encaja especialmente bien en:

  • Agencias de desarrollo que construyen tiendas a medida para clientes y necesitan una base sólida sin reinventar la rueda
  • Marketplaces B2B con catálogos complejos, múltiples niveles de precio y grupos de clientes
  • Proyectos headless donde el frontend está en un stack diferente (Next.js, Flutter) y se necesita un backend e-commerce con API completa
  • Multi-tienda regional con diferentes divisas, idiomas y catálogos por país
  • Proyectos de integración con ERPs o sistemas legacy, aprovechando la flexibilidad de Laravel

  • Conclusión

    Bagisto es una apuesta seria para proyectos de e-commerce que requieren flexibilidad, arquitectura limpia y control total sobre el código. No es la opción más sencilla si buscas algo listo para usar en horas, pero si tu contexto implica un equipo con experiencia en Laravel y requerimientos que van más allá de una tienda estándar, vale la pena evaluarlo con atención.

    La apuesta por Laravel como base garantiza que el código sea mantenible, testeable y extensible de formas que plataformas más monolíticas simplemente no permiten. Y la adopción creciente del enfoque headless hace que su API robusta sea cada vez más relevante.

    Si estás evaluando Bagisto para un proyecto, recomiendo explorar el repositorio oficial, revisar la documentación y levantar una instancia local con Docker —en menos de 30 minutos tienes un entorno funcional para evaluar si se adapta a tus necesidades.


    Recursos

  • Repositorio GitHub: github.com/bagisto/bagisto
  • Documentación oficial: devdocs.bagisto.com
  • Comunidad Slack: bagisto.com/slack
  • Marketplace de extensiones: store.bagisto.com
  • Demo en vivo: demo.bagisto.com

  • ¿Estás trabajando con Bagisto o evaluando plataformas de e-commerce para un proyecto Laravel? Puedes contactarme a través de mi portfolio o por GitHub.