<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Architecture Overview</title><link>https://sourceforge.net/p/sucrose/wiki/Architecture%2520Overview/</link><description>Recent changes to Architecture Overview</description><atom:link href="https://sourceforge.net/p/sucrose/wiki/Architecture%20Overview/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 04 Jul 2026 04:15:48 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/sucrose/wiki/Architecture%20Overview/feed" rel="self" type="application/rss+xml"/><item><title>Architecture Overview modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Architecture%2520Overview/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -46,9 +46,9 @@
 | `Sucrose.Property.exe` | `src/Project/Sucrose.Property` | WPF | Wallpaper "Customize" UI — edits the live wallpaper's user properties. |
 | `Sucrose.Update.exe` | `src/Update/Sucrose.Update` | WPF | Auto-update checker / downloader / installer launcher. |
 | `Sucrose.Undo.exe` | `src/Project/Sucrose.Undo` | WPF | Uninstall / rollback: terminates Sucrose processes, deletes install + data folders, removes shortcuts and the registry key, then self-deletes. |
-| **Live engines (7)** | `src/Live/*` | WPF render hosts | The wallpaper rendering backends (see below). |
+| **Live engines (8)** | `src/Live/*` | WPF render hosts | The wallpaper rendering backends (see below). |

-The seven live rendering engines and their executables:
+The eight live rendering engines and their executables:

 | EngineType | Executable | Used for |
 |---|---|---|
@@ -59,6 +59,7 @@
 | `WebViewLive` | `Sucrose.Live.WebView.exe` | Url / Web / Video / YouTube / Gif (WebView2 backend) |
 | `CefSharpLive` | `Sucrose.Live.CefSharp.exe` | Url / Web / Video / YouTube / Gif (CEF backend) |
 | `MpvPlayerLive` | `Sucrose.Live.MpvPlayer.exe` | Gif / Video (libmpv backend) |
+| `VlcPlayerLive` | `Sucrose.Live.VlcPlayer.exe` | Gif / Video (libVLC via LibVLCSharp.WPF) |

 See [Engines Overview](Engines-Overview) for the per-type allowed-engine matrix.

@@ -66,7 +67,7 @@


 - **Fault isolation.** A renderer crash, a hung browser child process, or an exception in a service does not crash the tray or the settings window. A central crash handler (`Sucrose.Watchdog.exe`) catches failures from every process and a reporter (`Sucrose.Reportdog.exe`) uploads them.
 - **Independent lifecycles.** The wallpaper engine keeps running while the Portal UI is closed; the Launcher tray persists across UI sessions; short-lived workers (Commandog, Watchdog) start, do one job, and exit.
-- **Backend swapping.** Seven interchangeable render engines run as distinct executables, so the user can switch the engine per wallpaper type without affecting the rest of the stack.
+- **Backend swapping.** Eight interchangeable render engines run as distinct executables, so the user can switch the engine per wallpaper type without affecting the rest of the stack.
 - **Privilege &amp;amp; resource separation.** Heavy work (audio FFT, perf counters, WMI queries) lives in `Backgroundog`; the UI stays light.

 ## The three coupling mechanisms
@@ -83,7 +84,7 @@
 |---|---|
 | `src/Launcher/` | `Sucrose.Launcher` |
 | `src/Portal/` | `Sucrose.Portal` |
-| `src/Live/` | The 7 live rendering engines |
+| `src/Live/` | The 8 live rendering engines |
 | `src/Project/` | The **Services**: `Backgroundog`, `Commandog`, `Watchdog`, `Reportdog`, `Property`, `Undo` |
 | `src/Library/` | Shared class libraries (`Manager`, `Memory`, `Mpv.NET`, `Pipe`, `Resources`, `Signal`, `Transmission`, `XamlAnimatedGif`) |
 | `src/Shared/` | Shared Item Projects (`.shproj`), with engine-specific ones under `src/Shared/Engine/` |
