Developer Overview
The WemX tech stack, codebase layout and the extension points you can build on.
WemX v3 is a standard Laravel 12 application with a reactive UI built on Livewire 3 and Volt. If you know Laravel, you already know most of WemX. This section explains the parts specific to WemX: the billing domain, the extension system and the conventions the codebase follows.
Local development
Fork, clone and run WemX locally with Herd.
Architecture
Domain model, actions, handlers, jobs and the request lifecycle.
Build an extension
Server integrations, payment gateways and modules.
Billing lifecycle
How payments, handlers and orders fit together.
Tech stack
| Layer | Technology |
|---|---|
| Language | PHP 8.3+ |
| Framework | Laravel 12 |
| UI | Livewire 3 + Volt (single-file components), Blade, Tailwind CSS (client area), Tabler (admin area) |
| Database | MySQL 8+, MariaDB 10.3+, PostgreSQL or SQLite |
| Queue & scheduler | Laravel queues (database driver by default) and the Laravel scheduler |
| Tests | PHPUnit 11 |
Codebase layout
app/
├── Actions/ Business operations (OrderActions, PaymentActions…), the main write API
├── Console/Commands/ Artisan commands, including the scheduled cronjobs
├── Events/ Domain events (Orders, Payments, Users, ServerAccounts)
├── Extensions/ The extension framework: base classes, traits, CLI commands
├── Facades/ Tax, World, Utils, ModelSettings
├── Handlers/ Payment/subscription handlers that run when money arrives
├── Http/ Controllers and middleware
├── Jobs/ Queued jobs (order provisioning, mail delivery)
├── Models/ Eloquent models
├── Services/ Updater, marketplace, data export
└── helpers.php Global helpers: settings(), price(), extensionElements()…
config/
├── email_events.php Definitions of every automated email template
└── tax.php Default tax rates
extensions/
├── Gateways/ Payment gateway extensions
├── Modules/ Feature modules (e.g. Tickets)
└── Servers/ Server/provisioning extensions
resources/
├── admin_area/{theme}/ Admin theme (views, Volt components, assets)
├── client_area/{theme}/ Client theme
├── email_templates/{theme}/
└── invoices/{theme}/
routes/
├── web.php Client area & public routes
├── admin.php Admin routes (/admin, staff only)
├── auth.php Authentication routes (/auth)
└── console.php Scheduler definitionsWays to extend WemX
| You want to… | Build a… | Guide |
|---|---|---|
| Provision services on a new platform | Server extension | Server extensions |
| Accept payments through a new provider | Gateway extension | Gateway extensions |
| Add a feature with its own pages, models and permissions | Module | Modules |
| Add menu items or widgets to existing pages | Elements in any extension | UI elements |
| Restyle the client area, admin area, emails or invoices | Theme | Themes & views |
| React to orders, payments or users | Event listener | Events |
Avoid changing core files in app/, resources/ or routes/ for customizations. The in-app updater overwrites them. Put your changes in an extension or a custom theme instead.
Contributing
WemX is source-available on GitHub. Issues and pull requests are welcome. Please review the license before contributing or redistributing. The repository follows the Laravel conventions in its AGENTS.md:
- Format PHP with Laravel Pint (
vendor/bin/pint). - Prefer feature tests (
php artisan make:test) and model factories. - Use named routes and
route()for URLs. - Match the structure and naming of sibling files.