Lightweight Open-Source ERP for internal business use.
🚧 Project Status: Active Development
LiteERP is under heavy development. The current version is not production-ready. This project is intended for experienced developers evaluating architecture and core design also join into team to grow together
This LiteERP is built with ReactJS, Laravel, and MySQL8, following modern software architecture principles including Clean Architecture, Domain-Driven Design (DDD), and Domain Events.
The project is designed for scalability, multi-business support, maintainability, and high performance.
It has extremely low framework dependencies.
- Purchase
- Invoice In
- Stock In
- Warehouse
- Product
- Product Category
- Customer
- Customer Group
- Inventory
- Order Shipping
- Shipping Provider
- Authentication
- Multiple Business
- Log
- Order
- Invoice Out
- Stock Out
- Notification
- Overview Dashboard
- Employee Role
- Storage
- Reports
- Multiple Language
- Global Testing
- Unit Tests
- Clean Code Standard (ReactJS & Laravel)
- ReactJS
- Laravel
- MySQL 8
- Clean Architecture
- Domain Driven Design
- Domain Events
/core
├── Domain
│ ├── Entities
│ ├── ValueObjects
│ ├── Events
│ ├── Services
│ └── Repository Interfaces
│
├── Application
│ ├── UseCases
│ ├── DTOs
│ └── Handlers
│
├── Infrastructure
│ ├── Persistence (Eloquent, DB)
│ ├── Event Handlers
│ ├── Providers
│
└── Resources
└── js
└── ReactJS UI
- Entity – domain objects with identity
- Value Object – objects compared by value
- Aggregate & Aggregate Root – consistent clusters of domain logic
- Domain Service – domain logic not tied to a specific entity
- Repository Interface – abstracted persistence
- Event – communication between domain modules
Event::dispatch("erp.user.create", $data);
Event::listener("erp.user.*", function(string $eventName, array $data));
Modules communicate via Domain Events, enabling:
- Loose coupling
- High scalability
- Easier testing
- Event-driven workflow
- A user can belong to multiple businesses
- Each request is processed under the selected
current_business - Fully isolated business data
- Managed through middleware + Redux
- JWT authentication
- Refresh token
- Multi-business session
- Role & Permission per business
- PSR-12 (Laravel)
- Event-driven communication
- Clear domain separation
- Consistent folder structure
- Notification Center
- Reporting Engine
- Overview Dashboard
- Extended test coverage
- Realtime event streaming (WebSocket)
- Reports
- Multiple Language
- Extensions
This project uses a private license.
All rights reserved.
I will continue update to easy to understand
https://drive.google.com/file/d/1acR1X12C4dLYNyK7w4grxWdTnfyswQDi/view?usp=sharing
Setup basic information for business, you need change information like business information working for.
APP_TIMEZONE="Asia/Ho_Chi_Minh"
APP_CURRENCY="USD"
APP_CURRENCY_LOCALE="en-US"
You also need config SMTP mail, timezone, pusher at ./app/.env before start.
- First go to root folder and run
docker compose build && docker compose up -d - Next login in to docker container
docker exec -it erpsoft-8.3 bash - Next run
composer install,cp -r ./.env.example .env - Next run
php artisan generate:key - Next run
php artisan migrate - Next run
php artisan storage:link - Next run
php artisan jwt:generate-keysto generate private key and public key for Json Web Token - Next run
php artisan app:create-admin {email} {password} {name}to create admin account - Next run
php artisan queue:work --queue=low,default,high - Next run
php artisan schedule:work - Last step exit docker container and go to
./appand runnpm run devornpm run buildfor production.
Visit: http://localhost:8001/dashboard/login
Note: You can change password for mysql account at docker-compose.yml
Stevelee
LiteERP
Contact email: [email protected]
If this project helps you, consider sponsoring via GitHub Sponsors.
