Skip to content

Module Manifest

The manifest.yaml file defines module metadata and configuration. (manifest.json is also accepted for backwards compatibility, but every shipped module uses YAML.)

name: Human Resources
identifier: hr
category: module_category_hr
description: Employee and contract management
dependencies:
- core
- contacts
icon: Users
version: '1.0'
FieldTypeDescription
namestringHuman-readable module name
identifierstringUnique identifier (snake_case, no spaces)
dependenciesarrayList of required module identifiers
FieldTypeDefaultDescription
descriptionstring""Short description shown in module list
categorystringcategory identifier (no default — must resolve to an existing ModuleCategory)Module category for grouping
iconstring""Lucide icon name (without “Icon” prefix)
versionstringFree-text version label (informational only — not used for upgrade ordering)
implicitbooleanfalseAuto-install once all dependencies are installed
imagestringPath to logo/thumbnail (required for Integration and Theme modules)
integration_categorystringFor integration modules: the integration category (e.g. Online Payment, Messaging)
cron_sync_methodstringFor integration modules: method name run by the sync cron
static_pathsarrayStatic subdirectories under static/ to serve (e.g. [css, js, images])

The module’s display color is computed deterministically from its name at load time; a color key in the manifest is ignored. There are no author, website, or license manifest keys — the loader does not read them.

Standard categories for grouping modules:

CategoryDescription
module_category_salesSales & CRM
module_category_crmCustomer Relationship
module_category_inventoryInventory & Stock
module_category_accountingAccounting & Finance
module_category_hrHuman Resources
module_category_manufacturingManufacturing
module_category_websiteWebsite & E-commerce
module_category_productivityProductivity Tools
module_category_marketingMarketing
module_category_servicesServices
module_category_otherUncategorized

Icons use Lucide Icons. Use the icon name without any prefix. Common examples:

IconName
UsersUsers
Shopping CartShoppingCart
ChartChartBar
CalendarCalendar
MailMail
SettingsSettings
BoxBox
BuildingBuilding
TruckTruck
Credit CardCreditCard
NewspaperNewspaper
GlobeGlobe
Folder KanbanFolderKanban
PalettePalette
{
"dependencies": ["core", "contacts"]
}
  • Dependencies are installed automatically before the dependent module
  • Circular dependencies are not allowed
  • core is implicitly required
  1. Modules without dependencies (usually core)
  2. Modules depending only on loaded modules
  3. Repeat until all modules loaded

Set implicit: true to make a module auto-install itself the moment all of its dependencies are installed — without ever being explicitly selected. This is the “bridge” pattern: glue modules that should appear only when two apps are both present.

name: Sales - Inventory Bridge
identifier: sale_inventory
dependencies:
- sale
- inventory
implicit: true

With the manifest above, sale_inventory stays uninstalled while only sale is present, and installs automatically the instant inventory is also installed (and vice-versa). You never tick it in the module list.

How it works:

  • After any install / module-list refresh, the engine scans every implicit: true module that is Not Installed and installs those whose entire dependency list is already satisfied.
  • It cascades. Auto-installing one implicit module re-runs the scan, so an implicit module whose deps are only completed by another implicit install gets picked up in the same pass.
  • It is purely additive — implicit modules are never auto-uninstalled when a dependency is later removed; that follows normal uninstall rules.

The version key is a free-text label (shipped modules use values like '1.0'). It is informational only. Schema/data migrations are not driven by any version — they replay off an append-only change-id ledger (see Migrations & Upgrades), so this key does not affect upgrades.

name: Project Management
identifier: project
category: module_category_services
description: Manage projects, tasks, and timesheets
dependencies:
- core
- contacts
- hr
icon: FolderKanban
version: '2.1'
  1. Use descriptive names - Clear, concise module names
  2. Choose appropriate icons - Icon should represent the module’s purpose
  3. Minimize dependencies - Only depend on what you actually need