Create custom business modules, automate workflows with signed webhooks, and publish to the global Xetuu App Store.
Build isolated modules with custom PostgreSQL tables, NestJS services, and React frontends using shared design tokens.
Listen to real-time transactional lifecycle events including GL journal postings, payroll runs, and inventory stockouts.
Distribute your custom modules directly to thousands of enterprise workspaces worldwide with automated subscription billing.
Step-by-step tutorial on creating a pluggable Xetuu module package, registering routes, and injecting navigation menus.
packages/[module-name] or as standalone external npm packages.#
packages/fleet-management/
├── package.json
├── xetuu.manifest.json
├── src/
│ ├── index.ts
│ ├── backend/
│ │ ├── fleet.module.ts
│ │ ├── fleet.service.ts
│ │ └── fleet.controller.ts
│ └── frontend/
│ ├── components/
│ │ ├── FleetVehicleList.tsx
│ │ └── VehicleCard.tsx
│ └── pages/
│ └── FleetDashboard.tsx
└── README.md
#
xetuu.manifest.json){
"id": "fleet-management",
"name": "Fleet & Logistics Management",
"version": "1.0.0",
"author": "Acme Devs Ltd",
"category": "operations",
"icon": "Truck",
"color": "#10b981",
"routes": [
{
"path": "/fleet",
"label": "Fleet Management",
"icon": "Truck",
"requiredPermission": "fleet:view"
},
{
"path": "/fleet/vehicles",
"label": "Vehicles",
"parent": "/fleet",
"requiredPermission": "fleet:vehicles:manage"
}
],
"permissions": [
{ "key": "fleet:view", "label": "View fleet dashboard" },
{ "key": "fleet:vehicles:manage", "label": "Add or modify vehicles" }
],
"dependencies": ["inventory", "accounting"]
}
#
import { Controller, Get, UseGuards } from '@nestjs/common';
import { TenantAuthGuard } from '@xetuu/api-core';@Controller('v1/fleet')
@UseGuards(TenantAuthGuard)
export class FleetController {
@Get('vehicles')
async listVehicles() {
return {
success: true,
data: [
{ id: 'veh_01', registration: 'KDA 123X', status: 'ACTIVE', mileage: 45200 }
]
};
}
}
#
@xetuu/ui to maintain consistent styling, dark mode support, and accessibility automatically:import React from 'react';
import { Button, Table, Badge } from '@xetuu/ui';export function FleetVehicleList({ vehicles }) {
return (
Fleet Vehicles
{/* Dynamic Data Table */}
);
}