Skip to content

Modules & Plugins

Litekart's modular architecture allows you to extend functionality through plugins and custom modules. This guide covers how to work with Litekart's plugin system and create custom extensions.

Plugin Architecture

Litekart plugins follow a standardized structure that allows seamless integration with the core platform. Plugins can extend:

  • API endpoints - Add new REST API routes
  • Services - Extend business logic
  • Admin UI - Add new admin panel features
  • Storefront - Customize customer experience
  • Database models - Add custom data entities
  • Event handlers - React to platform events

Official Plugins

Payment Plugins

Stripe Payment Plugin

bash
npm install @litekart/plugin-payment-stripe

Features:

  • Credit card payments
  • Apple Pay & Google Pay
  • Payment intents
  • Webhook handling
  • Refund processing

Configuration:

json
{
  "plugins": [
    {
      "resolve": "@litekart/plugin-payment-stripe",
      "options": {
        "apiKey": "sk_test_...",
        "webhookSecret": "whsec_..."
      }
    }
  ]
}

PayPal Payment Plugin

bash
npm install @litekart/plugin-payment-paypal

Features:

  • PayPal Checkout
  • PayPal Payments Pro
  • Recurring payments
  • Express Checkout

Shipping Plugins

Shippo Shipping Plugin

bash
npm install @litekart/plugin-shipping-shippo

Features:

  • Real-time shipping rates
  • Label generation
  • Tracking integration
  • Multi-carrier support

Shiprocket Shipping Plugin

bash
npm install @litekart/plugin-shipping-shiprocket

Features:

  • Indian shipping integration
  • Bulk label printing
  • COD orders
  • Real-time tracking

Communication Plugins

SendGrid Email Plugin

bash
npm install @litekart/plugin-email-sendgrid

Features:

  • Transactional emails
  • Template support
  • Bounce handling
  • Analytics

SMS Gateway Plugins

bash
npm install @litekart/plugin-sms-twilio
npm install @litekart/plugin-sms-aws-sns

Features:

  • OTP verification
  • Order notifications
  • Marketing SMS
  • Delivery receipts

Analytics Plugins

Google Analytics Plugin

bash
npm install @litekart/plugin-analytics-google

Features:

  • E-commerce tracking
  • Conversion funnels
  • Custom events
  • Real-time reports

Facebook Pixel Plugin

bash
npm install @litekart/plugin-analytics-facebook

Features:

  • Purchase tracking
  • Add to cart events
  • Custom audiences
  • Conversion optimization

Creating Custom Plugins

Plugin Structure

my-custom-plugin/
├── package.json
├── src/
│   ├── index.js
│   ├── services/
│   ├── routes/
│   ├── models/
│   └── migrations/
├── migrations/
└── README.md

Basic Plugin Example

javascript
// src/index.js
export default {
  name: 'my-custom-plugin',
  version: '1.0.0',

  // Register services
  services: [
    {
      name: 'customService',
      service: './services/custom-service.js'
    }
  ],

  // Register API routes
  routes: [
    {
      method: 'GET',
      path: '/api/custom-endpoint',
      handler: './routes/custom-route.js'
    }
  ],

  // Database migrations
  migrations: [
    './migrations/create-custom-table.js'
  ],

  // Plugin configuration
  options: {
    apiKey: {
      type: 'string',
      required: true,
      description: 'API key for external service'
    }
  }
}

Service Creation

javascript
// src/services/custom-service.js
import { BaseService } from '@litekart/core'

export default class CustomService extends BaseService {
  constructor(container) {
    super(container)
    this.logger = container.logger
    this.db = container.db
  }

  async customMethod(data) {
    // Your custom logic here
    return await this.db.customTable.create(data)
  }
}

API Route Creation

javascript
// src/routes/custom-route.js
export default async (req, res) => {
  const customService = req.scope.resolve('customService')

  try {
    const result = await customService.customMethod(req.body)
    res.json({ success: true, data: result })
  } catch (error) {
    res.status(500).json({ success: false, error: error.message })
  }
}

Database Migration

javascript
// src/migrations/create-custom-table.js
export const up = async (db) => {
  await db.schema.createTable('custom_table', (table) => {
    table.increments('id').primary()
    table.string('name').notNullable()
    table.timestamp('created_at').defaultTo(db.fn.now())
  })
}