@@ -122,7 +123,7 @@
 Every executable defines a project-specific symbol so that the shared `.shproj` code can vary behavior with `#if`. See [Preprocessor Symbols](Preprocessor-Symbols) for the full reference.


 - **App symbols:** `LAUNCHER`, `PORTAL`, `BACKGROUNDOG`, `COMMANDOG`, `WATCHDOG`, `REPORTDOG`, `PROPERTY`, `UNDO`, `UPDATE`.
-- **Engine symbols:** `ENGINE` plus one of `LIVE_WEBVIEW`, `LIVE_CEFSHARP`, `LIVE_MPVPLAYER`, `LIVE_AURORA`, `LIVE_NEBULA`, `LIVE_VEXANA`, `LIVE_XAVIER`.
+- **Engine symbols:** `ENGINE` plus one of `LIVE_WEBVIEW`, `LIVE_CEFSHARP`, `LIVE_MPVPLAYER`, `LIVE_VLCPLAYER`, `LIVE_AURORA`, `LIVE_NEBULA`, `LIVE_VEXANA`, `LIVE_XAVIER`.
 - **Platform symbols** (from `Directory.Build.targets`, keyed off `PlatformTarget`): `X86`, `X64`, `ARM64` — each also sets the matching `RuntimeIdentifier` (`win-x86` / `win-x64` / `win-arm64`).
 - `RELEASE` gates the private-runtime env-var setup in `Runtime.Configure()`.

@@ -132,6 +133,6 @@

 - [Commandog Dispatcher](Commandog-Dispatcher) — the short-lived command broker.
 - [IPC](IPC) — pipe / signal / transmission channels and the command bus.
 - [Single Instance Mutexes](Single-Instance-Mutexes) — which processes gate and how.
-- [Engines Overview](Engines-Overview) — the seven render engines.
+- [Engines Overview](Engines-Overview) — the eight render engines.
 - [Repository Layout](Repository-Layout) — folder-to-layer mapping.
 - [Preprocessor Symbols](Preprocessor-Symbols) — per-app / engine / platform `#if` symbols.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:48 -0000</pubDate><guid>https://sourceforge.net3e97f68db8dd612712234ddb9870866f273808f4</guid></item><item><title>Architecture Overview modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Architecture%2520Overview/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -91,7 +91,7 @@
 | `src/Bundle/` | `Sucrose.Bundle` (installer / packager) |
 | `src/Localizer/` | `Sucrose.Localizer` (translation tool) |
 | `src/Sucrose/` | Build output (generated) |
-| `exp/` | Experimental ports (Avalonia, Uno, WinUI) — **not** part of the main solution |
+| `exp/` | Experimental ports (Avalonia, Uno, WinUI, Services) — **not** part of the main solution |

 See [Repository Layout](Repository-Layout) for the full mapping.

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:45 -0000</pubDate><guid>https://sourceforge.net7a7dc3465a1e39ef4cc7918b64373c2ca187021e</guid></item><item><title>Architecture Overview modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Architecture%2520Overview/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -2,7 +2,23 @@

 Sucrose is **not** a single monolithic application. It is a constellation of small, independent Windows executables that cooperate through three loose coupling mechanisms: short-lived process spawning (`Sucrose.Commandog.exe`), named-pipe / file-signal / TCP-loopback IPC, and shared on-disk state (settings JSON, readonly constants, and wallpaper library files). The design goal is fault isolation: each concern — UI, rendering, monitoring, crash reporting, updating, uninstall — runs in its own process so that a crash in one does not take down the wallpaper or the tray icon. This page is the developer entry point to the multi-process model: the process roster, why processes are separated, the physical-to-logical folder mapping, who spawns whom, and the conditional-compilation symbols that vary shared code per process.

