Open source · Pre-alpha · Dual licensed
Addons included.One kernel.
Sumeru is an open-source modular ERP framework in Go. Business functions are addons: contacts, products, CRM, sales, invoicing. Each addon is a folder with a manifest, Go models and XML views. The kernel discovers it, resolves dependencies, creates tables and wires menus.
01 / Foundation
One design.
Every addon.
The ORM, XML views, access rights, event bus and JSON-RPC API ship as one kernel and share one addon contract. Declare a model once: it becomes a table, a form, and an API resource.
package models
import "sumeru/core/sdk"
type AccountJournal struct {
sdk.BaseModel
}
func (AccountJournal) ModelName() string {
return "account.journal"
}
func (AccountJournal) Fields() []sdk.FieldDefinition {
return []sdk.FieldDefinition{
{Name: "name", Type: sdk.Char, Required: true},
{Name: "code", Type: sdk.Char, Required: true},
{Name: "active", Type: sdk.Boolean, DefaultVal: true},
}
}
02 / Capabilities
One framework.
One addon contract.
Every capability is first-party. Nothing to assemble from eleven packages with eleven config styles.
func init() {
sdk.RegisterModel(sdk.RegisterModelInput{
Model: &AccountJournal{},
Module: "account",
})
}
// Tables and columns are derived from Fields()
// and synced additively on boot.
<action id="action_account_moves_out"
type="window" model="account.move"
name="Customer Invoices"
view_mode="tree,form"/>
<menuitem id="menu_account_invoices"
name="Invoices"
action="account.action_account_moves_out"/>
id,name,model,group_id,perm_read,perm_write,perm_create,perm_unlink
access_account_move_user,...,account.move,group_account_invoice,1,1,1,0
access_account_move_manager,...,account.move,group_account_manager,1,1,1,1
# Row rules understand $uid and the active company.
func init() {
event.Subscribe("record.updated", onSaleOrderToInvoice)
}
// No compile-time import of sale.
// Check the registry before acting.
{
"jsonrpc": "2.0",
"method": "call",
"params": {
"model": "crm.lead",
"method": "search_read",
"args": [[["stage_id", "=", "won"]], ["name", "partner_id"]]
}
}
// A minute-tick scheduler runs due sys.cron rows
// and publishes cron.tick - no external broker.
// Structured JSON logs and an audit trail
// live in the same PostgreSQL database.
Models register
from init(); the kernel keeps a name-to-model registry.
Tree, form and kanban views, window actions and menus are declared in XML and loaded on install.
Groups with inheritance, per-model rights from CSV, and row-level record rules.
Addons subscribe without importing each other: uninstall Sales and Invoicing keeps working.
API keys from your user record; access rights apply exactly as they do in the UI.
Recurring work needs no Redis, no Celery, no sidecar workers.
03 / Sumeru systems
One idiom,
every subsystem.
Dependency-free addon integration, server-rendered UI, and multi-company on a single database. All following the same shape.
A folder is a product surface
Manifest, models, views, menus, security. The kernel discovers it, topologically orders
depends, syncs schema and loads data files.
Server-rendered, no build step
Go templates plus a render package. Plain CSS and native ES modules: no bundler, no minifier, no Node toolchain for the product UI.
Integrate without importing
Invoicing reacts to a confirmed sales order it has no compile-time knowledge of. Registry lookups keep optional counterparts optional.
One database, many companies
Switcher in the top bar, per-user company access, record rules scoped to the active company. Not multi-tenant. Separate customers need separate deployments.
04 / Start
Start with PostgreSQL and make run.
Go 1.26+ · PostgreSQL · Apache 2.0 community edition · Open source on GitHub