QUESTPIE
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:

  • user collection (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:

  1. Your project wins — Project-level entities override module contributions with the same key
  2. Sidebar merges — Module sidebar sections/items are added alongside project sidebar
  3. Dashboard merges — Module dashboard items are added to project dashboard
  4. 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

ModulePackageProvides
adminModule@questpie/admin/serverUser collection, admin UI, auth pages
auditModule@questpie/admin/serverAudit 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",
			},
		],
	},
});

On this page