Skip to content
WARLOCKEnter the desktopSearch

Architecture

Follow the components and messages that connect Warlock’s Elm interface to the desktop.

Main coordinates interaction through The Elm Architecture. Adapters carry messages between Elm and the desktop runtime; the runtime integrates with Hyprland and desktop services. Choose a component to inspect its source and connections, or step through a flow.

The controlled-preview entries describe an alternative QA path. The default runtime uses the controller, bar and popup documents.

Production architecture & migration note

Warlock-authored production code uses Elm and Haskell only: every GUI surface is Elm, Haskell owns the backend and reviewed native/runtime integration (including standalone elf-observation, held-document, the published process-custody persistent custody and callback-drain component 6e6ad828c, and the published Store / Catalog / PinStore retention foundation a327c8f7f), and no Python runtime may ship.

The verified 35-node / 68-edge reference graph below preserves historical baseline entries (such as the earlier prototype Adapter daemon and Notification service nodes) for traceability against frozen evidence while ports earn their own source-bound acceptance (currently 19 of 242 whole requirements and 42 of 417 scenarios accepted; native/release acceptance remains open). Development QA and formal Quint tools remain separate from production deliverables.

Component explorer

Choose a component to see its details and connections. Arrow keys move between components in the same layer or to the nearest component in an adjacent layer. Focus and selection are independent. Escape returns focus to the selected component.

Walk through a flow

Each step shows the exact message and its connection. The highlighted line follows the current hop; the numbered list remains available below.

All flow steps

Open Applications from the taskbar

A taskbar gesture reaches Main through native checks and opens Applications in the shared popup.

  1. activation.js → bar-adapter.js: submitSurfaceAction: surface-action, id=bar:applications. Captures the completed Applications gesture.
  2. bar-adapter.js → Bar: requestAction: surface-action. Requests validation against the displayed taskbar.
  3. Bar → bar-adapter.js: actions: surface-action. Returns the admitted action.
  4. bar-adapter.js → Shared GTK native host: native.postMessage: surface-action. Sends the action through the native surface gate.
  5. Shared GTK native host → adapter.js: receiveAction: view-action. Adds the originating output scope after native checks.
  6. adapter.js → Main controller: rendererActions: view-action. Delivers the Applications choice to Main.
  7. Main controller → adapter.js: surfaceCommits: view-commit, frame.mode=applications. Publishes launcher controls, popup ownership, and focus targets.
  8. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the coordinated presentation.
  9. Shared GTK native host → popup-adapter.js: receivePresentation. Delivers the launcher frame to the popup document.
  10. popup-adapter.js → Popup: presentation. Renders search and application controls.
  11. popup-adapter.js → Shared GTK native host: presentation-applied. Acknowledges the current presentation after two animation frames.
  12. Shared GTK native host → popup-adapter.js: receiveFocus: surface-focus. Directs keyboard focus to the current launcher target.
Search and launch an application

Committed text filters the catalog, and selecting a result submits a launch whose receipt remains separate from window observation.

  1. Popup → popup-adapter.js: actions: surface-query, id=control:search. Emits committed search text after local composition handling.
  2. popup-adapter.js → Shared GTK native host: native.postMessage: surface-query. Sends the query after its presentation acknowledgment.
  3. Shared GTK native host → adapter.js: receiveAction: view-action. Routes the query with the popup owner's scope.
  4. adapter.js → Main controller: rendererActions: view-action containing surface-query. Updates the search and ranks matching catalog entries.
  5. Main controller → adapter.js: surfaceCommits: view-commit. Publishes the filtered application controls.
  6. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the updated launcher presentation.
  7. Shared GTK native host → popup-adapter.js: receivePresentation. Delivers the matching results.
  8. popup-adapter.js → Popup: presentation. Renders the filtered list.
  9. activation.js → popup-adapter.js: submitSurfaceAction: surface-action, id=entry:<catalog-id>. Captures the user's explicit result selection.
  10. popup-adapter.js → Popup: requestAction: surface-action. Validates the selection against the displayed results.
  11. Popup → popup-adapter.js: actions: surface-action. Returns the admitted entry action.
  12. popup-adapter.js → Shared GTK native host: native.postMessage: surface-action. Sends the launch choice through native input checks.
  13. Shared GTK native host → adapter.js: receiveAction: view-action. Routes the choice to the controller.
  14. adapter.js → Main controller: rendererActions: view-action. Creates an intent bound to the catalog identity and generation.
  15. Main controller → adapter.js: surfaceCommits: view-commit containing application-launch. Publishes pending feedback and the launch request.
  16. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the launch request in its controller batch.
  17. Shared GTK native host → Adapter daemon: application-launch. Forwards the admitted request to the catalog authority.
  18. Adapter daemon → Installed applications: DesktopAppInfo.launch([], Gio.AppLaunchContext()). Revalidates the desktop entry and submits it to Gio.
  19. Adapter daemon → Shared GTK native host: application-launch-outcome. Reports Submitted, Refused, or Unknown.
  20. Shared GTK native host → adapter.js: receiveNative: application-launch-outcome. Delivers the launch receipt.
  21. adapter.js → Main controller: nativeEvents: application-launch-outcome. Settles launch feedback while compositor observations establish any new window.
Activate a window from the taskbar

Selecting an inactive single-window group creates an activation request that the plugin applies and checks inside Hyprland.

  1. activation.js → bar-adapter.js: submitSurfaceAction: surface-action, id=bar:group:<group-key>. Captures the selected taskbar group.
  2. bar-adapter.js → Bar: requestAction: surface-action. Checks the captured action against the current presentation.
  3. Bar → bar-adapter.js: actions: surface-action. Returns the admitted group choice.
  4. bar-adapter.js → Shared GTK native host: native.postMessage: surface-action. Sends the choice through the native surface gate.
  5. Shared GTK native host → adapter.js: receiveAction: view-action. Associates the action with its output.
  6. adapter.js → Main controller: rendererActions: view-action. Resolves activation from the group's current window facts.
  7. Main controller → adapter.js: surfaceCommits: view-commit containing window-effect, operation=activate. Publishes pending feedback and the activation intent.
  8. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the batch for native admission.
  9. Shared GTK native host → Desktop data and Warlock state: admission_write: admissions-v1/<key>.json. Records the pending window intent durably before delivery.
  10. Shared GTK native host → Adapter daemon: window-effect, effectProtocol=1, operation=activate. Forwards the admitted activation.
  11. Adapter daemon → Hyprland observation authority plugin: j/elm_observe: window-effect. Submits the operation after recording backend custody.
  12. Hyprland observation authority plugin → Hyprland on Omarchy: Desktop::focusState()->fullWindowFocus; Desktop::windowState()->raise. Focuses the eligible family recipient and raises the focused window.
  13. Hyprland observation authority plugin → Adapter daemon: effect-outcome. Reports the result after checking native state.
  14. Adapter daemon → Shared GTK native host: host-admission-settled; effect-outcome. Persists the settlement and returns its admission record and effect receipt.
  15. Shared GTK native host → adapter.js: receiveNative: effect-outcome. Consumes the admission settlement locally and delivers the effect outcome.
  16. adapter.js → Main controller: nativeEvents: effect-outcome. Settles pending activation while fresh observations determine the taskbar's active state.
