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

Sumeru Web Client (SWC)

SWC is Sumeru’s browser workspace client: a custom reactive component runtime (TypeScript 7) that replaces server-rendered workspace HTML and progressive JavaScript.

Folder layout (Sumeru-native)

core/swc/src/
├── main.ts                 # bootstrap, registerCore, SwcApp.start
├── runtime/                # framework kernel
│   ├── component.ts        # SwcComponent, updateProps, lifecycle
│   ├── component-host.ts   # nested components in templates
│   ├── app.ts              # SwcApp, mount, ErrorBoundary, rAF schedule
│   ├── hooks.ts            # useState, useEffect, useService
│   ├── reactivity.ts       # reactive proxy, markRaw, toRaw
│   ├── scheduler.ts        # rAF render queue
│   ├── lifecycle.ts        # onWillStart, onWillPatch, onPatched, …
│   └── patch/              # DOM update engine
│       ├── keyed.ts        # t-key / forEach reconciliation
│       └── blocks.ts       # static blocks + dynamic holes
├── template/               # templates
│   ├── html.ts             # html`` tagged literals
│   ├── helpers.ts          # forEach, when, fragment
│   └── sum/                # sum-template compiler (.sum.xml)
├── model/                  # client record layer
│   ├── record.ts           # SwcRecord, RecordStore, onchange
│   └── modifiers.ts        # invisible/readonly/required + domains
├── views/                  # workspace view types (by kind)
│   ├── workspace/          # WorkspaceRouter, workspace-chrome
│   ├── list/, form/, kanban/, graph/, pivot/, calendar/, chatter/, advanced/
├── widgets/                # field registry + field components
├── shell/                  # app chrome (layout, nav, launcher)
├── devtools/               # SWC Vision (__SWC_DEVTOOLS__)
├── i18n/                   # _t(), loadTranslations
├── services/               # rpc, action, router, bus, dialog, …
└── types/                  # bootstrap, workspace

Tests mirror this layout under core/swc/tests/{runtime,template,model,views,devtools}/.

Architecture

LayerLocationRole
SWC bundlecore/swc/core/engine/assets/swc/swc.jsComponents, views, services
Go shellcore/engine/templates/base.htmlLogin/setup stay server HTML; workspace mounts #swc-workspace
Workspace JSONGET /web/swc/workspaceView arch, records, toolbar metadata
Data planePOST /api/rpcCRUD, read_group, call, onchange
Serializercore/engine/swcmeta/Parse sys.view arch → JSON (ACL redaction)

TypeScript 7 toolchain

Direct devDependencies in core/swc/package.json track latest stable releases (pinned in package-lock.json):

  • Compiler: typescript@^7
  • Bundler: esbuild@^0.28 (+ .sum.xml plugin)
  • Tests: vitest@^4 with jsdom@^30 (environment: "jsdom")
  • Build: make swc (esbuild IIFE bundle)
  • Typecheck: make swc-check (tsc --noEmit)
  • Tests: make swc-test (Vitest)

Bootstrap

Authenticated workspace pages inject:

window.__SWC_BOOTSTRAP__ = { csrfToken, rpcUrl, user, menus, apps, workspace, … };

SWC reads bootstrap on DOMContentLoaded, mounts ShellLayout + WorkspaceRouter, and initializes shell chrome (sidebar, app launcher, view-tab SPA navigation).

Shell features

FeatureModuleBehaviour
Global app launchershell/app-launcher.tsCmd/Ctrl+K fuzzy search across menus and apps
SPA routerservices/router.ts, views/workspace/WorkspaceRouter.tsURL-driven view switching without full page reload
View tab syncshell/view-tab-sync.tsBreadcrumb Kanban/List/Form tabs stay active after record open
List/kanban searchviews/list/ListView.ts, views/kanban/KanbanView.tsToolbar search via ?q= query param
Addon loaderaddon/loader.tsLoads window.__SWC_ADDON_ENTRIES__ before bootstrap

Capability mapping (OWL-inspired, not OWL code)

ConceptSWC module
Componentruntime/component.ts
Registryruntime/registry.tsfields, views, services, actions, systray
Templatestemplate/html.ts, template/sum/ (.sum.xml)
Keyed liststemplate/helpers.ts + runtime/patch/keyed.ts
Reactivityruntime/reactivity.ts
Servicesservices/* + useService() in runtime/hooks.ts
Relational modelmodel/record.ts
DevToolsdevtools/bridge.tswindow.__SWC_DEVTOOLS__
Viewsviews/list, views/form, views/kanban, …

SWC Vision

Enable with ?debug=1 on workspace URLs. Exposes component tree via window.__SWC_DEVTOOLS__. Optional browser extension in core/swc/devtools-extension/.

Cutover

Legacy assets/js/* and HTML workspace render (*_render.go) were removed in the SWC release. Workspace UI is SWC-only; Home/Apps/Settings support SPA shell routes via ?shell=home|apps|settings.

Addon extension

Manifest key "swc_entry": "static/swc/main.js" registers widgets/views on registry (see SWC widgets and Build a module with SWC).

Developer docs

TopicPage
End-to-end moduleBuild a module with SWC
XML → JSON pipelineArch JSON pipeline
Field attributesField attributes
Widget catalogSWC widget catalog
View typesView types
Sum templateSum template
DevtoolsSWC Vision devtools