A scalable Express.js project with TypeScript featuring CRUD with pagination, filtering, sorting, file uploads, soft delete, RBAC, JWT authentication, access and audit logs, and cron jobs for scheduled tasks.
- Role-Based Access Control (RBAC) – Fine-grained access control for different user roles and permissions.
- CRUD Operations – Create, Read, Update, Delete endpoints out of the box.
- Pagination, Filtering, Sorting, Searching – Easily manage large datasets with built-in pagination, query-based filtering, and sorting mechanisms.
- File Upload – Upload and manage files using multer.
- Soft Delete – Soft-delete support using timestamps instead of permanently removing data.
- Multi Delete & Multi Create – Perform bulk operations with ease.
- Authentication & Login – Token-based login system using JWT.
- Access Logs – Track all incoming requests for monitoring and debugging.
- Audit Logs – Record data changes with before/after snapshots for critical actions.
- Cron Jobs – Scheduled background tasks using node-cron.
- Job Queue – Queued background tasks using Redis & BullMQ.
- Express.js – Web framework
- TypeScript – Static type-checking
- MySQL – Database
- Knex – Query Builder
- JWT – Authentication
- Multer – File uploads
- Node-Cron – Scheduled jobs
- Redis & BullMQ – Job Queue
- Morgan – Logging
- Docker - Containerization
- ESLint, Prettier - Controlling code quality
- Husky - Git hook
- Admin dashboards
- Internal tools
- APIs for web/mobile apps
- SaaS backends
- Docker - Download Docker 🐳
- Docker Compose - Usually comes with Docker Desktop
git clone https://github.com/MinPyaeKyaw/rbac-expressjs-starter.git
cd rbac-expressjs-starter- Build and start all services (MySQL, Redis, and the Express app):
docker compose up --buildThis will:
- Start a MySQL 8.0 database with the
rbac_expressschema automatically loaded - Start a Redis server for job queues
- Build and start the Express.js application
- Wait for MySQL to be ready before starting the app
-
Access the application:
- API Server: http://localhost:3000
- MySQL Database: localhost:3306
- Redis: localhost:6379
-
Default database credentials:
- Host:
localhost - Port:
3306 - User:
root - Password:
your db password - Database:
rbac_express
- Host:
-
Log in with these credentials:
- Username:
sai min - Password:
saimin
- Username:
If you prefer to run without Docker for development:
- Install dependencies:
npm install-
Set up environment variables:
- Copy
.env.exampleto.env(if available) - Configure your local MySQL and Redis connections
- Copy
-
Start the development server:
npm run dev- Postman Collection: Available in
src/docs/rbac_express.postman_collection.json - Technical Documentation: Read here
- Database Schema: Check
src/docs/rbac_express.sql
- Run these commands
cd rbac-expressjs-starter
npm install
npm run dev-
Log in with this credential
- username - sai min
- password - saimin
-
📄 Postman collection can be found in
src/docsfolder. Get [here](src/docs/rbac_express.postman_collection. -
📝 Read detailed technical documentation here
Sai Min Pyae Kyaw
💼 Passionate Full Stack Developer | Node.js | TypeScript | React | MySQL
📍 Based in Myanmar
Made with ❤️ by Sai Min Pyae Kyaw
