Skip to main content

Package boundaries

Choose the lowest shared layer that owns the behavior. Do not put product commands into a generic button or depend on Word just to reuse a table operation.

LayerOwnsDoes not own
office-uiReact primitives, tokens, overlays, menus, panelsEditor commands or document state
office-controlsCommand/property declarations and state helpersRendering or command registration
office-editor-uiEditor subscriptions, selection-aware controls, command executionA product's complete command catalogue or storage
office-iconsShared named SVG iconsButton labels or business actions
office-textProse, formatting, tables, math renderingWord page layout or application navigation
office-canvasGeometry, manipulation, connectors, canvas layoutThe viewport or pointer-event ownership
Product packagesNote, Word, Slides, and Site schemas and behaviorTenant accounts and cloud deployment
office-workspaceLocal document catalogue and navigationHosted workspace services

Framework boundaries​

The DOM view and React view are different browser integrations over the editor foundations. Office UI components are React components. Product root exports and /ui or /view exports are separated so callers can choose the API they need. Import only documented public entry points.

The query editor exposes /core and /jql for headless parsing, and /react for components. Its root includes React exports; use the headless subpaths when you only need parsing.

Lifecycle boundaries​

The host creates and disposes editing sessions. Shared UI reads state and sends commands. Storage receives snapshots or native files. Navigation waits for the host's save contract. A note embedded in another document has a separate editing session and an explicit change-delivery boundary.

Keep documentation aligned​

Package manifests define exports and versions. Package README files define onboarding and integration notes. The site catalogue reuses these sources at build time. Add a new package to the documentation group map and document its public paths; CI rejects missing coverage.