Switch to an empty workspace from Task View

Go to workspace navigates to an observed empty destination while Task View filters only change the displayed list.

  1. activation.js → popup-adapter.js: submitSurfaceAction: surface-action, id=overview:go:<workspace>. Captures the explicit navigation choice in the open Task View.
  2. popup-adapter.js → Popup: requestAction: surface-action. Checks the destination action against the current presentation.
  3. Popup → popup-adapter.js: actions: surface-action. Returns the admitted navigation action.
  4. popup-adapter.js → Shared GTK native host: native.postMessage: surface-action. Sends the destination choice.
  5. Shared GTK native host → adapter.js: receiveAction: view-action. Routes the action under its popup owner.
  6. adapter.js → Main controller: rendererActions: view-action. Binds navigation to the observed source and destination workspace generations.
  7. Main controller → adapter.js: surfaceCommits: view-commit containing workspace-navigation. Publishes the navigation request and pending state.
  8. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the navigation batch.
  9. Shared GTK native host → Desktop data and Warlock state: workspace_admission_write: workspace-navigation-v1.json. Records the admitted navigation durably before delivery.
  10. Shared GTK native host → Adapter daemon: workspace-navigation. Passes the request to its backend coordinator.
  11. Adapter daemon → Hyprland observation authority plugin: j/elm_observe: workspace-navigation. Submits the recorded intent without automatically replaying uncertain delivery.
  12. Hyprland observation authority plugin → Hyprland on Omarchy: changeWorkspace; rawMonitorFocus; fullWindowFocus(nullptr). Activates the checked destination monitor and empty workspace.
  13. Hyprland observation authority plugin → Adapter daemon: workspace-navigation-outcome. Reports the result after checking workspace, monitor, and focus.
  14. Adapter daemon → Shared GTK native host: workspace-navigation-outcome. Persists and forwards the settlement.
  15. Shared GTK native host → adapter.js: receiveNative: workspace-navigation-outcome. Delivers the navigation result.
  16. adapter.js → Main controller: nativeEvents: workspace-navigation-outcome. Settles navigation and reconciles the desktop presentation.
Show an application notification

An application notification updates bounded history, taskbar state, and the designated accessible announcement.

  1. Installed applications → Notification service: org.freedesktop.Notifications.Notify. Submits notification text and actions under the producer's D-Bus identity.
  2. Notification service → Installed applications: Notify return value. Returns the notification identifier.
  3. Notification service → Adapter daemon: wake; notification-update. Signals changed history and supplies its current snapshot when read.
  4. Adapter daemon → Shared GTK native host: notification-update. Sends the unsolicited snapshot over the backend pipe.
  5. Shared GTK native host → adapter.js: receiveNative: notification-update. Routes the update to the controller.
  6. adapter.js → Main controller: nativeEvents: notification-update. Updates notification state and applies announcement policy.
  7. Main controller → adapter.js: surfaceCommits: view-commit. Publishes taskbar state, visible history controls, and any permitted announcement.
  8. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the coordinated notification presentation.
  9. Shared GTK native host → bar-adapter.js: receivePresentation; receiveAnnouncement. Updates the taskbar and sends an announcement when it is the designated recipient.
  10. bar-adapter.js → Bar: presentation; announcements: announcement-projection. Renders notification state and the admitted accessible announcement.
  11. Shared GTK native host → popup-adapter.js: receivePresentation. Updates notification history when its panel is open.
  12. popup-adapter.js → Popup: presentation. Renders current history entries and their valid actions.
Save appearance in Settings

Saving an edited Settings draft persists the proposal before committed appearance reaches each document's CSS.

  1. activation.js → popup-adapter.js: submitSurfaceAction: surface-action, id=settings:save. Captures Save settings after the user edits the draft.
  2. popup-adapter.js → Popup: requestAction: surface-action. Checks Save against the current enabled presentation.
  3. Popup → popup-adapter.js: actions: surface-action. Returns the admitted save action.
  4. popup-adapter.js → Shared GTK native host: native.postMessage: surface-action. Sends the explicit save request.
  5. Shared GTK native host → adapter.js: receiveAction: view-action. Routes the Settings action to its controller.
  6. adapter.js → Main controller: rendererActions: view-action. Creates a proposal using the captured storage revision.
  7. Main controller → adapter.js: surfaceCommits: view-commit containing shell-settings-write. Publishes pending save feedback and proposed values.
  8. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the settings batch.
  9. Shared GTK native host → Adapter daemon: shell-settings-write. Forwards the admitted proposal to preference storage.
  10. Adapter daemon → Desktop data and Warlock state: settings.json; rename; fsync. Checks the revision and atomically saves the validated values.
  11. Adapter daemon → Shared GTK native host: shell-settings-outcome, status=Saved. Returns the saved snapshot and new revision.
  12. Shared GTK native host → adapter.js: receiveNative: shell-settings-outcome. Delivers the storage receipt.
  13. adapter.js → Main controller: nativeEvents: shell-settings-outcome. Accepts the matching saved result as committed appearance.
  14. Main controller → adapter.js: surfaceCommits: view-commit with appearance. Publishes the committed appearance.
  15. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the updated presentation.
  16. Shared GTK native host → popup-adapter.js: receivePresentation. Delivers committed appearance to Settings.
  17. popup-adapter.js → Popup: presentation. Renders the committed appearance attributes.
  18. Popup → appearance.js: data-theme; data-text-scale; data-effects; data-reduced-transparency. Exposes the saved appearance in the surface DOM.
  19. appearance.js → WebKitGTK renderer: document.documentElement.dataset; style.fontSize. Updates the root so shell.css paints the saved appearance.
Apply a snap layout

Apply requests checked placement of an eligible floating Wayland window within its observed work area.

  1. activation.js → popup-adapter.js: submitSurfaceAction: surface-action, id=snap:apply. Captures Apply for the selected snap region.
  2. popup-adapter.js → Popup: requestAction: surface-action. Validates Apply against the current chooser.
  3. Popup → popup-adapter.js: actions: surface-action. Returns the admitted snap action.
  4. popup-adapter.js → Shared GTK native host: native.postMessage: surface-action. Sends Apply through the native popup gate.
  5. Shared GTK native host → adapter.js: receiveAction: view-action. Routes the action under its current output owner.
  6. adapter.js → Main controller: rendererActions: view-action. Builds the snap intent from the selected region and current geometry facts.
  7. Main controller → adapter.js: surfaceCommits: view-commit containing window-effect, operation=snap. Publishes pending feedback and a placement bound to observed native revisions.
  8. adapter.js → Shared GTK native host: native.postMessage: view-commit. Submits the geometry batch.
  9. Shared GTK native host → Desktop data and Warlock state: admission_write: admissions-v1/<key>.json. Records the snap intent durably before backend delivery.
  10. Shared GTK native host → Adapter daemon: window-effect, effectProtocol=2, operation=snap. Forwards the admitted placement request.
  11. Adapter daemon → Hyprland observation authority plugin: j/elm_observe: window-effect. Records the operation and submits its exact placement.
  12. Hyprland observation authority plugin → Hyprland on Omarchy: window->layoutTarget()->setPositionGlobal. Applies the region after rechecking window eligibility, work-area identity, and size policy.
  13. Hyprland observation authority plugin → Adapter daemon: effect-outcome. Reports the result after checking geometry and preserved focus.
  14. Adapter daemon → Shared GTK native host: host-admission-settled; effect-outcome. Persists the settlement and forwards the admission record and effect receipt.
  15. Shared GTK native host → adapter.js: receiveNative: effect-outcome. Consumes the admission settlement locally and delivers the snap result.
  16. adapter.js → Main controller: nativeEvents: effect-outcome. Settles pending feedback and reconciles subsequent geometry observations.