-&amp;gt; 🖼️ **Diagram needed:** A "who-spawns-whom" map: Launcher (entry point) at the root, branching through Commandog to Portal, the live engine, Backgroundog, Reportdog, Update, Property, Watchdog, and Undo.

+    :::mermaid
+    flowchart TD
+        User(["User"]) --&amp;gt; Launcher["Sucrose.Launcher.exe&lt;br/&gt;tray entry point"]
+        Launcher -. owns .-&amp;gt; Tray["System tray icon&lt;br/&gt;+ Discord Rich Presence"]
+        Launcher --&amp;gt;|spawns| Commandog["Sucrose.Commandog.exe&lt;br/&gt;command dispatcher"]
+    
+        Commandog --&amp;gt; Portal["Sucrose.Portal.exe"]
+        Commandog --&amp;gt; Engine["Live engine&lt;br/&gt;Sucrose.Live.*.exe"]
+        Commandog --&amp;gt; Backgroundog["Sucrose.Backgroundog.exe"]
+        Commandog --&amp;gt; Reportdog["Sucrose.Reportdog.exe"]
+        Commandog --&amp;gt; Update["Sucrose.Update.exe"]
+        Commandog --&amp;gt; Property["Sucrose.Property.exe"]
+        Commandog --&amp;gt; Watchdog["Sucrose.Watchdog.exe"]
+    
+        Any["Any process throws"] --&amp;gt;|"Watchdog command (Base64)"| Commandog
+        Windows(["Windows Apps &amp;amp; Features"]) --&amp;gt; Undo["Sucrose.Undo.exe&lt;br/&gt;uninstaller"]
+        Engine -. spawns .-&amp;gt; Children["msedgewebview2 /&lt;br/&gt;CefSharp.BrowserSubprocess"]

 ## Contents

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:42 -0000</pubDate><guid>https://sourceforge.net8b8e75bb200c5d40762ca56cb2d0fd846bb9a9f9</guid></item><item><title>Architecture Overview modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Architecture%2520Overview/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="h-architecture-overview"&gt;Architecture Overview&lt;/h1&gt;
&lt;p&gt;Sucrose is &lt;strong&gt;not&lt;/strong&gt; a single monolithic application. It is a constellation of small, independent Windows executables that cooperate through three loose coupling mechanisms: short-lived process spawning (&lt;code&gt;Sucrose.Commandog.exe&lt;/code&gt;), named-pipe / file-signal / TCP-loopback IPC, and shared on-disk state (settings JSON, readonly constants, and wallpaper library files). The design goal is fault isolation: each concern — UI, rendering, monitoring, crash reporting, updating, uninstall — runs in its own process so that a crash in one does not take down the wallpaper or the tray icon. This page is the developer entry point to the multi-process model: the process roster, why processes are separated, the physical-to-logical folder mapping, who spawns whom, and the conditional-compilation symbols that vary shared code per process.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🖼️ &lt;strong&gt;Diagram needed:&lt;/strong&gt; A "who-spawns-whom" map: Launcher (entry point) at the root, branching through Commandog to Portal, the live engine, Backgroundog, Reportdog, Update, Property, Watchdog, and Undo.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h-contents"&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-process-roster"&gt;The process roster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#why-separate-processes"&gt;Why separate processes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-three-coupling-mechanisms"&gt;The three coupling mechanisms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#physical-folders-vs-logical-layers"&gt;Physical folders vs. logical layers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#who-spawns-whom"&gt;Who spawns whom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#common-per-process-startup-configuration"&gt;Common per-process startup configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#preprocessor-symbols"&gt;Preprocessor symbols&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#see-also"&gt;See also&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-the-process-roster"&gt;The process roster&lt;/h2&gt;
&lt;p&gt;Each component runs as its own &lt;code&gt;.exe&lt;/code&gt;. Executable names come from &lt;code&gt;src/Library/Sucrose.Memory/Manage/Readonly/App.cs&lt;/code&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Executable&lt;/th&gt;
&lt;th&gt;Folder&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Launcher.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Launcher/Sucrose.Launcher&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WPF (tray, no main window)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Entry point.&lt;/strong&gt; Owns the system-tray icon + context menu, Discord Rich Presence, and the Launcher signal channel. Routes user actions to Commandog.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Portal.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Portal/Sucrose.Portal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WPF-UI + MVVM + DI host&lt;/td&gt;
&lt;td&gt;The main settings/management window (Library, Store, Settings pages).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Commandog.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Project/Sucrose.Commandog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Console (hidden)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;The command dispatcher / process broker.&lt;/strong&gt; Parses one encoded command string, starts/kills the right process, then exits.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Backgroundog.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Project/Sucrose.Backgroundog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Console (hidden)&lt;/td&gt;
&lt;td&gt;Background service: audio visualization + system-status data feeds, performance counters, performance/pause rule enforcement. Long-running loop.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Watchdog.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Project/Sucrose.Watchdog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WPF&lt;/td&gt;
&lt;td&gt;Crash handler: decodes a Base64 exception payload, writes a report JSON, optionally shows an error dialog, and kills the faulting process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Reportdog.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Project/Sucrose.Reportdog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Console (hidden)&lt;/td&gt;
&lt;td&gt;Telemetry / error-report uploader. Long-running loop; runs only when telemetry/exception consent is granted.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Property.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Project/Sucrose.Property&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WPF&lt;/td&gt;
&lt;td&gt;Wallpaper "Customize" UI — edits the live wallpaper's user properties.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Update.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Update/Sucrose.Update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WPF&lt;/td&gt;
&lt;td&gt;Auto-update checker / downloader / installer launcher.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Undo.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Project/Sucrose.Undo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WPF&lt;/td&gt;
&lt;td&gt;Uninstall / rollback: terminates Sucrose processes, deletes install + data folders, removes shortcuts and the registry key, then self-deletes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Live engines (7)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/Live/*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WPF render hosts&lt;/td&gt;
&lt;td&gt;The wallpaper rendering backends (see below).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The seven live rendering engines and their executables:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;EngineType&lt;/th&gt;
&lt;th&gt;Executable&lt;/th&gt;
&lt;th&gt;Used for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AuroraLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Live.Aurora.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Application wallpapers (embeds an external app on the desktop)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NebulaLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Live.Nebula.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VexanaLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Live.Vexana.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gif&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;XavierLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Live.Xavier.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gif&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WebViewLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Live.WebView.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Url / Web / Video / YouTube / Gif (WebView2 backend)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CefSharpLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Live.CefSharp.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Url / Web / Video / YouTube / Gif (CEF backend)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MpvPlayerLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Live.MpvPlayer.exe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gif / Video (libmpv backend)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;See &lt;a href="./Engines-Overview"&gt;Engines Overview&lt;/a&gt; for the per-type allowed-engine matrix.&lt;/p&gt;
&lt;h2 id="h-why-separate-processes"&gt;Why separate processes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fault isolation.&lt;/strong&gt; A renderer crash, a hung browser child process, or an exception in a service does not crash the tray or the settings window. A central crash handler (&lt;code&gt;Sucrose.Watchdog.exe&lt;/code&gt;) catches failures from every process and a reporter (&lt;code&gt;Sucrose.Reportdog.exe&lt;/code&gt;) uploads them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independent lifecycles.&lt;/strong&gt; The wallpaper engine keeps running while the Portal UI is closed; the Launcher tray persists across UI sessions; short-lived workers (Commandog, Watchdog) start, do one job, and exit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backend swapping.&lt;/strong&gt; Seven interchangeable render engines run as distinct executables, so the user can switch the engine per wallpaper type without affecting the rest of the stack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privilege &amp;amp; resource separation.&lt;/strong&gt; Heavy work (audio FFT, perf counters, WMI queries) lives in &lt;code&gt;Backgroundog&lt;/code&gt;; the UI stays light.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-the-three-coupling-mechanisms"&gt;The three coupling mechanisms&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Process spawning via Commandog.&lt;/strong&gt; Most cross-process actions are &lt;em&gt;not&lt;/em&gt; direct &lt;code&gt;Process.Start&lt;/code&gt; calls — they are routed through &lt;code&gt;Sucrose.Commandog.exe&lt;/code&gt;, which is spawned with a single encoded argument string (&lt;code&gt;✔&amp;lt;Command&amp;gt;✖&amp;lt;value&amp;gt;...&lt;/code&gt;), performs the action, and exits. See &lt;a href="./Commandog-Dispatcher"&gt;Commandog Dispatcher&lt;/a&gt; and &lt;a href="./Command-Reference"&gt;Command Reference&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Live-data IPC channels.&lt;/strong&gt; Long-running processes exchange live data through three interchangeable transports — &lt;strong&gt;Pipe&lt;/strong&gt;, &lt;strong&gt;Signal&lt;/strong&gt;, and &lt;strong&gt;Transmission&lt;/strong&gt; (TCP loopback, the default) — plus the tray-control "Launcher" channel. See &lt;a href="./IPC"&gt;IPC&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared on-disk state.&lt;/strong&gt; Settings JSON (&lt;code&gt;Sucrose.Manager&lt;/code&gt;), readonly constants (&lt;code&gt;Sucrose.Memory&lt;/code&gt;), and theme/info/properties files in the wallpaper library. See &lt;a href="./Settings-Persistence"&gt;Settings Persistence&lt;/a&gt; and &lt;a href="./Data-Locations"&gt;Data Locations&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="h-physical-folders-vs-logical-layers"&gt;Physical folders vs. logical layers&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;physical &lt;code&gt;src/&lt;/code&gt; folder names do not match the logical layer names&lt;/strong&gt; — this is the &lt;a class="alink strikethrough" href="/p/sucrose/tickets/1/"&gt;[#1]&lt;/a&gt; navigation trap. Services live under &lt;code&gt;src/Project/&lt;/code&gt;, and the engine renderers under &lt;code&gt;src/Live/&lt;/code&gt;. Always map through this table.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Physical folder&lt;/th&gt;
&lt;th&gt;Contains&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Launcher/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Launcher&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Portal/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Portal&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Live/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The 7 live rendering engines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Project/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The &lt;strong&gt;Services&lt;/strong&gt;: &lt;code&gt;Backgroundog&lt;/code&gt;, &lt;code&gt;Commandog&lt;/code&gt;, &lt;code&gt;Watchdog&lt;/code&gt;, &lt;code&gt;Reportdog&lt;/code&gt;, &lt;code&gt;Property&lt;/code&gt;, &lt;code&gt;Undo&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Library/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shared class libraries (&lt;code&gt;Manager&lt;/code&gt;, &lt;code&gt;Memory&lt;/code&gt;, &lt;code&gt;Mpv.NET&lt;/code&gt;, &lt;code&gt;Pipe&lt;/code&gt;, &lt;code&gt;Resources&lt;/code&gt;, &lt;code&gt;Signal&lt;/code&gt;, &lt;code&gt;Transmission&lt;/code&gt;, &lt;code&gt;XamlAnimatedGif&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Shared/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shared Item Projects (&lt;code&gt;.shproj&lt;/code&gt;), with engine-specific ones under &lt;code&gt;src/Shared/Engine/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Update/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Update&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Bundle/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Bundle&lt;/code&gt; (installer / packager)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Localizer/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose.Localizer&lt;/code&gt; (translation tool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build output (generated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exp/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Experimental ports (Avalonia, Uno, WinUI) — &lt;strong&gt;not&lt;/strong&gt; part of the main solution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;See &lt;a href="./Repository-Layout"&gt;Repository Layout&lt;/a&gt; for the full mapping.&lt;/p&gt;
&lt;h2 id="h-who-spawns-whom"&gt;Who spawns whom&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The user&lt;/strong&gt; launches &lt;code&gt;Sucrose.Launcher.exe&lt;/code&gt;. It is the true entry point — a WPF app with no main window that lives in the tray (&lt;code&gt;ShutdownMode = OnExplicitShutdown&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Launcher&lt;/strong&gt;, on start, creates the tray icon, which in turn:&lt;/li&gt;
&lt;li&gt;auto-restores the wallpaper (&lt;code&gt;Engine.Command(false)&lt;/code&gt; → &lt;code&gt;Run.Start()&lt;/code&gt;), spawning the live engine through Commandog (&lt;code&gt;✔Live✖&amp;lt;engine.exe&amp;gt;&lt;/code&gt;), and first spawning &lt;code&gt;Backgroundog&lt;/code&gt; (&lt;code&gt;✔Backgroundog✖&amp;lt;Backgroundog&amp;gt;&lt;/code&gt;) when &lt;code&gt;PerformanceCounter&lt;/code&gt; is on;&lt;/li&gt;
&lt;li&gt;spawns &lt;code&gt;Reportdog&lt;/code&gt; to flush pending reports;&lt;/li&gt;
&lt;li&gt;runs a silent update check (spawns &lt;code&gt;Update&lt;/code&gt;) when auto-update is on.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tray actions&lt;/strong&gt; route through Commandog: Open → &lt;code&gt;✔Interface✖&amp;lt;Portal&amp;gt;&lt;/code&gt;, Customize → &lt;code&gt;✔Property✖&amp;lt;Property&amp;gt;&lt;/code&gt;, Reload → &lt;code&gt;✔RestartLive✖Unknown&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Any process that throws&lt;/strong&gt; spawns &lt;code&gt;Watchdog&lt;/code&gt; through Commandog with a Base64 exception payload; &lt;code&gt;Reportdog&lt;/code&gt; later uploads the report.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Sucrose.Undo.exe&lt;/code&gt;&lt;/strong&gt; is launched by Windows Apps &amp;amp; Features as the uninstaller and tears the whole installation down.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the full cold-start sequence and teardown order, see &lt;a href="./Lifecycle"&gt;Lifecycle&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="h-common-per-process-startup-configuration"&gt;Common per-process startup configuration&lt;/h2&gt;
&lt;p&gt;Every process runs the same two configuration helpers before anything else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SSDHR.Configure()&lt;/code&gt; (&lt;code&gt;Shared.Dependency.Helper.Runtime&lt;/code&gt;) — &lt;strong&gt;RELEASE-only.&lt;/strong&gt; Points the process at the &lt;strong&gt;bundled private .NET runtime&lt;/strong&gt; by setting env vars (&lt;code&gt;DOTNET_ROOT&lt;/code&gt;, &lt;code&gt;DOTNET_MULTILEVEL_LOOKUP=0&lt;/code&gt;, &lt;code&gt;DOTNET_ROLL_FORWARD=LatestMajor&lt;/code&gt;) and prepending the runtime folder &lt;code&gt;&amp;lt;parent&amp;gt;/Sucrose.Runtime&lt;/code&gt; to &lt;code&gt;PATH&lt;/code&gt;. Debug builds use the machine's installed runtime.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SSDHG.Configure()&lt;/code&gt; (&lt;code&gt;Shared.Dependency.Helper.Graphic&lt;/code&gt;) — calls &lt;code&gt;EnsureHighPerformance(exe)&lt;/code&gt; so the process is registered for the high-performance GPU on multi-GPU laptops.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plus: thread culture is set from the &lt;code&gt;Culture&lt;/code&gt; setting; WPF apps set &lt;code&gt;ShutdownMode&lt;/code&gt;; console apps (Commandog, Backgroundog, Reportdog) set &lt;code&gt;Console.InputEncoding/OutputEncoding = UTF8&lt;/code&gt; so the &lt;code&gt;✔&lt;/code&gt; / &lt;code&gt;✖&lt;/code&gt; command delimiters survive. See &lt;a href="./Lifecycle"&gt;Lifecycle&lt;/a&gt; for details.&lt;/p&gt;
&lt;h2 id="h-preprocessor-symbols"&gt;Preprocessor symbols&lt;/h2&gt;
&lt;p&gt;Every executable defines a project-specific symbol so that the shared &lt;code&gt;.shproj&lt;/code&gt; code can vary behavior with &lt;code&gt;#if&lt;/code&gt;. See &lt;a href="./Preprocessor-Symbols"&gt;Preprocessor Symbols&lt;/a&gt; for the full reference.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;App symbols:&lt;/strong&gt; &lt;code&gt;LAUNCHER&lt;/code&gt;, &lt;code&gt;PORTAL&lt;/code&gt;, &lt;code&gt;BACKGROUNDOG&lt;/code&gt;, &lt;code&gt;COMMANDOG&lt;/code&gt;, &lt;code&gt;WATCHDOG&lt;/code&gt;, &lt;code&gt;REPORTDOG&lt;/code&gt;, &lt;code&gt;PROPERTY&lt;/code&gt;, &lt;code&gt;UNDO&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Engine symbols:&lt;/strong&gt; &lt;code&gt;ENGINE&lt;/code&gt; plus one of &lt;code&gt;LIVE_WEBVIEW&lt;/code&gt;, &lt;code&gt;LIVE_CEFSHARP&lt;/code&gt;, &lt;code&gt;LIVE_MPVPLAYER&lt;/code&gt;, &lt;code&gt;LIVE_AURORA&lt;/code&gt;, &lt;code&gt;LIVE_NEBULA&lt;/code&gt;, &lt;code&gt;LIVE_VEXANA&lt;/code&gt;, &lt;code&gt;LIVE_XAVIER&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Platform symbols&lt;/strong&gt; (from &lt;code&gt;Directory.Build.targets&lt;/code&gt;, keyed off &lt;code&gt;PlatformTarget&lt;/code&gt;): &lt;code&gt;X86&lt;/code&gt;, &lt;code&gt;X64&lt;/code&gt;, &lt;code&gt;ARM64&lt;/code&gt; — each also sets the matching &lt;code&gt;RuntimeIdentifier&lt;/code&gt; (&lt;code&gt;win-x86&lt;/code&gt; / &lt;code&gt;win-x64&lt;/code&gt; / &lt;code&gt;win-arm64&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RELEASE&lt;/code&gt; gates the private-runtime env-var setup in &lt;code&gt;Runtime.Configure()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-see-also"&gt;See also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="./Lifecycle"&gt;Lifecycle&lt;/a&gt; — startup, auto-restore, and Exit vs. Close teardown.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Commandog-Dispatcher"&gt;Commandog Dispatcher&lt;/a&gt; — the short-lived command broker.&lt;/li&gt;
&lt;li&gt;&lt;a href="./IPC"&gt;IPC&lt;/a&gt; — pipe / signal / transmission channels and the command bus.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Single-Instance-Mutexes"&gt;Single Instance Mutexes&lt;/a&gt; — which processes gate and how.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Engines-Overview"&gt;Engines Overview&lt;/a&gt; — the seven render engines.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Repository-Layout"&gt;Repository Layout&lt;/a&gt; — folder-to-layer mapping.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Preprocessor-Symbols"&gt;Preprocessor Symbols&lt;/a&gt; — per-app / engine / platform &lt;code&gt;#if&lt;/code&gt; symbols.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:17 -0000</pubDate><guid>https://sourceforge.net5d56d69a79be16cf41b4fd67576a7d0fb28c5ae2</guid></item></channel></rss>