Build Your BackendArchitecture
Modules
Static modules that contribute entities — collections, jobs, sidebar items, dashboard widgets.
Modules are static objects that contribute entities to your app. They're pre-built packages (like admin, audit) or custom bundles you create.
Using Modules
List your module dependencies in modules.ts:
modules.ts
import { adminModule, auditModule } from "@questpie/admin/server";
export default [adminModule, auditModule] as const;Codegen merges module contributions with your project-level entities. The admin module contributes:
usercollection (for authentication)- Administration sidebar section
- Audit log entries (via audit module)
What Modules Contribute
A module is a plain object of entities:
const myModule = module({
name: "my-module",
// Entity contributions
collections: {
/* ... */
},
globals: {
/* ... */
},
jobs: {
/* ... */
},
routes: {
/* ... */
},
services: {
/* ... */
},
fields: {
/* ... */
},
// Admin contributions (when admin plugin is active)
sidebar: {
/* ... */
},
dashboard: {
/* ... */
},
// Infrastructure
auth: {
/* ... */
},
migrations: [
/* ... */
],
seeds: [
/* ... */
],
messages: {
en: {
/* ... */
},
sk: {
/* ... */
},
},
});Merging Rules
When codegen merges modules with your project:
- Your project wins — Project-level entities override module contributions with the same key
- Sidebar merges — Module sidebar sections/items are added alongside project sidebar
- Dashboard merges — Module dashboard items are added to project dashboard
- Collections merge — Module collections are added to the app
Module Composition
Modules can depend on other modules:
const auditModule = module({
name: "audit",
modules: [adminModule], // Depends on admin
collections: {
auditLog: auditLogCollection,
},
sidebar: {
items: [
{
sectionId: "administration",
type: "collection",
collection: "auditLog",
},
],
},
});Built-in Modules
| Module | Package | Provides |
|---|---|---|
adminModule | @questpie/admin/server | User collection, admin UI, auth pages |
auditModule | @questpie/admin/server | Audit log collection, timeline widget |
Creating Custom Modules
import { module } from "questpie";
export const notificationsModule = module({
name: "notifications",
collections: {
notifications: notificationsCollection,
},
jobs: {
sendPushNotification: pushJob,
},
sidebar: {
items: [
{
sectionId: "operations",
type: "collection",
collection: "notifications",
},
],
},
});Related Pages
- Plugins — Plugin declarations
- Building a Module — Create reusable modules
- File Convention — Project-level entities