Component table

Every component in the model, grouped by layer. Select a component name when JavaScript is available.

ComponentLayerKind and languageSummarySources, ports, windows and variant
Elm interfaceelm-program; ElmOwns desktop interaction state and publishes presentations, native requests, and focus targets from a hidden controller document.Files: implementation/warlock/src/Main.elm, implementation/warlock/src/Desktop.elm, implementation/warlock/src/OutputController.elm, implementation/warlock/src/SurfaceController.elm, implementation/warlock/src/Surface.elm, implementation/warlock/assets/index.html, implementation/warlock/adapter/current_build.py
Ports: nativeBatchDispositions, nativeViews, nativeEvents, rendererActions, nativeReflows, nativeDismissals, nativeEscapes, surfaceCommits, inspections
Rendered windows: None listed
Variant: default
Elm interfaceelm-program; ElmRenders an output's taskbar, validates captured actions, and delivers announcements assigned to that surface.Files: implementation/warlock/src/Bar.elm, implementation/warlock/src/Presentation.elm, implementation/warlock/src/SurfaceRenderer.elm, implementation/warlock/src/Announcement.elm, implementation/warlock/assets/bar.html
Ports: presentation, requestAction, actions, announcements
Rendered windows: Taskbar on each output, Pinned applications and window groups, Utility, status, and recovery controls, Assigned accessible announcements
Variant: default
Elm interfaceelm-program; ElmRenders the shared popup and manages local text composition, validated actions, announcements, and preview lifecycles.Files: implementation/warlock/src/Popup.elm, implementation/warlock/src/SurfaceRenderer.elm, implementation/warlock/src/Presentation.elm, implementation/warlock/src/RetainedPreviewPresenter.elm, implementation/warlock/src/PreviewLifecycle.elm, implementation/warlock/src/PreviewPaintGate.elm, implementation/warlock/assets/popup.html
Ports: presentation, requestAction, actions, announcements, nativePreviews, previewCommands, previewPaintRequests, previewPainted, nativePreviewGrants, nativePreviewQuarantine, nativePreviewClosed, nativePreviewIssued, nativePreviewRetry, nativePreviewRetirement
Rendered windows: Applications launcher and search, Application window picker, Window switcher, Task View and workspace transfer controls, Window context menu, Snap chooser, Settings and help, Notification history, Files navigation panel, System menu and confirmation panel, Application actions and recent items, Window previews and fallbacks within popup panels
Variant: default
JavaScript adaptersjs-adapter; JavaScriptStarts Elm.Main and connects its ports to native callbacks and the WebKit script message handler.Files: implementation/warlock/assets/adapter.js, implementation/warlock/assets/index.html
Ports: Elm.Main.init, receiveBatchDisposition, receiveTopology, receiveNative, receiveAction, receiveDismiss, receiveEscape, receiveReflow, receiveFocus, window.webkit.messageHandlers.native.postMessage
Rendered windows: None listed
Variant: default
JavaScript adaptersjs-adapter; JavaScriptStarts Elm.Bar, routes its ports, acknowledges presentation and focus, and keeps keyboard selection visible.Files: implementation/warlock/assets/bar-adapter.js, implementation/warlock/assets/bar.html
Ports: Elm.Bar.init, submitSurfaceAction, receivePresentation, receiveAnnouncement, receiveFocus, presentation-ready, presentation-applied, focus-applied
Rendered windows: None listed
Variant: default
JavaScript adaptersjs-adapter; JavaScriptStarts Elm.Popup, orders committed queries after presentation acknowledgment, maintains focus, and transports preview commands and paint acknowledgments.Files: implementation/warlock/assets/popup-adapter.js, implementation/warlock/assets/popup.html
Ports: Elm.Popup.init, submitSurfaceAction, receivePresentation, receiveAnnouncement, receiveFocus, receiveNativePreview, receiveNativePreviewBatch, receiveNativePreviewRetirement, presentation-ready, presentation-applied, focus-applied, surface-notification-focus, preview-commands
Rendered windows: None listed
Variant: default
JavaScript adaptersjs-adapter; JavaScriptCaptures context-menu gestures and menu navigation with the originating control and current presentation identity.Files: implementation/warlock/assets/context.js
Ports: mousedown, mousemove, mouseup, contextmenu, keydown, keyup, surface-context, surface-menu-navigation, window.webkit.messageHandlers.native.postMessage
Rendered windows: None listed
Variant: default
JavaScript adaptersjs-adapter; JavaScriptPreserves the captured control through press and release and rejects stale, cancelled, or mismatched activation gestures.Files: implementation/warlock/assets/activation.js
Ports: pointerdown, pointerup, pointercancel, mousedown, mouseup, click, keydown, keyup, blur, submitSurfaceAction, surface-action
Rendered windows: None listed
Variant: default
JavaScript adaptersjs-adapter; JavaScriptCopies committed Elm appearance attributes to the document root so CSS applies theme, text scale, effects, and transparency.Files: implementation/warlock/assets/appearance.js, implementation/warlock/assets/shell.css
Ports: MutationObserver, data-theme, data-text-scale, data-effects, data-reduced-transparency, document.documentElement.style.fontSize
Rendered windows: None listed
Variant: default
Desktop runtimenative-host; C and C++Owns the hidden controller, output taskbars, popup placement, input admission, backend subprocess, admission journal, and GTK crash recovery.Files: implementation/warlock/native/shared-host.c, implementation/warlock/native/host.c, implementation/warlock/native/surface.h, implementation/warlock/native/host-journal.h, implementation/warlock/native/announcement-transport.h, implementation/warlock/native/motion-preference.h, implementation/warlock/native/controlled-preview-host.h, implementation/warlock/adapter/release_builder.py
Ports: script-message-received::native, surface_eval, evaluate_delivery, backend_start, admission_bind, admission_batch, admission_write, workspace_admission_write, admission_retire, gtk_layer_init_for_window, gtk_layer_set_exclusive_zone, gtk_layer_set_keyboard_mode, --authority-config, --backend, --qa-preview-controlled
Rendered windows: GTK recovery bar with Desktop display stopped. and Restart
Variant: default
Desktop runtimerenderer; C/C++ with JavaScript, HTML, and CSSExecutes compiled Elm and JavaScript in sandboxed WebViews and paints their HTML and CSS inside GTK surfaces.Files: implementation/warlock/native/shared-host.c, implementation/warlock/native/host.c, implementation/warlock/assets/index.html, implementation/warlock/assets/bar.html, implementation/warlock/assets/popup.html, implementation/warlock/assets/shell.css
Ports: WebKitWebContext, WebKitWebView, WebKitUserContentManager, webkit_web_view_load_uri, webkit_web_view_evaluate_javascript, webkit_web_context_register_uri_scheme, script-message-received::native, web-process-terminated, elm-shell://app/, elm-shell://preview/, elm-shell://icon/
Rendered windows: Taskbar WebViews, Shared popup WebView
Variant: default
Desktop runtimenative-host; C++ with a C interfaceRuns inside the host to obtain compositor captures, retain preview resources and receipts, and serve preview images and fallback icons.Files: implementation/warlock/native/preview-provider-bootstrap.cpp, implementation/warlock/native/preview_client.hpp, implementation/warlock/native/preview_metadata.hpp, implementation/warlock/native/client-producer.cpp, implementation/warlock/native/picker-previews.h, implementation/warlock/native/picker-previews.inc, implementation/warlock/native/family_producer.hpp, implementation/warlock/native/imported-clients.cpp, implementation/warlock/native/preview_uri.cpp, implementation/warlock/native/preview-uri-webkit.cpp
Ports: warlock_preview_bootstrap_open, warlock_preview_bootstrap_catalog, warlock_preview_bootstrap_native_transport, warlock_picker_previews_open, warlock_picker_previews_poll, warlock_picker_previews_command, warlock_picker_previews_stream, warlock_picker_previews_icon_stream, warlock_picker_previews_close, warlock_imported_clients_propose_envelope, warlock_imported_clients_dispatch_control, warlock_imported_clients_confirm_control, previewFdAddress
Rendered windows: None listed
Variant: default
Desktop runtimedaemon; PythonRuns as the host's child process to authenticate compositor requests, maintain recovery records, and connect desktop services and preferences.Files: implementation/warlock/adapter/daemon.py, implementation/warlock/adapter/endpoint.py, implementation/warlock/adapter/effect_endpoint.py, implementation/warlock/adapter/geometry_endpoint.py, implementation/warlock/adapter/grant_endpoint.py, implementation/warlock/adapter/catalog_transport.py, implementation/warlock/adapter/recovery_store.py, implementation/warlock/adapter/reconciliation.py, implementation/warlock/adapter/workspace_navigation.py, implementation/warlock/adapter/cancellation_coordinator.py
Ports: stdin, stdout, handle_request, j/elm_observe, .socket.sock, .socket2.sock, projection-request, window-effect, geometry-attach, geometry-facts-request, workspace-navigation, catalog-request, application-launch, notification-request, notification-effect, files-request, files-open, system-menu-request, system-menu-effect, jump-list-request, jump-list-effect, shell-settings-write, motion-preferences-write, shortcut-preferences-write, taskbar-pins-write, cancellationOptIn
Rendered windows: None listed
Variant: default
Desktop runtimedaemon; PythonRuns in a Gio thread inside the adapter process to acquire the notification D-Bus name and maintain bounded notification history.Files: implementation/warlock/adapter/notification_service.py, implementation/warlock/adapter/daemon.py
Ports: org.freedesktop.Notifications, /org/freedesktop/Notifications, GetCapabilities, GetServerInformation, Notify, CloseNotification, ActionInvoked, NotificationClosed, NameOwnerChanged, Service.read, Service.effect, Service.observation, Service.drain, wake
Rendered windows: None listed
Variant: default
Hyprland integrationcompositor-plugin; C++Runs inside Hyprland to assign window identities, report native facts, execute checked operations, route shortcuts, and provide preview captures.Files: implementation/warlock/native/authority.cpp, implementation/warlock/native/geometry.inc, implementation/warlock/native/geometry-effects.inc, implementation/warlock/native/snap-placement.inc, implementation/warlock/native/workspace-navigation.inc, implementation/warlock/native/shortcut-bindings.inc, implementation/warlock/native/picker-preview.inc, implementation/warlock/native/capture-fd-server.inc
Ports: PLUGIN_API_VERSION, PLUGIN_INIT, PLUGIN_EXIT, elm_observe, warlock.apps_menu, warlock.system_menu, warlock.notification_history, warlock.switcher_forward, warlock.switcher_reverse, hello, scene-facts-request, snapshot-request, window-effect, geometry-attach, geometry-facts-request, workspace-navigation, shortcut-bindings-request, shortcut-bindings-apply, binding-retire-request, binding-retirement-state-request, preview-picker-family-scope-request, preview-picker-family-capture-request, preview-picker-family-retire-request, previewFdAddress
Rendered windows: None listed
Variant: default
Hyprland integrationcompositor; C++ and LuaComposes shell and application surfaces and owns native focus, input, workspaces, and window geometry on the Omarchy desktop.Files: implementation/warlock/native/core/Window.cpp, implementation/warlock/native/core/Renderer.cpp, implementation/warlock/native/core/SeatManager.cpp, implementation/warlock/native/core/InputManager.cpp, implementation/warlock/native/core/WorkspacePlacementController.cpp, docs/warlock-compatibility/omarchy-v1/sources/user/hyprland.lua, docs/warlock-compatibility/omarchy-v1/sources/packaged/omarchy.lua
Ports: HyprlandAPI::registerHyprCtlCommand, HyprlandAPI::addLuaFunction, Event::bus, Desktop::windowState, Desktop::focusState, Desktop::WindowPolicy::applyMinimized, Fullscreen::controller, Wayland, CXDGSurfaceResource, CXWaylandSurface, gtk-layer-shell, .socket.sock, .socket2.sock
Rendered windows: Composited desktop containing Warlock surfaces and application windows
Variant: default
Hyprland integrationexternal; C++Supplies Hyprland's output buffers and presentation backend, including the repository's nested Wayland backend.Files: implementation/warlock/native/aquamarine/Wayland.cpp, implementation/warlock/native/core/Renderer.cpp, implementation/warlock/adapter/release_builder.py
Ports: Aquamarine::IBuffer, Aquamarine::IOutput, Aquamarine::CWaylandBackend::start, Aquamarine::CWaylandBackend::dispatchEvents, Aquamarine::CWaylandOutput::commit, Aquamarine::CWaylandOutput::scheduleFrame, events.frame, events.present
Rendered windows: None listed
Variant: default
Applications and desktop servicesexternal; C with C++ compositor integrationConnects X11 applications to the Wayland desktop and exposes their surfaces, metadata, lifecycle, and configuration requests to Hyprland.Files: implementation/warlock/native/core/Window.cpp, implementation/warlock/native/core/ViewHitTester.cpp, implementation/warlock/native/core/InputManager.cpp
Ports: X11, Wayland, CXWaylandSurface, map, unmap, destroy, commit, configureRequest, stateChanged, metadataChanged, resourceChange, activate, setGeometry, configure
Rendered windows: None listed
Variant: default
Elm interfaceelm-program; ElmA headless Elm worker that the native host runs (native/elm-preview-policy.cpp) to apply Warlock's window preview policy.Files: implementation/warlock/src/NativePreviewPolicy.elm, implementation/warlock/src/RetainedPreviewPresenter.elm, implementation/warlock/native/elm-preview-policy.cpp, implementation/warlock/native/preview-policy-driver.cpp, implementation/warlock/native/controlled-preview-host.h
Ports: incoming, outgoing
Rendered windows: None listed
Variant: default
Elm interfaceelm-program; ElmRenders and validates the initial popup presentation before the controlled-preview QA path installs its visual receiver.Files: implementation/warlock/src/NativePreviewAdmission.elm, implementation/warlock/assets/controlled-popup.html
Ports: presentation, requestAction, actions
Rendered windows: Initial controlled-preview popup in QA mode
Variant: controlled-preview
Elm interfaceelm-program; ElmRenders visual snapshots bound to a native grant and acknowledges accepted sequences in the controlled-preview QA path.Files: implementation/warlock/src/NativePreviewRenderer.elm, implementation/warlock/src/NativePreviewReceiver.elm, implementation/warlock/src/NativePreviewVisual.elm, implementation/warlock/assets/controlled-popup.html
Ports: visualSnapshots, acceptedSnapshots, surfaceActions
Rendered windows: Controlled-preview popup and preview visuals in QA mode
Variant: controlled-preview
JavaScript adaptersjs-adapter; JavaScriptConnects the admission and visual-receiver Elm programs to native initialization, snapshots, actions, and acknowledgments in controlled-preview QA mode.Files: implementation/warlock/assets/controlled-popup-adapter.js, implementation/warlock/assets/controlled-popup.html, implementation/warlock/native/controlled-preview-host.h
Ports: submitSurfaceAction, receivePresentation, receiveFocus, initializeNativePreviewRenderer, receiveNativeVisualProjection, native-preview-projection-accepted, presentation-ready, presentation-applied, focus-applied
Rendered windows: None listed
Variant: controlled-preview
JavaScript adaptersjs-adapter; JavaScriptRuns in the host's JavaScriptCore context to retain exact preview command tickets until delivery receipts arrive in controlled-preview QA mode.Files: implementation/warlock/assets/native-preview-control-outbox.js, implementation/warlock/native/preview-policy-driver.cpp, implementation/warlock/native/controlled-preview-host.h
Ports: WarlockNativePreviewControlOutbox, retain, acknowledge, retry, snapshot, heldRetain, heldAcknowledge, heldRetry, heldSnapshot, nativePost, nativeConfirm, preview-control-ticket, preview-control-delivered, preview-control-confirmed
Rendered windows: None listed
Variant: default
Standalone Haskell packageshaskell-package; HaskellParses captured GNU readelf output and resolves declared dependency graphs with explicit bounds and unresolved obligations as a standalone library.Files: implementation/warlock/haskell/elf-observation/elf-observation.cabal, implementation/warlock/haskell/elf-observation/src/Warlock/Elf/Readelf.hs, implementation/warlock/haskell/elf-observation/src/Warlock/Elf/Graph.hs
Ports: warlock-elf-observation-proposal, Warlock.Elf.Readelf, Warlock.Elf.Graph, parseReadelf, resolveDeclared, resolveDeclaredWithOrigins, resolveDeclaredWithSearchPlans
Rendered windows: None listed
Variant: default
Standalone Haskell packageshaskell-package; Haskell and hsc2hs FFIReads identity-checked snapshots through held file descriptors and prepares hash-verified HTML with script and style hashes as a standalone library.Files: implementation/warlock/haskell/held-document/held-document.cabal, implementation/warlock/haskell/held-document/src/Warlock/Platform/Resolver.hs, implementation/warlock/haskell/held-document/src/Warlock/Platform/Resolver/Internal.hsc, implementation/warlock/haskell/held-document/src/Warlock/Platform/Descriptor.hs, implementation/warlock/haskell/held-document/src/Warlock/Http/Document.hs
Ports: warlock-held-document-proposal, Warlock.Platform.Resolver, Warlock.Http.Document, withRoot, resolveSnapshot, prepareHtml
Rendered windows: None listed
Variant: default
Standalone Haskell packageshaskell-package; Haskell and hsc2hs FFIControls bounded tool execution and selected child-process sessions with deadlines, descriptor ownership, transfer records, and cleanup tracking as a standalone library.Files: implementation/warlock/haskell/process-custody/process-custody.cabal, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process.hs, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Internal.hsc, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Owner.hs, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Lease.hs, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Transfer.hs, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Whitelist.hsc
Ports: warlock-process-custody, Warlock.Capture.Process, newOwner, status, runTool, Pactree, Readelf, selectedHeld, deadlineAfter, remainingMicros, runSelectedUntil, awaitLeader, observeSession, closeCallerTransfer, transferDisposition
Rendered windows: None listed
Variant: default
Applications and desktop servicesexternal; VariousSupply desktop entries, Wayland or X11 windows, declared actions, and notifications while owning their window contents.Files: implementation/warlock/adapter/taskbar_catalog.py, implementation/warlock/adapter/catalog_authority.py, implementation/warlock/adapter/jump_list.py, implementation/warlock/adapter/notification_service.py, implementation/warlock/native/core/Window.cpp
Ports: *.desktop, GioUnix.DesktopAppInfo, launch, launch_action, Wayland, X11, org.freedesktop.Notifications
Rendered windows: None listed
Variant: default
Applications and desktop servicesexternal; Quickshell/QMLProvides the installed Files application that Warlock opens or navigates through verified Quickshell instance commands.Files: implementation/warlock/adapter/explorer.py
Ports: /usr/bin/qs, list --json, ipc --id, files migrationStatus, files uiState, files open, --no-duplicate, --daemonize, FILES_OPEN
Rendered windows: None listed
Variant: default
Applications and desktop servicesexternal; External implementationReports the default audio sink and applies volume or mute changes through the selected local audio server.Files: implementation/warlock/adapter/system_menu.py
Ports: /usr/bin/pactl, PULSE_SERVER, pulse/native, info, list sinks, set-sink-volume, set-sink-mute
Rendered windows: None listed
Variant: default
Applications and desktop servicesexternal; External implementationSupplies network state and permissions and handles explicit networking enable or disable requests.Files: implementation/warlock/adapter/system_menu.py
Ports: org.freedesktop.NetworkManager, /org/freedesktop/NetworkManager, org.freedesktop.DBus.Properties.GetAll, GetPermissions, Enable
Rendered windows: None listed
Variant: default
Applications and desktop servicesexternal; External implementationReports session and power capabilities and handles lock, logout, suspend, reboot, and power-off requests.Files: implementation/warlock/adapter/system_menu.py
Ports: org.freedesktop.login1, org.freedesktop.login1.Manager, org.freedesktop.login1.Session, CanSuspend, CanReboot, CanPowerOff, GetSessionByPID, Lock, TerminateSession, Suspend, Reboot, PowerOff
Rendered windows: None listed
Variant: default
Applications and desktop servicesexternal; External implementationSupplies the host's motion preference through the desktop portal with GTK animation settings as the fallback.Files: implementation/warlock/native/motion-preference.h
Ports: org.freedesktop.portal.Desktop, org.freedesktop.portal.Settings.ReadOne, org.freedesktop.portal.Settings.SettingChanged, org.freedesktop.appearance, reduced-motion, gtk-enable-animations
Rendered windows: None listed
Variant: default
Applications and desktop servicesexternal; JSON, desktop-entry files, and XBELStores desktop data, saved preferences, the native host's admission records, and the adapter's separate recovery ledgers.Files: implementation/warlock/native/host-journal.h, implementation/warlock/adapter/taskbar_catalog.py, implementation/warlock/adapter/taskbar_preferences.py, implementation/warlock/adapter/shell_preferences.py, implementation/warlock/adapter/motion_preferences.py, implementation/warlock/adapter/shortcut_preferences.py, implementation/warlock/adapter/jump_list.py, implementation/warlock/adapter/recovery_store.py, implementation/warlock/adapter/admission_ledger.py, implementation/warlock/adapter/retirement_ledger.py, implementation/warlock/adapter/delivery_ledger.py, implementation/warlock/adapter/cancellation_ledger.py, implementation/warlock/adapter/workspace_navigation.py
Ports: XDG_DATA_HOME, XDG_DATA_DIRS, XDG_CACHE_HOME, XDG_STATE_HOME, taskbar.json, settings.json, motion.json, shortcuts.json, recently-used.xbel, admissions-v1, host-owner.lock, host-writer.lock, ledger-v5.json, ledger-v6.json, release-deliveries-v1.json, workspace-navigation-v1.json, flock, rename, fsync
Rendered windows: None listed
Variant: default

