Skip to main content

Engine

The <kritzel-engine> is the low-level headless canvas primitive. It handles rendering, viewport management, pointer events, undo/redo, and workspace management with no built-in UI chrome.

Props

PropertyTypeDescription
activeWorkspaceIdstringProgrammatically force an active workspace
assetStorageConfigKritzelAssetStorageConfigAsset storage configuration for images
cursorTargetHTMLElementElement to apply cursor styles to
debugInfoKritzelDebugInfoToggle debug overlay information
editorIdstringUnique identifier for namespacing storage keys
globalContextMenuItemsContextMenuItem[]Context menu items for canvas background
isLoadingbooleanExternal loading state
lockDrawingScalebooleanFixed visual size for drawn objects regardless of zoom
objectContextMenuItemsContextMenuItem[]Context menu items for selected objects
scaleMaxnumberMaximum zoom scale
scaleMinnumberMinimum zoom scale
syncConfigKritzelSyncConfigSync provider configuration
theme'light' | 'dark'Active theme
themesKritzelTheme[]Array of available themes
userIKritzelUserThe current user for awareness broadcasting
viewportBoundaryBottomnumberBottom pan boundary
viewportBoundaryLeftnumberLeft pan boundary
viewportBoundaryRightnumberRight pan boundary
viewportBoundaryTopnumberTop pan boundary
wheelEnabledbooleanEnable or disable mouse wheel zoom/pan
workspaceKritzelWorkspaceThe active workspace

Events

EventPayload TypeDescription
activeToolChangeKritzelBaseToolEmitted when the active tool changes
activeWorkspaceChangeKritzelWorkspaceEmitted when the active workspace changes
awarenessChangeMap<number, Record<string, any>>Emitted when the awareness state changes
isEngineReadyKritzelEngineStateEmitted when the engine is fully initialized
longpressPointerEventEmitted on long-press (useful for mobile context menus)
objectsAddedObjectsAddedEventEmitted when objects are added
objectsChangeKritzelBaseObject[]Emitted when objects are added, removed, or modified
objectsInViewportChangeKritzelBaseObject[]Emitted when visible objects change (after pan/zoom)
objectsRemovedObjectsRemovedEventEmitted when objects are removed
objectsSelectionChangevoidEmitted when selected objects change
objectsUpdatedObjectsUpdatedEventEmitted when objects are updated
undoStateChangeKritzelUndoStateEmitted when undo/redo availability changes
viewportChangeKritzelViewportStateEmitted on pan, zoom, or resize
workspacesChangeKritzelWorkspace[]Emitted when workspaces are created, updated, or deleted

Methods

All methods are async and return Promises.

Object

addObject

Adds a new object to the canvas. The object is automatically assigned an ID, core reference, and z-index.

addObject<T extends KritzelBaseObject>(object: T): Promise<T | null>

removeObject

Removes an object from the canvas.

removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null>

updateObject

Updates properties of an existing canvas object.

updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null>

getObjectById

Retrieves a canvas object by its unique ID.

getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null>

getAllObjects

Returns all objects on the canvas across all layers.

getAllObjects<T extends KritzelBaseObject>: Promise<T[]>

findObjects

Returns all objects matching the given predicate. Excludes internal selection-related objects.

findObjects<T extends KritzelBaseObject>(predicate: (obj: KritzelBaseObject) => boolean): Promise<T[]>

getObjectsTotalCount

Returns the total number of objects on the canvas.

getObjectsTotalCount: Promise<number>

getObjectsInViewport

Returns all objects currently visible within the viewport bounds.

getObjectsInViewport: Promise<KritzelBaseObject[]>

getCopiedObjects

Returns objects currently in the internal clipboard from a prior copy call.

getCopiedObjects: Promise<KritzelBaseObject[]>

Selection

getSelectedObjects

Returns the currently selected objects. Returns an empty array if nothing is selected.

getSelectedObjects: Promise<KritzelBaseObject[]>

selectObjects

Programmatically selects the given objects. Switches to the selection tool automatically.

selectObjects(objects: KritzelBaseObject[]): Promise<void>

selectAllObjectsInViewport

Selects all objects currently visible in the viewport. Switches to the selection tool automatically.

selectAllObjectsInViewport: Promise<void>

clearSelection

Deselects all currently selected objects.

clearSelection: Promise<void>

triggerSelectionChange

Manually triggers the objectsSelectionChange event.

triggerSelectionChange: Promise<void>

Viewport & Navigation

getViewport

Returns the current viewport state including position, scale, and dimensions.

getViewport: Promise<KritzelViewportState>

setViewport

Sets the viewport to center on the given world coordinates at the specified scale.

setViewport(x: number, y: number, scale: number): Promise<void>

panTo

Pans the viewport to center on the given world coordinates without changing the scale.

panTo(x: number, y: number): Promise<void>

zoomTo

Zooms the viewport to the given scale. Optionally centers on a world point; if omitted, zooms around the viewport center.

zoomTo(scale: number, worldX?: number, worldY?: number): Promise<void>

centerObjectInViewport

Pans and zooms the viewport to center on the given object.

centerObjectInViewport(object: KritzelBaseObject): Promise<KritzelBaseObject>

backToContent

Pans and zooms the viewport to fit the nearest content, with padding. Useful when the user has panned away from all objects.

backToContent(): Promise<boolean>

Returns true if content was found and the viewport was adjusted, false otherwise.

centerAllObjects

Pans and zooms the viewport to fit ALL objects on the canvas, including those not currently rendered.

