Skip to content

lifecycle_events

github-actions[bot] edited this page Oct 16, 2026 · 1 revision

Lifecycle Events

Any capability can observe application lifecycle moments (project open/save, slicing, plate and object edits, preset changes, printer and job activity) by overriding on_lifecycle_event(). It is defined on the root orca.PythonPluginBase, so it is available on every capability type, and the default does nothing.

The payload is deliberately small and generic: it identifies what happened, not the full state. To learn more, call a targeted API from the handler, such as orca.host.plater().model() after an ObjectAdded event (see Host).

import orca

class ProjectWatcher(orca.script.ScriptPluginCapabilityBase):
    def get_name(self): return "Project Watcher"
    def execute(self): return orca.ExecutionResult.success()

    def on_lifecycle_event(self, event, ctx):
        if event == orca.LifecycleEvent.ProjectAfterSave:
            print("saved", ctx.name)
        elif event == orca.LifecycleEvent.SlicingJobComplete and ctx.code == orca.LifecycleEvtCode.Error:
            print("slicing failed:", ctx.msg)

Events

orca.LifecycleEvent values (also exported at module level, e.g. orca.SliceStarted):

Group Events
Project (3MF) NewProject, ProjectOpened, ProjectBeforeSave, ProjectAfterSave, ProjectClosed, ProjectDirtyChanged
Slicing SliceStarted, SliceGeometryFinished, GCodeExportStarted, GCodeExportFinished, SlicingJobComplete
Plate / model editing ObjectAdded, ObjectDeleted, ObjectTransformed, ObjectChanged, ObjectRenamed, PlateCreated, PlateDeleted, PlateSelected, PlateRenamed
Presets PresetSelected, PresetSaved
Printer / device PrintStateChanged, DeviceOnline, DeviceOffline, DeviceDiscovered, DeviceSelected, UploadStarted, UploadFinished
Print / send jobs PrintJobStarted, PrintJobFinished, SendJobStarted, SendJobFinished

Payload

ctx is an orca.LifecycleEventContext with read-only fields. Fields an event does not use keep their defaults (empty string, index = -1, dirty = False).

Field Meaning
name the primary subject: a project/output path, model, object, plate or preset name, device id, upload file name. May be empty
code orca.LifecycleEvtCode: Ok, Error or Warn. For start and state-change events Ok only means the event occurred
msg optional human-readable detail; not a stable parsing contract
id a stable object/model identifier, when the source has one
previous_name the old name, for rename events
device_id the device, for print/send job events
job_id the job/task identifier, when the originating queue provides one
source the originating subsystem or operation, suitable for filtering
index a plate, object or volume index, when the source uses one
dirty the aggregate project dirty state, for ProjectDirtyChanged

What the current sources fill in:

Event Payload
NewProject no subject; only code
ProjectOpened, ProjectBeforeSave, ProjectAfterSave, ProjectClosed name = project file / project name
ProjectDirtyChanged dirty, source
SliceStarted, SliceGeometryFinished id = model id, name = model name
GCodeExportStarted, GCodeExportFinished id, name, msg = output path; on failure code = Error and msg also carries the error
SlicingJobComplete id, name; code is Warn with msg = "cancelled" when cancelled, Error with the error text on failure
ObjectAdded, ObjectDeleted name = object name
ObjectTransformed msg = moved, rotated, scaled, arranged or auto_oriented; name for interactive moves/rotations/scales
ObjectChanged name, id, source = "geometry" (and index when known)
ObjectRenamed name, previous_name, id, index, source = object or volume
PlateCreated, PlateDeleted, PlateSelected name = plate name, index = plate index
PlateRenamed name, previous_name, index
PresetSelected name = preset, msg = preset type (print, filament, printer, ...)
PresetSaved name = preset, msg = new or overwrite
PrintStateChanged name = device id, msg = new print status
DeviceOnline, DeviceOffline, DeviceDiscovered, DeviceSelected name = device id
UploadStarted, UploadFinished name = uploaded file name; on failure code = Error, msg = error
PrintJobStarted, PrintJobFinished, SendJobStarted, SendJobFinished name = project name, device_id, source (print_job, send_job or task_manager), job_id for task-manager jobs; a finished job reports Warn/cancelled or Error

Use the table as a guide, not a contract: rely on event and code, and treat a missing field as "not provided".

Delivery Rules

  • Every loaded and enabled capability of every plugin receives every event, regardless of capability type. Disabled capabilities are skipped.
  • Events are delivered synchronously on the thread that raised them: typically the UI thread for editing, project and preset events, the slicing worker for the slicing and G-code export events, and job/upload worker threads for job and upload events. Do not assume the UI thread, keep handlers short, and never block: the slicer waits for your handler to return. A print task's PrintJobStarted and PrintJobFinished arrive on the same worker thread.
  • Once a slice is cancelled, dispatch of its slicing and G-code export events stops before the next capability is called.
  • An exception raised by a handler is logged (with the event and payload) and swallowed; it does not affect OrcaSlicer or the other plugins.
  • Handlers run inside an audit context like any other plugin call, so filesystem, network and process access prompts the user. See Plugin Audit Hook.
  • When plugins shut down, OrcaSlicer stops accepting new events and waits for handlers already running to finish before unloading plugin code.

See Registry for the other members every capability inherits.

Application Structure Overview

WIP...

Warning

!! incomplete, possibly inaccurate, being updated with new info !!

Refers to the entire application. The whole view, file loading, project saving and loading is all managed by this class. This class contains members for the model viewer, the sidebar, gcode viewer and everything else.

This is relating the the sidebar in the application window

full-sidebar

The drop down menus where you can see and select presets

combobox

Refers to the various windows with settings. e.g. the Popup to edit printer or filament preset. Also the section to edit process preset and the object list. These 4 are managed by TabPrinter, TabFilament, TabPrint and TabPrintModel respectively.

tab-popup

Clone this wiki locally