Connection table

All directed connections, including parallel channels. Messages are shown as recorded in the model.

FromToChannelMessagesSummary
adapter.jsMain controllerElm initialization and inbound portsElm.Main.init; nativeViews: view-topology; nativeEvents; rendererActions: view-action; nativeBatchDispositions: batch-disposition; nativeDismissals; nativeEscapes; nativeReflowsDelivers observations, scoped input, topology, and batch admission results to Main.
Main controlleradapter.jssurfaceCommits; inspectionsview-commit; surface-inspectionEmits coordinated presentation batches and optional QA inspection packets.
adapter.jsShared GTK native hostWebKit script message handler: native.postMessagehost-ready; view-commit; surface-inspection; surface-reportSerializes controller output and optional QA reports through the registered native handler.
Shared GTK native hostadapter.jswebkit_web_view_evaluate_javascriptreceiveTopology; receiveNative; receiveAction; receiveBatchDisposition; receiveDismiss; receiveEscape; receiveReflowCalls controller receivers with native events and input scoped to the owning output and presentation.
activation.jsbar-adapter.jssubmitSurfaceActionsurface-actionSubmits a completed taskbar gesture with its captured control and presentation stamp.
activation.jspopup-adapter.jssubmitSurfaceActionsurface-actionSubmits a completed popup gesture while its captured target remains current.
bar-adapter.jsBarElm initialization; presentation; requestAction; announcementsElm.Bar.init; presentation; surface-action; announcement-projectionStarts Bar and supplies presentations, captured actions, and assigned announcements.
Barbar-adapter.jsactionssurface-actionReturns actions validated against the current taskbar presentation.
bar-adapter.jsShared GTK native hostWebKit script message handler: native.postMessagepresentation-ready; presentation-applied; focus-applied; surface-action; surface-reportReports readiness, applied presentation and focus, admitted actions, and optional QA observations.
Shared GTK native hostbar-adapter.jswebkit_web_view_evaluate_javascriptreceivePresentation; receiveAnnouncement; receiveFocusDelivers each output's taskbar presentation, announcements, and focus requests.
popup-adapter.jsPopupElm initialization and inbound portsElm.Popup.init; presentation; requestAction: surface-action; announcements: announcement-projection; nativePreviews; nativePreviewRetirement; previewPaintedSupplies popup presentations, captured actions, announcements, native preview events, and paint acknowledgments.
Popuppopup-adapter.jsactions; previewCommands; previewPaintRequestssurface-action; surface-query; acquire; cancel; release; acknowledge; reconcile; previewPaintRequestsEmits admitted actions, committed queries, preview commands, and paint tickets while retaining composition drafts locally.
popup-adapter.jsShared GTK native hostWebKit script message handler: native.postMessagepresentation-ready; presentation-applied; focus-applied; surface-action; surface-query; surface-notification-focus; preview-commands; surface-reportSends popup input, acknowledgments, protocol-2 preview command packets, and optional QA observations.
Shared GTK native hostpopup-adapter.jswebkit_web_view_evaluate_javascriptreceivePresentation; receiveAnnouncement; receiveFocus; receiveNativePreview; receiveNativePreviewBatch; receiveNativePreviewRetirementDelivers popup content, focus, announcements, and native preview observations to the owning document.
context.jsShared GTK native hostWebKit script message handler: native.postMessagesurface-context; surface-menu-navigation; Escape; Close; ArrowUp; ArrowDown; Home; End; EnterRoutes context invocation and menu navigation through native source and presentation checks.
Barappearance.jsDOM attributes observed by MutationObserverdata-theme; data-text-scale; data-effects; data-reduced-transparencyExposes committed taskbar appearance for projection onto the document root.
Popupappearance.jsDOM attributes observed by MutationObserverdata-theme; data-text-scale; data-effects; data-reduced-transparencyExposes the committed appearance included in the popup presentation.
appearance.jsWebKitGTK rendererDocument root attributes and CSSdocument.documentElement.dataset.theme; document.documentElement.dataset.textScale; document.documentElement.dataset.effects; document.documentElement.dataset.reducedTransparency; document.documentElement.style.fontSizeUpdates root attributes and font size consumed by shell.css.
Shared GTK native hostWebKitGTK rendererWebKitGTK library callswebkit_web_context_new_ephemeral; webkit_web_context_set_sandbox_enabled; webkit_web_context_register_uri_scheme; webkit_user_content_manager_register_script_message_handler; webkit_web_view_load_uri; webkit_web_view_evaluate_javascript; webkit_uri_scheme_request_finish_with_responseCreates WebViews, installs the bridge, loads local documents, evaluates receivers, and returns scoped resource streams.
WebKitGTK rendererShared GTK native hostWebKitGTK callbacks and custom URI requestsscript-message-received::native; web-process-terminated; decide-policy; elm-shell://app/; elm-shell://preview/; elm-shell://icon/Delivers script messages, resource requests, navigation decisions, and renderer failures to the host.
Shared GTK native hostHyprland on OmarchyGTK/GDK Wayland surfaces and gtk-layer-shellgtk_layer_init_for_window; gtk_layer_set_monitor; gtk_layer_set_namespace; gtk_layer_set_layer; gtk_layer_set_anchor; gtk_layer_set_exclusive_zone; gtk_layer_set_keyboard_mode; gtk_layer_try_force_commitPlaces taskbars across output tops, reserves their height, and manages shell-surface keyboard ownership.
Shared GTK native hostAdapter daemonGSubprocess stdin pipe; newline-delimited JSON/usr/bin/python3 -B; projection-request; geometry-attach; geometry-facts-request; window-effect; workspace-navigation; workspace-navigation-recover; catalog-request; application-launch; taskbar-pins-write; shell-settings-request; shell-settings-write; motion-preferences-request; motion-preferences-write; shortcut-preferences-request; shortcut-preferences-write; notification-request; notification-effect; files-request; files-open; system-menu-request; system-menu-effect; jump-list-request; jump-list-effect; motion-profile-set; activation-history-request; switcher-selection-request; switcher-cancel-request; reconciliation-readyStarts the Python backend and forwards admitted controller requests over its owned input pipe.
Adapter daemonShared GTK native hostSubprocess stdout pipe; newline-delimited JSONattached; host-refresh; host-disconnected; host-geometry-negotiate; action-projection; projection-unavailable; geometry-attached; geometry-facts; effect-outcome; workspace-navigation-outcome; workspace-navigation-recovery; application-catalog; application-launch-outcome; taskbar-pins-outcome; shell-settings; shell-settings-outcome; motion-preferences; motion-preferences-outcome; shortcut-preferences; shortcut-preferences-outcome; notification-snapshot; notification-update; notification-outcome; files-snapshot; files-outcome; system-menu-snapshot; system-menu-outcome; jump-list-snapshot; jump-list-outcome; motion-profile; activation-history; pointer-ownership; shell-shortcuts; switcher-journal; host-recovery-failed; host-recovery-watermarks; host-reservation-unknown; host-reservation-released; host-admission-settledReturns observations, service snapshots, operation outcomes, recovery records, and admission settlements.
Adapter daemonHyprland observation authority pluginHyprland IPC over .socket.sock: j/elm_observehello; scene-facts-request; snapshot-request; window-effect; geometry-attach; geometry-facts-request; activation-history-request; pointer-ownership-request; shell-shortcuts-request; switcher-journal-request; switcher-selection-request; switcher-cancel-request; motion-profile-set; shortcut-bindings-request; shortcut-bindings-apply; workspace-navigation-attach; workspace-navigation; workspace-navigation-state-request; binding-retire-request; binding-retirement-state-requestSends bounded requests after authenticating the compositor socket and process identity.
Hyprland observation authority pluginAdapter daemonHyprland IPC repliesattached; scene-facts; snapshot; geometry-attached; geometry-facts; effect-outcome; activation-history; pointer-ownership; shell-shortcuts; switcher-journal; motion-profile; shortcut-bindings; shortcut-bindings-outcome; workspace-navigation-attached; workspace-navigation-outcome; workspace-navigation-state; binding-retirement; refusedReturns correlated native facts, checked outcomes, shortcut inventory, and retirement proofs.
Adapter daemonHyprland observation authority pluginHyprland IPC; cancellationOptIn patheffect-cancellation-negotiate; effect-prepare; effect-commit; effect-cancel; effect-decision-request; effect-decision-ackUses the cancellation protocol when explicit configuration enables the cancellation coordinator.
Hyprland observation authority pluginAdapter daemonHyprland IPC replies; cancellationOptIn patheffect-cancellation-capabilities; effect-prepared; effect-outcome; effect-decision-acknowledgedReturns cancellation capabilities, prepared-operation identities, terminal evidence, and acknowledgment receipts.
Hyprland on OmarchyAdapter daemonHyprland event socket .socket2.sockopenwindow; closewindow; activewindow; windowtitle; windowtitlev2; workspace; workspacev2; focusedmon; focusedmonv2; movewindow; movewindowv2; monitoradded; monitoraddedv2; monitorremoved; fullscreen; pin; urgent; changefloatingmode; elmwindowstate; warlockpointer; warlockshortcuts; warlockswitcherPrompts fresh authenticated observations when window, workspace, pointer, or shortcut state changes.
Hyprland observation authority pluginHyprland on OmarchyIn-process plugin and compositor APIsHyprlandAPI::registerHyprCtlCommand; HyprlandAPI::addLuaFunction; Desktop::WindowPolicy::applyMinimized; Desktop::focusState()->fullWindowFocus; Desktop::focusState()->rawMonitorFocus; Desktop::windowState()->raise; changeWorkspace; Fullscreen::controller()->setFullscreenMode; window->layoutTarget()->setPositionGlobalRegisters shell integration and applies validated window, focus, workspace, and placement operations.
Hyprland on OmarchyHyprland observation authority pluginEvent::bus and registered Lua callbackswindow.open; window.close; window.active; render.pre; input.keyboard.key; config.preReload; config.reloaded; monitor.added; monitor.removed; warlock.apps_menu; warlock.system_menu; warlock.notification_history; warlock.switcher_forward; warlock.switcher_reverseSupplies lifecycle and input events that update window identities, shortcut journals, and preview validity.
Hyprland on OmarchyAquamarine display backendIn-process output and buffer APIsAquamarine::IBuffer; swapchain->next; state->addDamage; state->setPresentationMode; swapchain->rollbackObtains output buffers and submits damage and presentation settings through the display backend.
Aquamarine display backendHyprland on OmarchyIn-process backend eventsevents.frame; events.present; events.state; events.destroy; events.newOutput; events.newKeyboard; events.newPointerReports output and presentation events, including devices and output changes supplied by the nested Wayland backend.
Shared GTK native hostNative preview providerC library interfacewarlock_preview_bootstrap_open; warlock_preview_bootstrap_catalog; warlock_preview_bootstrap_native_transport; warlock_picker_previews_open; warlock_picker_previews_poll; warlock_picker_previews_command; warlock_picker_previews_stream; warlock_picker_previews_icon_stream; warlock_picker_previews_closeEnrolls popup preview families, forwards lifecycle commands, and obtains scoped image streams.
Native preview providerShared GTK native hostC return values, JSON event batches, and GInputStreamcatalog; source-seed; metadata; event; request; offer; fence; source-denied; receipt; released; cancelled; refused; image/pngReturns metadata, lifecycle events, resource receipts, and preview or icon streams.
Native preview providerHyprland observation authority pluginHyprland IPC and Unix SOCK_SEQPACKET transportj/elm_observe; hello; snapshot-request; preview-picker-family-scope-request; preview-picker-family-capture-request; preview-picker-family-retire-request; previewFdAddressUses a separate native connection to obtain family capture facts and owned image resources.
Hyprland observation authority pluginNative preview providerHyprland IPC replies and Unix descriptor transferattached; snapshot; preview-picker-family-scope; preview-picker-family-owned; preview-picker-family-retired; SCM_RIGHTS; refusedReturns family capture metadata and transferred image descriptors under the preview ownership protocol.
Adapter daemonNotification servicePython calls within the adapter processService.read; Service.effect; Service.observation; Service.drainReads notification history and submits explicit notification actions to the in-process service.
Notification serviceAdapter daemonWake descriptor and Python return valueswake; notification-update; notification-snapshot; notification-outcomeSignals history changes and returns notification snapshots and action outcomes.
Installed applicationsNotification serviceSession D-Bus: org.freedesktop.NotificationsGetCapabilities; GetServerInformation; Notify; CloseNotificationCreates, replaces, or closes notifications under the sending application's D-Bus identity.
Notification serviceInstalled applicationsSession D-Bus replies and signalsNotify return value; ActionInvoked; NotificationClosedReturns notification identifiers and reports user actions or notification closure to the producer.
Adapter daemonInstalled applicationsGioUnix.DesktopAppInfo and Gio launch APIsDesktopAppInfo.new_from_filename; launch; launch_action; Gio.File.new_for_uri; Gio.AppLaunchContextLaunches a validated desktop entry, a declared application action, or an application-bound recent file.
Installed applicationsHyprland on OmarchyWayland and XDG shellCXDGSurfaceResource; map; unmap; commit; stateChanged; metadataChanged; requestMove; requestResizeSupplies native Wayland application surfaces and requests through the compositor's XDG surface handlers.
Installed applicationsXWaylandX11 display protocolX11Connects X11 applications through XWayland so their windows participate in the Wayland desktop.
XWaylandHyprland on OmarchyWayland surfaces and compositor XWayland integrationCWindow::create(SP<CXWaylandSurface>); map; unmap; destroy; commit; configureRequest; stateChanged; metadataChanged; resourceChange; activate; setGeometryCreates X11-marked compositor windows and delivers their lifecycle, metadata, state, and geometry requests.
Hyprland on OmarchyXWaylandCompositor XWayland surface APIm_xwaylandSurface->configureReturns compositor-selected position and size through the XWayland surface configuration interface.
Adapter daemonOmarchy FilesFixed qs commands and Quickshell IPCqs -p <root> list --json; qs -p <root> ipc --id <instance> call files migrationStatus; qs -p <root> ipc --id <instance> call files uiState; qs -p <root> ipc --id <instance> call files open <target>; qs -p <root> --no-duplicate --daemonize; FILES_OPENReads a verified Files instance and opens Home, a supported collection, or an explicit folder.
Adapter daemonPulseAudio-compatible audio servicepactl subprocess and local Unix audio socketpactl --server=<server> --format=json info; pactl --server=<server> --format=json list sinks; pactl --server=<server> set-sink-volume; pactl --server=<server> set-sink-muteReads the default sink and applies explicit volume or mute changes with identity checks and readback.
Adapter daemonNetworkManagerSystem D-BusGetAll; GetPermissions; Enable; NetworkingEnabled; StateReads network state and permissions and confirms requested changes through fresh properties.
Adapter daemonsystemd-logindSystem D-BusCanSuspend; CanReboot; CanPowerOff; GetSessionByPID; GetAll; Lock; TerminateSession; Suspend; Reboot; PowerOffReads session and power capabilities and submits the user's confirmed operation.
Shared GTK native hostDesktop portal and GTK motion preferenceSession D-Bus and GtkSettingsReadOne; org.freedesktop.appearance; reduced-motion; gtk-enable-animationsReads the desktop motion preference through the portal or GTK fallback.
Desktop portal and GTK motion preferenceShared GTK native hostD-Bus signals and GObject property notificationSettingChanged; NameOwnerChanged; notify::gtk-enable-animationsUpdates the native preference observation delivered to Main as host-motion-preference.
Adapter daemonDesktop data and Warlock stateFilesystem reads, locked writes, atomic rename, and fsync*.desktop; recently-used.xbel; taskbar.json; settings.json; motion.json; shortcuts.json; RecoveryStore.begin; RecoveryStore.settle; ledger-v5.json; ledger-v6.json; release-deliveries-v1.json; workspace-navigation-v1.json; CancellationLedgerReads desktop data and writes preferences and recovery ledgers, selecting the cancellation ledger when cancellationOptIn is enabled.
Shared GTK native hostDesktop data and Warlock stateNative admission journal; openat, flock, renameat, and fsyncadmission_bind; admission_write; admission_retire; workspace_admission_write; admissions-v1; host-owner.lock; host-writer.lock; workspace-navigation-v1.jsonRecords admitted window and workspace requests durably before backend delivery and retires matching settled window admissions.
Shared GTK native hostPreview policy workerJavaScriptCore invocation of incoming.send; QA-onlypresentation; grant; native; legacy; quarantine; issued; retry; closedFeeds the retained Elm preview worker through the controlled preview driver.
Preview policy workerShared GTK native hostoutgoing port through JavaScriptCore; QA-onlymodels; commands; realm; metadata; enrollment; feedback; visualsReturns retained preview state, command proposals, and visual observations to the native owner.
Shared GTK native hostNative preview control outboxJavaScriptCore function calls; QA-onlyWarlockNativePreviewControlOutbox; heldRetain; preview-control-ticket; heldAcknowledge; preview-control-delivered; heldRetry; heldSnapshotRetains native-issued command tickets and supplies delivery receipts to the original outbox.
Native preview control outboxShared GTK native hostJavaScriptCore nativePost and nativeConfirm callbacks; QA-onlypreview-commands; preview-control-confirmedReturns exact retained command wires and receipt-observation confirmations to the native driver.
Shared GTK native hostNative preview providerControlled preview C interface; QA-onlywarlock_imported_clients_propose_envelope; warlock_imported_clients_dispatch_control; warlock_imported_clients_confirm_controlObtains command tickets, dispatches retained controls, and confirms receipt observation for the controlled preview realm.
controlled-popup-adapter.jsNativePreviewAdmissionElm initialization; presentation; requestAction; QA-onlyElm.NativePreviewAdmission.init; presentation; surface-actionStarts the initial admission renderer and supplies its presentation and captured actions.
NativePreviewAdmissioncontrolled-popup-adapter.jsactions; QA-onlysurface-actionReturns actions admitted against the initial controlled popup presentation.
controlled-popup-adapter.jsNativePreviewRendererElm initialization and visualSnapshots; QA-onlyElm.NativePreviewRenderer.init; native-preview-renderer-grant; native-preview-projectionReplaces the initial renderer with a receiver bound to a native grant and sends ordered visual snapshots.
NativePreviewRenderercontrolled-popup-adapter.jsacceptedSnapshots; surfaceActions; QA-onlynative-preview-projection-accepted; surface-actionReports accepted visual sequences and admitted ordinary surface actions.
Shared GTK native hostcontrolled-popup-adapter.jswebkit_web_view_evaluate_javascript; QA-onlyreceivePresentation; receiveFocus; initializeNativePreviewRenderer; receiveNativeVisualProjectionInitializes and updates the controlled popup selected by the host's explicit QA option.
controlled-popup-adapter.jsShared GTK native hostWebKit script message handler: native.postMessage; QA-onlypresentation-ready; presentation-applied; focus-applied; surface-action; native-preview-projection-acceptedReturns controlled popup actions and acknowledgments while the host owns visibility and preview resources.
activation.jscontrolled-popup-adapter.jssubmitSurfaceAction; QA-onlysurface-actionApplies captured activation checks to the controlled popup's current receiver.

Source and scope

The explorer uses the local verified architecture model. Source links in component details open GitHub at the inspected commit. The model distinguishes the default runtime from the controlled-preview alternative.

Download the architecture model · Try the desktop