Caution
Sumeru and its standard addons are pre-alpha software. They are under active development and are not ready for production or commercial use.
- No production use. Do not deploy to production or run live business workloads. Stability, security, and data integrity are not guaranteed.
- Not for sale. Do not offer, resell, license, or deploy Sumeru to customers. This is not a commercial product.
- Evaluation only. Use for local development, testing, and feedback at your own risk.
APIs, data models, and behavior may change without notice. There is no migration guarantee and no production support.
Standard business addons for Sumeru β CRM, Sales, Accounting, Purchase, HR, and supporting apps. Each directory at the repo root is an installable Sumeru module with a manifest.json, Go models, and XML views.
Go module: sumeru_addons Β· depends on sumeru only (replace sumeru => ../sumeru in go.mod).
| Module | Display name | Summary | Depends |
|---|---|---|---|
product |
Products | Product catalog shared by sales, purchase, and accounting | base |
utm |
UTM Tracking | Campaigns, mediums, and sources for lead attribution | base |
crm |
CRM | Leads, pipelines, teams, and opportunities | base, contacts, mail, utm |
sale |
Sales | Quotations and sales orders | product, contacts, crm |
sale_crm |
Sales CRM Bridge | Draft quotation when an opportunity is won | sale, crm |
account |
Invoicing | COA, journal entries, taxes, payments, financial reports, bank reconciliation, analytic | product, contacts |
purchase |
Purchase | RFQ β confirmed PO β vendor bill | account, product |
hr |
Employees | Employee directory, departments, and job positions | base, contacts |
Kernel apps such as contacts and mail ship with sumeru β they are not in this repository but are required by several modules above.
Install modules in dependency order. A typical full stack:
product β utm β crm β sale β sale_crm β account β purchase β hr
From your Sumeru workspace (see sumeru_custom_addons):
go run . -- -c sumeru.conf -i product,utm,crm,sale,sale_crm,account,purchase,hr --stop-after-initUpdate a single module after pulling changes:
go run . -- -c sumeru.conf -u account --stop-after-init- CRM β Pipeline kanban, forecast views, lead scoring (PLS), assignment rules, merge/convert/lost wizards, prorated and recurring revenue fields.
- Sales β Quotation β confirmed order, sequences, tax-aware lines, invoice status tracking.
- sale_crm β Event bridge: winning an opportunity creates a draft quotation (no UI of its own).
The account module is a consolidated accounting suite:
| Area | Models / features |
|---|---|
| Core | Chart of accounts, journals, moves & lines, taxes, payment terms, fiscal positions |
| Payments | Customer/vendor payments, payment register wizard, move reversal |
| Reporting | Profit & Loss, Balance Sheet, Trial Balance, General Ledger |
| Bank | Bank statements, statement lines, reconciliation workspace |
| Analytic | Analytic plans and accounts |
- product β Products and categories; income/expense account links for posting.
- purchase β RFQ/PO workflow with vendor bill generation via
account. - hr β Employees, departments, and jobs.
- utm β Marketing attribution (campaign, medium, source) linked from CRM leads.
Every module in this repo follows the same layout:
<technical_name>/
manifest.json # name, depends, data files, application flag
init.go # blank-imports models, services, controllers, wizards
models/ # Go structs (sdk.Model embed + sumeru tags)
views/ # list, form, kanban, actions, menus (XML)
security/ # groups, record rules, sys.access.csv
data/ # seed XML, sequences, demo (optional)
services/ # business logic (optional)
controllers/ # HTTP routes (optional)
wizard/ # transient models (optional)
Rules:
- Folder name = technical module name β must match
^[a-z][a-z0-9_]*$and equalmanifest.jsonβ"name". dependsβ only list modules fromsumeru/addonsor this repo; this Go module must not import other addon repos.dataβ paths relative to the module root; loaded on-i(install) or-u(update).
Models are Go structs embedding sdk.Model with struct tags consumed by the ORM and code generator.
type SaleOrder struct {
sdk.Model `sumeru:"model=sale.order"`
PartnerID sdk.Many2One[CorePartner] `sumeru:"string=Customer"`
State sdk.Selection[SaleOrderState] `sumeru:"string=Status,default=draft"`
AmountTotal sdk.Numeric `sumeru:"string=Total,precision=18,scale=2,default=0"`
}Conventions used across this repo:
| Pattern | Location | Purpose |
|---|---|---|
selection_types.go |
models/ |
Typed enums for sdk.Selection[T] |
zrefs.go |
models/ |
Aliases for cross-module relations (CorePartner, ProductProduct, β¦) |
zmodels.go |
models/, wizard/ |
Generated sdk.MustRegister β run make generate from the workspace after adding models |
Internal relations use the moduleβs own structs (Many2One[AccountJournal]). Cross-module refs go through zrefs.go aliases, matching the pattern in engagement_cookbook.
This repo is not the process entry point. Clone it as a sibling of sumeru and sumeru_custom_addons, add ../sumeru_addons to addons_path, then run the server from the custom workspace. Full setup: sumeru_custom_addons README.
After model or module changes:
# From sumeru_custom_addons
make generate
# From this repo
go test ./...
go vet ./...| Goal | Where |
|---|---|
| Improve a standard business app | Pull request to this repo |
| Customer-specific module or override | sumeru_custom_addons/addons/ |
Engine, kernel apps (base, mail, β¦) |
sumeru |
Do not fork or patch modules here for a single deployment β extend from the custom workspace so upstream pulls stay clean.
See CONTRIBUTING.md for the PR workflow, generate loop, and review expectations.
| Repository | Role |
|---|---|
| ProjectMeru/sumeru | Core engine and kernel addons |
| ProjectMeru/sumeru_addons | Standard business apps (this repo) |
| ProjectMeru/sumeru_custom_addons | Workspace runner, custom addons, generated imports |
- CONTRIBUTING.md β development setup and pull request guidelines
- CODE_OF_CONDUCT.md β community standards
- SECURITY.md β responsible disclosure (do not open public issues for undisclosed vulnerabilities)
Licensed under the Apache License, Version 2.0.