Pre-alpha. No tagged release and no upgrade path between versions. Use for evaluation and development only, not production.
Core DevPre-alpha

HTTP routes

Route registration: sumeru/core/server/web/routes_table.go. Constants: web_constants.go. Live workspace I/O is SWC JSON (GET /web/swc/workspace) plus JSON-RPC (POST /api/rpc). Do not document removed HTML-workspace POSTs as live HTTP.

Auth modes

ModeMeaning
NonePublic (login, health, RPC with own auth)
SessionRequires signed-in user (sumeru_session cookie)

Public routes

MethodPathHandler
GET/web/loginLogin form
POST/web/loginSubmit credentials
GET/web/logoutEnd session
GET/api/health{"ok":true} liveness
POST/api/rpcJSON-RPC (session or API key)

Setup (pre-init only)

MethodPathPurpose
GET/setupFirst-run wizard
POST/setup/initInitialize database
GET/Redirect → /setup

Signed-in shell

MethodPathPurpose
GET/web/homeApp hub (installed application modules)
GET/web/appsModule catalog (install/update)
POST/web/module/actionInstall, uninstall, activate, deactivate
GET/web/settingsSettings hub
GET/web/settings/app-logsApplication log viewer
GET/metricsPrometheus metrics (requires base.group_system)
GET/Redirect → /web/home

Workspace

The live workspace is SWC: GET /web/swc/workspace plus JSON-RPC (POST /api/rpc). Save/delete/object feedback uses env.services.notification — see SWC API and SWC notifications. Many2one typeahead and object buttons also go through RPC, not dedicated HTTP POSTs.

MethodPathPurpose
GET/webWorkspace shell (SWC SPA) — query: action, menu_id, view_type, id, edit, model, filter, sort, offset, q
GET/web/swc/workspaceSWC workspace JSON (arch + records)
GET/web/swc/busWebSocket live outbox events (plain GET → 404)
GET/web/swc/chatterChatter messages JSON
POST/web/chatter/postPost message (mail addon)
POST/web/company/switchSwitch active company

Removed (not registered)

These constants may remain in tests. They are not HTTP routes. SWC uses JSON-RPC only for CRUD and object actions. Historical ?msg= flash query values are not a live CRUD path.

MethodPathWas
GET/web/rel/searchMany2one typeahead — use RPC
POST/web/record/saveHTML form save + ?msg=
POST/web/record/deleteHTML form delete
POST/web/kanban/moveHTML kanban drag
POST/web/action/objectHTML object button

Report exchange

Session auth required. See Report engine for flows and limits.

MethodPathPurpose
GET/web/export/csvDownload CSV report
GET/web/export/pdfDownload PDF report
GET/web/bulk/templateHeader-only CSV template
POST/web/bulk/uploadStage CSV → redirect to mapping form
POST/web/bulk/confirmExecute import after mapping
POST/web/bulk/cancelDiscard staged batch
POST/web/import/csvLegacy alias → same as bulk upload (mapping required)

GET export (/web/export/csv, /web/export/pdf)

Query parameters:

ParamRequiredMeaning
modelYesTarget model technical name
fieldsYesComma-separated field names
actionNoWindow action id — applies action domain on list/kanban
idNoRecord id — single-row export from form view
page_sizeNoPDF only: a4, legal, or letter (default a4)

Response: file download (text/csv or application/pdf).

GET bulk template (/web/bulk/template)

ParamRequiredMeaning
modelYesTarget model
fieldsYesComma-separated fields for header row

Response: CSV attachment (headers only).

POST bulk upload (/web/bulk/upload, /web/import/csv)

Multipart form (max 8 MB). Requires CSRF token.

FieldRequiredMeaning
csrf_tokenYesSession CSRF
modelYesTarget model
fileYesCSV file
fieldsNoComma-separated fields selected in UI
import_modeNocreate (default) or upsert
actionNoSource window action id
nextNoReturn URL after import (must be under /web)

Response: redirect to sys.bulk.import mapping form.

POST bulk confirm / cancel

Form POST with CSRF. Used by alternate confirm path; primary UX uses object actions on the mapping form (action_confirm_import, action_cancel_import via JSON-RPC call).

FieldMeaning
idBatch id (sys.bulk.import)
column_mappingJSON map of CSV header → model field
skip_invalid1 to skip invalid rows (confirm handler)

Confirm response: redirect to stored next URL with ?msg=imported_N_updated_N_skipped_N.

Historical ?msg= flash (removed)

Not registered for CRUD. SWC toasts come from env.services.notification, not query strings. Bulk confirm may still redirect with an imported_… query on the HTML mapping path.

User preferences

MethodPathPurpose
POST/web/user/pinned-appsSave pinned module list (JSON body)

Object actions

MethodPathPurpose
POST/web/action/reset_passwordAdmin reset user password
POST/web/action/create_api_keyCreate API key for user

Registered object actions on records run through JSON-RPC call, not POST /web/action/object (removed).

Addon routes

Addons register additional routes via router.Register(method, path, auth, handler). Example: invoice print in the account addon — see Custom HTTP route.

See also