OGE logoOGE

BPMN Editor

A from-scratch, Angular-native BPMN 2.0 modeler — not a wrapper. The package carries its own dependency-free XML + diagram-interchange engine covering the full working element set: all event kinds with the nine standard event definitions, boundary events, sub-processes / event sub-processes / transactions, pools with lanes and message flows, data objects and stores, groups, call activities and activity markers. importXml() / exportXml() round-trip real BPMN 2.0 documents — Camunda extension elements and unknown attributes preserved verbatim, bpmn.io bioc element colors interoperable both ways — and the canvas is composed accessibility: no APG canvas-editor pattern exists, so the editor combines role="application", aria-activedescendant element tracking and a polite live region that narrates every action.

@oge-ui/bpmn is a commercial package — free for evaluation and non-commercial use, with no watermark and no runtime license checks. See licensing for the terms.

BPMN 2.0 XML no watermark pools & lanes undo/redo keyboard editing

Getting started

One element, a working modeler — properties panel and minimap included by default (showPropertiesPanel / showMinimap). Pick a shape from the palette and click the canvas — or drag it onto the canvas — to place it; the context pad on a selected element connects, appends and deletes, and grows an align/distribute flyout on multi-selections. The tool strip under the palette switches hand (H), lasso (L), space (S) and global-connect tools; Ctrl+F opens element search. Keyboard: Tab cycles elements, arrows move (Shift for 1px), C connects, A appends, Ctrl+C/X/V/A clipboard, F zooms to fit, F2 edits the label, Ctrl+Z / Ctrl+Y undo and redo — Escape cancels any tool or drag.

palette context pad properties panel minimap
Empty diagram — pick an element from the palette

Process

IdProcess_1

Zoom: 100% — mouse wheel zooms at the cursor, middle-drag or Space-drag pans, the minimap click/drag jumps.

Import & export

The engine reads prefix-agnostic BPMN 2.0 (bpmn:, bpmn2: or no prefix) and writes byte-deterministic XML with normalized prefixes — camunda-flavored files round-trip byte-identically, and bpmn.io bioc element colors are read and written both ways. The few remaining unsupported constructs (nested lane sets, extra event definitions on one event, timer/error payload children) are dropped with an explicit warning in importCompleted — never silently. Edit the XML below, import it, move things around, then export it back.

importXml exportXml fidelity warnings
Empty diagram — pick an element from the palette

Process

IdProcess_1

Autosave & persistence

The debounced diagramChanged stream is the autosave hook: after edits settle for autoSaveDebounceMs (default 500ms, configurable via provideOgeBpmnConfig()) it emits the diagram already serialized to both the versioned JSON envelope and BPMN XML — never mid-drag. importJson() restores an envelope with full structural validation, so a corrupted payload returns an error instead of clobbering the canvas. Draw below, watch the status line, reload the page, then restore.

diagramChanged exportJson importJson autosave
Empty diagram — pick an element from the palette

Process

IdProcess_1

Nothing saved yet — place an element to trigger the stream.

Overlays & monitoring

addOverlay() attaches an HTML badge to any element — the process-monitoring primitive for token counts, incident markers or heatmaps. Badges anchor to a corner (or the center) of the element's bounds with an optional diagram-unit offset, track the element through pan, zoom and model changes, and hide (without losing their registration) while the element is gone. The markup renders through Angular's sanitizing [innerHTML]. Select an element below and add a count bubble to it.

addOverlay removeOverlay clearOverlays
Empty diagram — pick an element from the palette

Process

IdProcess_1

No badges yet.

Read-only viewer

[readOnly]="true" turns the editor into a diagram viewer: palette, context pad, properties panel, keyboard editing and drags are all disabled, while selection, pan, zoom-to-fit, element search (Ctrl+F) and the accessible reading order (Tab through elements, live-region announcements) keep working.

readOnly viewer mode
Empty diagram — pick an element from the palette

Configuration & i18n

Every user-facing string — palette labels, tool strip, align flyout, search overlay, properties panel, context-pad actions, live-region announcement templates, the canvas name and hint — lives in OgeBpmnMessages. Override per instance with [messages] (Turkish below) or app-wide with provideOgeBpmnConfig(), which also sets gridSize, snapThreshold, the zoom bounds, autoSaveDebounceMs and the panel's fill colorPresets.

[messages] provideOgeBpmnConfig i18n
Boş diyagram — paletten bir öğe seçin

Process

IdProcess_1

Notes

  • The engine (XML reader/writer, JSON envelope, SVG renderer, geometry, routing, alignment math, command stack) is pure TypeScript in the framework-free @oge-ui/bpmn-engine package — shared by the Angular and the React editor, re-exported by both and importable directly as readBpmnXml / writeBpmnXml / toBpmnJson / fromBpmnJson / renderDiagramSvg for server-side or test pipelines.
  • Undo is snapshot-based: every command, including each arrow-key step, is exactly one undo entry, and markSaved() pins the save point that isDirty() and dirtyChanged report against.
  • exportSvg() renders a self-contained static SVG (fitted viewBox, neutral colors, custom element colors honored) — no DOM cloning, no external CSS.
  • Element coverage spans the full working set — events with all nine definition kinds, boundary events, sub-processes / event sub-processes / transactions, pools, lanes and message flows, data objects/stores, groups, call activities and activity markers. The remaining honest cuts (re-parenting by drag, vertical pool creation, multiple event definitions per event) are tracked on the roadmap; dropped content always surfaces as import warnings.