centerAllObjects(animate?: boolean): Promise<boolean>

screenToWorld

Converts screen-relative pixel coordinates to world coordinates.

screenToWorld(x: number, y: number): Promise<{ x: number; y: number }>

worldToScreen

Converts world coordinates to screen-relative pixel coordinates.

worldToScreen(x: number, y: number): Promise<{ x: number; y: number }>

Workspace

createWorkspace

Creates a new workspace and emits a workspacesChange event.

createWorkspace(workspace: KritzelWorkspace): Promise<KritzelWorkspace | null>

updateWorkspace

Updates an existing workspace's metadata and emits a workspacesChange event.

updateWorkspace(workspace: KritzelWorkspace): Promise<void>

deleteWorkspace

Deletes a workspace and emits a workspacesChange event.

deleteWorkspace(workspace: KritzelWorkspace): Promise<void>

getWorkspaces

Returns all available workspaces.

getWorkspaces: Promise<KritzelWorkspace[]>

getActiveWorkspace

Returns the currently active workspace.

getActiveWorkspace: Promise<KritzelWorkspace>

Tool Management

registerTool

Registers a new drawing tool with the engine.

registerTool(
toolName: string,
toolClass: any,
toolConfig?: KritzelBrushToolConfig | KritzelLineToolConfig | KritzelTextToolConfig | KritzelShapeToolConfig
): Promise<KritzelBaseTool>

changeActiveToolByName

Switches the active drawing tool by its registered name.

changeActiveToolByName(toolName: string): Promise<void>

changeActiveTool

Switches the active drawing tool. Deactivates the current tool and clears any selection.

changeActiveTool(tool: KritzelBaseTool): Promise<void>

disable

Disables all user interaction with the engine (pointer, keyboard, etc.).

disable: Promise<void>

enable

Re-enables user interaction after a call to disable.

enable: Promise<void>

Clipboard & Editing

copy

Copies the currently selected objects to the internal clipboard.

copy(): Promise<void>

cut

Cuts the currently selected objects to the internal clipboard (deletes them from the canvas).

cut(): Promise<void>

paste

Pastes previously copied objects at the specified world coordinates.

paste(x: number, y: number): Promise<void>

delete

Deletes the currently selected objects from the canvas.

delete: Promise<void>

Ordering

bringForward

Moves an object one layer forward in the z-order. If omitted, applies to the current selection.

bringForward(object?: KritzelBaseObject): Promise<void>

sendBackward

Moves an object one layer backward in the z-order. If omitted, applies to the current selection.

sendBackward(object?: KritzelBaseObject): Promise<void>

bringToFront

Moves an object to the very front of the z-order. If omitted, applies to the current selection.

bringToFront(object?: KritzelBaseObject): Promise<void>

sendToBack

Moves an object to the very back of the z-order. If omitted, applies to the current selection.

sendToBack(object?: KritzelBaseObject): Promise<void>

Alignment

alignObjects

Aligns the currently selected objects according to the specified alignment.

alignObjects(alignment: KritzelAlignment): Promise<void>

Alignment values: StartHorizontal, CenterHorizontal, EndHorizontal, StartVertical, CenterVertical, EndVertical.


Grouping

group

Groups the currently selected objects into a single group.

group: Promise<void>

ungroup

Ungroups the currently selected group back into individual objects.

ungroup: Promise<void>

Undo & Redo

undo

Undoes the last action.

undo: Promise<void>

redo

Redoes the last undone action.

redo: Promise<void>

Export

getScreenshot

Captures a screenshot of the current viewport as a data URL.

getScreenshot(format?: 'png' | 'svg'): Promise<string>

exportViewportAsPng

Exports the current viewport as a PNG file and triggers a browser download.

exportViewportAsPng: Promise<void>

exportViewportAsSvg

Exports the current viewport as an SVG file and triggers a browser download.

exportViewportAsSvg(): Promise<void>

getSelectedObjectsAsSvgString

Generates an SVG string from the currently selected objects.

getSelectedObjectsAsSvgString(options?: { theme?: 'light' | 'dark'; padding?: number }): Promise<string | null>

exportSelectedObjectsAsSvg

Exports the currently selected objects as an SVG file and triggers a browser download.

exportSelectedObjectsAsSvg(options?: { theme?: 'light' | 'dark'; padding?: number }): Promise<void>

getSelectedObjectsAsPngDataUrl

Generates a PNG data URL from the currently selected objects.

getSelectedObjectsAsPngDataUrl(options?: { theme?: 'light' | 'dark'; padding?: number; scale?: number }): Promise<string | null>

exportSelectedObjectsAsPng

Exports the currently selected objects as a PNG file and triggers a browser download.

exportSelectedObjectsAsPng(options?: { theme?: 'light' | 'dark'; padding?: number; scale?: number }): Promise<void>

exportAsJson

Exports the current workspace and all its objects as a JSON string.

exportAsJson(): Promise<string>

importFromJson

Imports a workspace from a JSON string into a new workspace.

importFromJson(json: string): Promise<void>

loadObjectsFromJson

Loads objects from a workspace JSON string into the current workspace.

loadObjectsFromJson(json: string): Promise<number>

Other

hideContextMenu

Hides the context menu and resets any associated selection state.

hideContextMenu: Promise<void>

getDisplayableShortcuts

Returns all registered keyboard shortcuts (without action/condition) for display in a help UI.

getDisplayableShortcuts: Promise<Omit<KritzelShortcut, 'action' | 'condition'>[]>