export const down = async (db) => {
  await db.schema.dropTable('custom_table')
}

Plugin Development Best Practices

Code Organization

  1. Separate concerns - Keep services, routes, and models in separate files
  2. Use TypeScript - For better type safety and developer experience
  3. Follow naming conventions - Use consistent naming patterns
  4. Document your code - Include JSDoc comments for public APIs

Error Handling

javascript
// Proper error handling in services
async customMethod(data) {
  try {
    // Validate input
    if (!data.name) {
      throw new Error('Name is required')
    }

    // Business logic
    const result = await this.processData(data)

    // Log success
    this.logger.info('Custom operation completed', { id: result.id })

    return result
  } catch (error) {
    // Log error
    this.logger.error('Custom operation failed', { error: error.message })

    // Re-throw for proper error handling
    throw error
  }
}

Testing

javascript
// __tests__/custom-service.test.js
import CustomService from '../src/services/custom-service.js'

describe('CustomService', () => {
  let service
  let mockDb

  beforeEach(() => {
    mockDb = {
      customTable: {
        create: jest.fn()
      }
    }

    service = new CustomService({
      db: mockDb,
      logger: console
    })
  })

  it('should create custom record', async () => {
    const data = { name: 'Test' }
    const expected = { id: 1, name: 'Test' }

    mockDb.customTable.create.mockResolvedValue(expected)

    const result = await service.customMethod(data)

    expect(result).toEqual(expected)
    expect(mockDb.customTable.create).toHaveBeenCalledWith(data)
  })
})

Plugin Publishing

Publishing to npm

json
// package.json
{
  "name": "@litekart/plugin-custom-feature",
  "version": "1.0.0",
  "description": "Custom feature plugin for Litekart",
  "main": "dist/index.js",
  "keywords": ["litekart", "plugin", "ecommerce"],
  "author": "Your Name",
  "license": "MIT",
  "peerDependencies": {
    "@litekart/core": "^1.0.0"
  }
}
bash
# Build and publish
npm run build
npm publish --access public

Plugin Registry

Submit your plugin to the Litekart Plugin Registry:

  1. Create a GitHub repository
  2. Add plugin metadata
  3. Submit PR to plugin registry
  4. Plugin gets reviewed and published

Advanced Plugin Features

Event Listeners

javascript
export default {
  name: 'event-listener-plugin',

  events: {
    'order.placed': './listeners/order-placed.js',
    'customer.created': './listeners/customer-created.js'
  }
}

Cron Jobs

javascript
export default {
  name: 'cron-plugin',

  cronJobs: [
    {
      name: 'daily-report',
      schedule: '0 9 * * *', // Daily at 9 AM
      handler: './jobs/daily-report.js'
    }
  ]
}

Admin UI Extensions

javascript
export default {
  name: 'admin-ui-plugin',

  admin: {
    routes: [
      {
        path: '/admin/custom',
        component: './admin/pages/custom-page.vue'
      }
    ],
    menu: [
      {
        label: 'Custom',
        icon: 'custom-icon',
        path: '/admin/custom'
      }
    ]
  }
}

Troubleshooting Plugins

Common Issues

Plugin not loading

  • Check plugin name and version compatibility
  • Verify plugin structure matches requirements
  • Check server logs for error messages

Database migration failures

  • Ensure migration files are properly exported
  • Check database permissions
  • Verify migration order

API routes not working

  • Check route registration
  • Verify middleware setup
  • Test route isolation

Debug Mode

Enable debug logging for plugins:

bash
# Environment variable
DEBUG=litekart:* npm run dev

Recovery Procedures

Reset Plugin Configuration

sql
-- Remove plugin from database
DELETE FROM plugins WHERE name = 'problematic-plugin';

-- Clear plugin cache
TRUNCATE TABLE plugin_cache;

Community Plugins

  • Multi-vendor marketplace - Enable multiple sellers
  • Advanced reporting - Custom analytics dashboards
  • Inventory management - Enhanced stock tracking
  • Loyalty program - Points and rewards system
  • Product reviews - Advanced review and rating system
  • SEO optimization - Enhanced search engine optimization

Finding Plugins

Support

Need help with plugins?