Overview
Quark ERP is a TypeScript-first, plugin-based ERP. The base core and every plugin share one version line of @quan-erp/* packages (currently 1.x) so backend DI, frontend core APIs, and platform bridges stay compatible.
- Backend plugins run on a custom Express-based framework (@quan-erp/shared-backend-core)
- Frontend plugins are React + Vite apps that register into the base core at runtime
- One UI codebase targets Web, Desktop (Electron), and Mobile (Capacitor)
- Align plugin deps and requiredBasedVersion with the base 1.x line
Backend
Server-side stack for base and plugin backends. Major versions below are taken from quan-erp-node-core/base (backend package.json, shared-backend-core, and docker-compose).
| Technology | Role | Version | Notes |
|---|---|---|---|
| TypeScript | Language | 5 | All backend services and entities; ESM builds with .js import extensions |
| Quark ERP Framework | Plugin host / DI / HTTP | 1 | Based on Express.js — IPlugin, @Module, controllers, middleware, lifecycle hooks |
| TypeORM | ORM | 0 | Entities, repositories, QueryRunner, synchronize (dev), and migrations (staging/prod) |
| PostgreSQL | Primary database | 17 | Persistent ERP data (often via pgbouncer in compose) |
| Redis | Cache / sessions / jobs | 7 | Caching, sessions, and queue / cron helpers |
Frontend
Client stack for the base core and plugin frontends. Major versions below are from quan-erp-node-core/base/frontend/package.json.
| Technology | Role | Version | Notes |
|---|---|---|---|
| React | UI library | 19 | Plugin screens, core chrome, and shared components |
| TypeScript | Language | 5 | All frontend packages; keep types aligned with shared-types / export surfaces |
| Tailwind CSS | Styling | 4 | Utility-first styling; match core / shared-ui patterns |
| TanStack React Query | Server state | 5 | Fetching, caching, and mutations for backend APIs |
| Zustand | Client state | 5 | Lightweight stores for core/plugin UI state |
| Capacitor | Mobile runtime | 7 | Native iOS / Android (@capacitor/core); prefer Platforms helpers from shared-frontend-core |
Deployment & platforms
The same frontend artifact runs across targets; use Platforms helpers from shared-frontend-core instead of hardcoding native APIs in plugins.
| Target | Runtime | Version | How it ships | Notes |
|---|---|---|---|---|
| Web | Browser + Nginx | — | Base frontend container / static host | Default local compose target on :80 |
| Desktop | Electron | 39 | Desktop app wrapping the web app | Use Platforms.isDesktop() for desktop-only paths |
| Mobile | Capacitor | 7 | Native iOS / Android app | Camera, haptics, filesystem, etc. via shared-frontend-core |
| Server / host | Docker Compose | 1 | Postgres, Redis, backend, frontend | See Deployment for install.sh / compose layout |
Desktop
Electron 39
Mobile
Capacitor 7
Web
Web