Skip to content

Open-source scope & modules

Chinese full version: 开源定位与模块.

Fit / not a fit

Good fit

  • Internal admin panels, ops backends, management mid-tier
  • Goravel + Vue / React starter
  • RBAC, menus, logs, export, code generator
  • Small/medium business modules (users, orders, payments as optional demos)

Not a fit

  • Financial trading cores or strong-consistency payment hubs (payments here are admin + gateway sample)
  • Huge multi-region commercial SaaS platforms with hard SLAs
  • Turning on sharding + ES + multi-queue without ops planning

Demo accounts are for exploration only. Change default admin password and secrets for production.

Payment boundary

CapabilityStatus
Payment method CRUD, payment records list/detail/exportAvailable
Create payment for order + optional initiateReference flow
Mock gateway pay / query / notify → ApplyPaidResultRunnable locally
WeChat / Alipay client calls (gopay)Sample; needs your merchant config
WeChat / Alipay query & notify verifypayment_gateway_not_implemented (501)
New channelsRegisterPaymentGateway + notify/{type}
Refund / original-path refundNot provided

Demo UI: MODULE_PAYMENTS_ENABLED=true. Keep off or mock-only on public production until you own the gateway.

Core vs advanced

Core (default): JWT + RBAC, system management, operation/login/system logs, list export, code generator (dev). Minimal dependency: MySQL-compatible DB + Go process.

Advanced (opt-in): Redis cache/queue, order/payment sharding, Elasticsearch/Meilisearch, multi-queue drivers, OpenTelemetry, AI / pprof / Swagger, database-per-tenant (TENANCY_DRIVER=database).

Module switches

VariableDefaultEffect
MODULE_ORDERS_ENABLEDtrueHide order menus + reject order APIs when false
MODULE_PAYMENTS_ENABLEDfalsePayment admin UI/API; keep off on public deploy by default
PAYMENT_GATEWAYS_ENABLEDemptyGateway whitelist; empty = all registered
APP_ENABLE_DEV_TOOLfalseExplicit true in production to open dev tools

Data scope (row-level, inside a tenant)

Configured on roles (roles.data_scope); widest wins across roles; super-admin always sees all. Orthogonal to DB-per-tenant isolation.

ValueMeaning
1All data
2Custom departments (role_department)
3Own department
4Department and children
5Self only

Wired lists: admins (department_id), articles / attachments / export jobs (admin_id).

Minimal production sketch

ini
APP_ENV=production
APP_DEBUG=false
APP_KEY=          # go run . artisan key:generate
JWT_SECRET=       # strong random
CACHE_STORE=redis
QUEUE_CONNECTION=redis
SWAGGER_ENABLED=false

See Production checklist, Build, Docker deploy.